diff --git a/apps/models_provider/serializers/model_serializer.py b/apps/models_provider/serializers/model_serializer.py index fa55aa9e1..2e7105899 100644 --- a/apps/models_provider/serializers/model_serializer.py +++ b/apps/models_provider/serializers/model_serializer.py @@ -386,3 +386,30 @@ class ModelSerializer(serializers.Serializer): model.model_params_form = model_params_form model.save() return True + + +class SharedModelSerializer(serializers.Serializer): + workspace_id = serializers.CharField(required=True, label=_('workspace id')) + name = serializers.CharField(required=False, max_length=64, label=_('model name')) + model_type = serializers.CharField(required=False, label=_('model type')) + model_name = serializers.CharField(required=False, label=_('base model')) + provider = serializers.CharField(required=False, label=_('provider')) + create_user = serializers.CharField(required=False, label=_('create user')) + + def get_share_model_list(self): + self.is_valid(raise_exception=True) + queryset = QuerySet(Model).filter(workspace_id='None') + return [ + { + 'id': str(model.id), + 'provider': model.provider, + 'name': model.name, + 'model_type': model.model_type, + 'model_name': model.model_name, + 'status': model.status, + 'meta': model.meta, + 'user_id': model.user_id, + 'username': model.user.username + } + for model in queryset.order_by("-create_time") + ] diff --git a/apps/models_provider/urls.py b/apps/models_provider/urls.py index 0237de0b2..4f126d5aa 100644 --- a/apps/models_provider/urls.py +++ b/apps/models_provider/urls.py @@ -18,6 +18,7 @@ urlpatterns = [ path('workspace//model//pause_download', views.ModelSetting.PauseDownload.as_view()), path('workspace//model//meta', views.ModelSetting.ModelMeta.as_view()), + path('workspace//shared/model', views.SharedModel.as_view()), ] if os.environ.get('SERVER_NAME', 'web') == 'local_model': diff --git a/apps/models_provider/views/model.py b/apps/models_provider/views/model.py index 2c5fec60b..fc3e9be64 100644 --- a/apps/models_provider/views/model.py +++ b/apps/models_provider/views/model.py @@ -21,7 +21,7 @@ from common.utils.common import query_params_to_single_dict from models_provider.api.model import ModelCreateAPI, GetModelApi, ModelEditApi, ModelListResponse, DefaultModelResponse from models_provider.api.provide import ProvideApi from models_provider.models import Model -from models_provider.serializers.model_serializer import ModelSerializer +from models_provider.serializers.model_serializer import ModelSerializer, SharedModelSerializer from system_manage.views import encryption_str @@ -212,3 +212,21 @@ class ModelSetting(APIView): def put(self, request: Request, workspace_id: str, model_id: str): return result.success( ModelSerializer.Operate(data={'id': model_id}).pause_download()) + + +class SharedModel(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['Get'], + summary=_('Get Share model'), + description=_('Get Share model'), + operation_id=_('Get Share model'), # type: ignore + parameters=ModelCreateAPI.get_parameters(), + responses=ModelListResponse.get_response(), + tags=[_('Shared Model')] + ) # type: ignore + @has_permissions(PermissionConstants.MODEL_READ) + def get(self, request: Request, workspace_id: str): + return result.success( + SharedModelSerializer(data={'workspace_id': workspace_id}).get_share_model_list()) \ No newline at end of file diff --git a/ui/src/api/shared/workspace.ts b/ui/src/api/shared/workspace.ts index f1647ef69..24217ca91 100644 --- a/ui/src/api/shared/workspace.ts +++ b/ui/src/api/shared/workspace.ts @@ -1,15 +1,16 @@ -import { Result } from '@/request/Result' -import { get, post, del, put, exportFile, exportExcel } from '@/request/index' -import { type Ref } from 'vue' -import type { pageRequest } from '@/api/type/common' -import type { knowledgeData } from '@/api/type/knowledge' +import {Result} from '@/request/Result' +import {get, post, del, put, exportFile, exportExcel} from '@/request/index' +import {type Ref} from 'vue' +import type {pageRequest} from '@/api/type/common' +import type {knowledgeData} from '@/api/type/knowledge' import useStore from '@/stores' + const prefix = '/system/shared' -const prefix_workspace: any = { _value: '/workspace/' } +const prefix_workspace: any = {_value: 'workspace/'} Object.defineProperty(prefix_workspace, 'value', { get: function () { - const { user } = useStore() + const {user} = useStore() return this._value + user.getWorkspaceId() }, }) @@ -38,10 +39,18 @@ const getSharedWorkspaceModel: (loading?: Ref) => Promise) => Promise>> = ( + loading, +) => { + return get(`/${prefix_workspace.value}/model`, {}, loading) + +} + const getSharedWorkspaceModelPage: ( param: any, loading?: Ref, ) => Promise>> = (param: any, loading) => { + console.log(`${prefix}/${prefix_workspace.value}/model`) return get(`${prefix}/${prefix_workspace.value}/model`, param, loading) } @@ -65,4 +74,5 @@ export default { getSharedWorkspaceModelPage, getSharedWorkspaceTool, getSharedWorkspaceToolPage, + getCESharedWorkspaceModel }