mirror of
https://github.com/langgenius/dify.git
synced 2025-11-05 21:30:07 +00:00
Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: -LAN- <laipz8200@outlook.com>
85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
import json
|
|
import logging
|
|
|
|
import requests
|
|
from flask_restx import Resource, fields, reqparse
|
|
from packaging import version
|
|
|
|
from configs import dify_config
|
|
|
|
from . import api, console_ns
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@console_ns.route("/version")
|
|
class VersionApi(Resource):
|
|
@api.doc("check_version_update")
|
|
@api.doc(description="Check for application version updates")
|
|
@api.expect(
|
|
api.parser().add_argument(
|
|
"current_version", type=str, required=True, location="args", help="Current application version"
|
|
)
|
|
)
|
|
@api.response(
|
|
200,
|
|
"Success",
|
|
api.model(
|
|
"VersionResponse",
|
|
{
|
|
"version": fields.String(description="Latest version number"),
|
|
"release_date": fields.String(description="Release date of latest version"),
|
|
"release_notes": fields.String(description="Release notes for latest version"),
|
|
"can_auto_update": fields.Boolean(description="Whether auto-update is supported"),
|
|
"features": fields.Raw(description="Feature flags and capabilities"),
|
|
},
|
|
),
|
|
)
|
|
def get(self):
|
|
"""Check for application version updates"""
|
|
parser = reqparse.RequestParser()
|
|
parser.add_argument("current_version", type=str, required=True, location="args")
|
|
args = parser.parse_args()
|
|
check_update_url = dify_config.CHECK_UPDATE_URL
|
|
|
|
result = {
|
|
"version": dify_config.project.version,
|
|
"release_date": "",
|
|
"release_notes": "",
|
|
"can_auto_update": False,
|
|
"features": {
|
|
"can_replace_logo": dify_config.CAN_REPLACE_LOGO,
|
|
"model_load_balancing_enabled": dify_config.MODEL_LB_ENABLED,
|
|
},
|
|
}
|
|
|
|
if not check_update_url:
|
|
return result
|
|
|
|
try:
|
|
response = requests.get(check_update_url, {"current_version": args["current_version"]}, timeout=(3, 10))
|
|
except Exception as error:
|
|
logger.warning("Check update version error: %s.", str(error))
|
|
result["version"] = args["current_version"]
|
|
return result
|
|
|
|
content = json.loads(response.content)
|
|
if _has_new_version(latest_version=content["version"], current_version=f"{args['current_version']}"):
|
|
result["version"] = content["version"]
|
|
result["release_date"] = content["releaseDate"]
|
|
result["release_notes"] = content["releaseNotes"]
|
|
result["can_auto_update"] = content["canAutoUpdate"]
|
|
return result
|
|
|
|
|
|
def _has_new_version(*, latest_version: str, current_version: str) -> bool:
|
|
try:
|
|
latest = version.parse(latest_version)
|
|
current = version.parse(current_version)
|
|
|
|
# Compare versions
|
|
return latest > current
|
|
except version.InvalidVersion:
|
|
logger.warning("Invalid version format: latest=%s, current=%s", latest_version, current_version)
|
|
return False
|