mirror of
https://github.com/csunny/DB-GPT.git
synced 2025-09-12 20:53:48 +00:00
feat(core): Fetch flow nodes API supports filterd by tags
This commit is contained in:
@@ -1145,9 +1145,40 @@ class FlowRegistry:
|
|||||||
"""Get the registry item by the key."""
|
"""Get the registry item by the key."""
|
||||||
return self._registry.get(key)
|
return self._registry.get(key)
|
||||||
|
|
||||||
def metadata_list(self):
|
def metadata_list(
|
||||||
"""Get the metadata list."""
|
self,
|
||||||
return [item.metadata.to_dict() for item in self._registry.values()]
|
tags: Optional[Dict[str, str]] = None,
|
||||||
|
user_name: Optional[str] = None,
|
||||||
|
sys_code: Optional[str] = None,
|
||||||
|
) -> List[Dict]:
|
||||||
|
"""Get the metadata list.
|
||||||
|
|
||||||
|
TODO: Support the user and system code filter.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
tags (Optional[Dict[str, str]], optional): The tags. Defaults to None.
|
||||||
|
user_name (Optional[str], optional): The user name. Defaults to None.
|
||||||
|
sys_code (Optional[str], optional): The system code. Defaults to None.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Dict]: The metadata list.
|
||||||
|
"""
|
||||||
|
if not tags:
|
||||||
|
return [item.metadata.to_dict() for item in self._registry.values()]
|
||||||
|
else:
|
||||||
|
results = []
|
||||||
|
for item in self._registry.values():
|
||||||
|
node_tags = item.metadata.tags
|
||||||
|
is_match = True
|
||||||
|
if not node_tags or not isinstance(node_tags, dict):
|
||||||
|
continue
|
||||||
|
for k, v in tags.items():
|
||||||
|
if node_tags.get(k) != v:
|
||||||
|
is_match = False
|
||||||
|
break
|
||||||
|
if is_match:
|
||||||
|
results.append(item.metadata.to_dict())
|
||||||
|
return results
|
||||||
|
|
||||||
async def refresh(
|
async def refresh(
|
||||||
self,
|
self,
|
||||||
|
@@ -796,6 +796,8 @@ def is_variable_string(variable_str: str) -> bool:
|
|||||||
Returns:
|
Returns:
|
||||||
bool: True if the string is a variable string, False otherwise.
|
bool: True if the string is a variable string, False otherwise.
|
||||||
"""
|
"""
|
||||||
|
if not variable_str or not isinstance(variable_str, str):
|
||||||
|
return False
|
||||||
if not _is_variable_format(variable_str):
|
if not _is_variable_format(variable_str):
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
|
import json
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from typing import List, Literal, Optional, Union
|
from typing import Dict, List, Literal, Optional, Union
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
from fastapi import APIRouter, Depends, HTTPException, Query, Request
|
||||||
from fastapi.security.http import HTTPAuthorizationCredentials, HTTPBearer
|
from fastapi.security.http import HTTPAuthorizationCredentials, HTTPBearer
|
||||||
@@ -229,16 +230,38 @@ async def query_page(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/nodes", dependencies=[Depends(check_api_key)])
|
@router.get("/nodes", dependencies=[Depends(check_api_key)])
|
||||||
async def get_nodes():
|
async def get_nodes(
|
||||||
|
user_name: Optional[str] = Query(default=None, description="user name"),
|
||||||
|
sys_code: Optional[str] = Query(default=None, description="system code"),
|
||||||
|
tags: Optional[str] = Query(default=None, description="tags"),
|
||||||
|
):
|
||||||
"""Get the operator or resource nodes
|
"""Get the operator or resource nodes
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_name (Optional[str]): The username
|
||||||
|
sys_code (Optional[str]): The system code
|
||||||
|
tags (Optional[str]): The tags encoded in JSON format
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Result[List[Union[ViewMetadata, ResourceMetadata]]]:
|
Result[List[Union[ViewMetadata, ResourceMetadata]]]:
|
||||||
The operator or resource nodes
|
The operator or resource nodes
|
||||||
"""
|
"""
|
||||||
from dbgpt.core.awel.flow.base import _OPERATOR_REGISTRY
|
from dbgpt.core.awel.flow.base import _OPERATOR_REGISTRY
|
||||||
|
|
||||||
metadata_list = _OPERATOR_REGISTRY.metadata_list()
|
tags_dict: Optional[Dict[str, str]] = None
|
||||||
|
if tags:
|
||||||
|
try:
|
||||||
|
tags_dict = json.loads(tags)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
return Result.fail("Invalid JSON format for tags")
|
||||||
|
|
||||||
|
metadata_list = await blocking_func_to_async(
|
||||||
|
global_system_app,
|
||||||
|
_OPERATOR_REGISTRY.metadata_list,
|
||||||
|
tags_dict,
|
||||||
|
user_name,
|
||||||
|
sys_code,
|
||||||
|
)
|
||||||
return Result.succ(metadata_list)
|
return Result.succ(metadata_list)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -881,3 +881,39 @@ class ExampleFlowVariablesOperator(MapOperator[str, str]):
|
|||||||
}
|
}
|
||||||
json_data = json.dumps(dict_dict, ensure_ascii=False)
|
json_data = json.dumps(dict_dict, ensure_ascii=False)
|
||||||
return "Your name is %s, and your model info is %s." % (user_name, json_data)
|
return "Your name is %s, and your model info is %s." % (user_name, json_data)
|
||||||
|
|
||||||
|
|
||||||
|
class ExampleFlowTagsOperator(MapOperator[str, str]):
|
||||||
|
"""An example flow operator that includes a tags option."""
|
||||||
|
|
||||||
|
metadata = ViewMetadata(
|
||||||
|
label="Example Tags Operator",
|
||||||
|
name="example_tags_operator",
|
||||||
|
category=OperatorCategory.EXAMPLE,
|
||||||
|
description="An example flow operator that includes a tags",
|
||||||
|
parameters=[],
|
||||||
|
inputs=[
|
||||||
|
IOField.build_from(
|
||||||
|
"User Name",
|
||||||
|
"user_name",
|
||||||
|
str,
|
||||||
|
description="The name of the user.",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
outputs=[
|
||||||
|
IOField.build_from(
|
||||||
|
"Tags",
|
||||||
|
"tags",
|
||||||
|
str,
|
||||||
|
description="The tags to use.",
|
||||||
|
),
|
||||||
|
],
|
||||||
|
tags={"order": "higher-order", "type": "example"},
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
async def map(self, user_name: str) -> str:
|
||||||
|
"""Map the user name to the tags."""
|
||||||
|
return "Your name is %s, and your tags are %s." % (user_name, "higher-order")
|
||||||
|
Reference in New Issue
Block a user