From bf39e314d8d8e9b72419a948746ea1a56ae47bca Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Tue, 24 Dec 2024 18:38:12 +0800 Subject: [PATCH 1/2] fix: add install count --- api/core/helper/marketplace.py | 6 ++++++ api/services/plugin/plugin_service.py | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/api/core/helper/marketplace.py b/api/core/helper/marketplace.py index 743bef9316..f4129b88ed 100644 --- a/api/core/helper/marketplace.py +++ b/api/core/helper/marketplace.py @@ -27,3 +27,9 @@ def batch_fetch_plugin_manifests(plugin_ids: list[str]) -> Sequence[MarketplaceP response = requests.post(url, json={"plugin_ids": plugin_ids}) response.raise_for_status() return [MarketplacePluginDeclaration(**plugin) for plugin in response.json()["data"]["plugins"]] + + +def record_install_plugin_event(plugin_unique_identifier: str): + url = str(URL(str(dify_config.MARKETPLACE_API_URL)) / "api/v1/stats/plugins/install_count") + response = requests.post(url, json={"unique_identifier": plugin_unique_identifier}) + response.raise_for_status() diff --git a/api/services/plugin/plugin_service.py b/api/services/plugin/plugin_service.py index 701b7c6171..e3c37ecba7 100644 --- a/api/services/plugin/plugin_service.py +++ b/api/services/plugin/plugin_service.py @@ -144,7 +144,8 @@ class PluginService: try: manager.fetch_plugin_manifest(tenant_id, new_plugin_unique_identifier) - # already downloaded, skip + # already downloaded, skip, and record install event + marketplace.record_install_plugin_event(new_plugin_unique_identifier) except Exception: # plugin not installed, download and upload pkg pkg = download_plugin_pkg(new_plugin_unique_identifier) From 39656f7f8477df6a6d1c4f6c5c835d8f42b87f5c Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Tue, 24 Dec 2024 18:38:34 +0800 Subject: [PATCH 2/2] fix: linter and formatter --- api/core/agent/strategy/base.py | 3 ++- api/core/agent/strategy/plugin.py | 3 ++- api/core/app/apps/advanced_chat/app_generator.py | 4 ++-- api/core/app/entities/queue_entities.py | 3 ++- api/core/plugin/backwards_invocation/base.py | 4 ++-- api/core/tools/entities/tool_entities.py | 3 ++- api/core/workflow/nodes/agent/agent_node.py | 4 ++-- api/libs/helper.py | 2 +- 8 files changed, 15 insertions(+), 11 deletions(-) diff --git a/api/core/agent/strategy/base.py b/api/core/agent/strategy/base.py index a9b9326fc5..ead81a7a0e 100644 --- a/api/core/agent/strategy/base.py +++ b/api/core/agent/strategy/base.py @@ -1,5 +1,6 @@ from abc import ABC, abstractmethod -from typing import Any, Generator, Optional, Sequence +from collections.abc import Generator, Sequence +from typing import Any, Optional from core.agent.entities import AgentInvokeMessage from core.agent.plugin_entities import AgentStrategyParameter diff --git a/api/core/agent/strategy/plugin.py b/api/core/agent/strategy/plugin.py index 979096c154..dc4cfaf34e 100644 --- a/api/core/agent/strategy/plugin.py +++ b/api/core/agent/strategy/plugin.py @@ -1,4 +1,5 @@ -from typing import Any, Generator, Optional, Sequence +from collections.abc import Generator, Sequence +from typing import Any, Optional from core.agent.entities import AgentInvokeMessage from core.agent.plugin_entities import AgentStrategyEntity, AgentStrategyParameter diff --git a/api/core/app/apps/advanced_chat/app_generator.py b/api/core/app/apps/advanced_chat/app_generator.py index 8b75d91979..c9adbeb964 100644 --- a/api/core/app/apps/advanced_chat/app_generator.py +++ b/api/core/app/apps/advanced_chat/app_generator.py @@ -2,8 +2,8 @@ import contextvars import logging import threading import uuid -from collections.abc import Generator -from typing import Any, Literal, Mapping, Optional, Union, overload +from collections.abc import Generator, Mapping +from typing import Any, Literal, Optional, Union, overload from flask import Flask, current_app from pydantic import ValidationError diff --git a/api/core/app/entities/queue_entities.py b/api/core/app/entities/queue_entities.py index 6ed06ff0fc..e915dea23b 100644 --- a/api/core/app/entities/queue_entities.py +++ b/api/core/app/entities/queue_entities.py @@ -1,6 +1,7 @@ +from collections.abc import Mapping from datetime import datetime from enum import Enum, StrEnum -from typing import Any, Mapping, Optional +from typing import Any, Optional from pydantic import BaseModel diff --git a/api/core/plugin/backwards_invocation/base.py b/api/core/plugin/backwards_invocation/base.py index 50efa2eeb1..3214e07469 100644 --- a/api/core/plugin/backwards_invocation/base.py +++ b/api/core/plugin/backwards_invocation/base.py @@ -1,5 +1,5 @@ -from collections.abc import Generator -from typing import Generic, Mapping, Optional, TypeVar +from collections.abc import Generator, Mapping +from typing import Generic, Optional, TypeVar from pydantic import BaseModel diff --git a/api/core/tools/entities/tool_entities.py b/api/core/tools/entities/tool_entities.py index 050a43bad0..38980f6d75 100644 --- a/api/core/tools/entities/tool_entities.py +++ b/api/core/tools/entities/tool_entities.py @@ -1,7 +1,8 @@ import base64 import enum +from collections.abc import Mapping from enum import Enum -from typing import Any, Mapping, Optional, Union +from typing import Any, Optional, Union from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_serializer, field_validator diff --git a/api/core/workflow/nodes/agent/agent_node.py b/api/core/workflow/nodes/agent/agent_node.py index 5347df99b9..4be71da574 100644 --- a/api/core/workflow/nodes/agent/agent_node.py +++ b/api/core/workflow/nodes/agent/agent_node.py @@ -1,5 +1,5 @@ -from collections.abc import Generator -from typing import Any, Sequence, cast +from collections.abc import Generator, Sequence +from typing import Any, cast from core.agent.plugin_entities import AgentStrategyParameter from core.plugin.manager.exc import PluginDaemonClientSideError diff --git a/api/libs/helper.py b/api/libs/helper.py index 22cece2c02..78f36bc58b 100644 --- a/api/libs/helper.py +++ b/api/libs/helper.py @@ -10,10 +10,10 @@ from collections.abc import Generator from datetime import datetime from hashlib import sha256 from typing import TYPE_CHECKING, Any, Optional, Union, cast +from zoneinfo import available_timezones from flask import Response, stream_with_context from flask_restful import fields -from zoneinfo import available_timezones from configs import dify_config from core.app.features.rate_limiting.rate_limit import RateLimitGenerator