Skip to content

Commit f3357b1

Browse files
authored
Merge pull request #628 from AnguseZhang/fix/project-error
feat: add async capability to project ID retrieval and logging enhanc…
2 parents a008ed0 + aabfa3d commit f3357b1

4 files changed

Lines changed: 51 additions & 8 deletions

File tree

agents/matmaster_agent/base_callbacks/private_callback.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -450,8 +450,10 @@ def _inject_ak(ctx: Union[InvocationContext, ToolContext], executor, storage):
450450
return access_key, executor, storage
451451

452452

453-
def _inject_projectId(ctx: Union[InvocationContext, ToolContext], executor, storage):
454-
project_id = _get_projectId(ctx)
453+
async def _inject_projectId(
454+
ctx: Union[InvocationContext, ToolContext], executor, storage
455+
):
456+
project_id = await _get_projectId(ctx)
455457
if executor is not None:
456458
if executor['type'] == 'dispatcher': # BohriumExecutor
457459
executor['machine']['remote_profile']['project_id'] = int(project_id)
@@ -571,7 +573,7 @@ async def wrapper(
571573

572574
# 获取 project_id
573575
try:
574-
project_id, tool.executor, tool.storage = _inject_projectId(
576+
project_id, tool.executor, tool.storage = await _inject_projectId(
575577
tool_context, tool.executor, tool.storage
576578
)
577579
except ValueError as e:

agents/matmaster_agent/core_agents/public_agents/job_agents/result_core_agent/agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ async def _run_events(self, ctx: InvocationContext) -> AsyncGenerator[Event, Non
7373
access_key, Executor, BohriumStorge = _inject_ak(
7474
ctx, get_BohriumExecutor(), get_BohriumStorage()
7575
)
76-
project_id, Executor, BohriumStorge = _inject_projectId(
76+
project_id, Executor, BohriumStorge = await _inject_projectId(
7777
ctx, Executor, BohriumStorge
7878
)
7979
else:
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import asyncio
2+
import json
3+
4+
import aiohttp
5+
6+
from agents.matmaster_agent.constant import OPENAPI_HOST
7+
8+
9+
async def get_project_list(access_key: str):
10+
user_project_list_url = f"{OPENAPI_HOST}/openapi/v1/open/user/project/list"
11+
params = {'accessKey': access_key}
12+
13+
async with aiohttp.ClientSession() as session:
14+
async with session.get(user_project_list_url, params=params) as response:
15+
res = json.loads(await response.text())
16+
project_list = res.get('data', {}).get('items', [])
17+
18+
if project_list:
19+
return [item['project_id'] for item in project_list]
20+
else:
21+
return project_list
22+
23+
24+
if __name__ == '__main__':
25+
result = asyncio.run(get_project_list('ba5cdc51b4934d1689e38332b27bb271'))

agents/matmaster_agent/utils/callback_utils.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
import os
23
from typing import Union
34

@@ -10,20 +11,35 @@
1011
FRONTEND_STATE_KEY,
1112
MATERIALS_ACCESS_KEY,
1213
MATERIALS_PROJECT_ID,
14+
MATMASTER_AGENT_NAME,
1315
)
16+
from agents.matmaster_agent.logger import PrefixFilter
17+
from agents.matmaster_agent.services.project import get_project_list
1418
from agents.matmaster_agent.utils.helper_func import (
1519
check_None_wrapper,
1620
get_session_state,
1721
)
1822

23+
logger = logging.getLogger(__name__)
24+
logger.addFilter(PrefixFilter(MATMASTER_AGENT_NAME))
25+
logger.setLevel(logging.INFO)
26+
1927

2028
@check_None_wrapper
21-
def _get_projectId(ctx: Union[InvocationContext, ToolContext]):
29+
async def _get_projectId(ctx: Union[InvocationContext, ToolContext]):
2230
if USER_DIRECT_CONSUME:
2331
session_state = get_session_state(ctx)
24-
return session_state[FRONTEND_STATE_KEY]['biz'].get('projectId') or os.getenv(
25-
'BOHRIUM_PROJECT_ID'
26-
)
32+
project_id = session_state[FRONTEND_STATE_KEY]['biz'].get(
33+
'projectId'
34+
) or os.getenv('BOHRIUM_PROJECT_ID')
35+
project_list = await get_project_list(access_key=_get_ak(ctx))
36+
if project_id in project_list:
37+
return project_id
38+
else:
39+
logger.warning(
40+
f'{ctx.session.id} project_id <{project_id}> is not exist, use project_list[0] <{project_list[0]}>'
41+
)
42+
return project_list[0]
2743
else:
2844
return MATERIALS_PROJECT_ID
2945

0 commit comments

Comments
 (0)