version.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import json
  2. import logging
  3. import requests
  4. from flask_restful import Resource, reqparse # type: ignore
  5. from packaging import version
  6. from configs import dify_config
  7. from . import api
  8. class VersionApi(Resource):
  9. def get(self):
  10. parser = reqparse.RequestParser()
  11. parser.add_argument("current_version", type=str, required=True, location="args")
  12. args = parser.parse_args()
  13. check_update_url = dify_config.CHECK_UPDATE_URL
  14. result = {
  15. "version": dify_config.CURRENT_VERSION,
  16. "release_date": "",
  17. "release_notes": "",
  18. "can_auto_update": False,
  19. "features": {
  20. "can_replace_logo": dify_config.CAN_REPLACE_LOGO,
  21. "model_load_balancing_enabled": dify_config.MODEL_LB_ENABLED,
  22. },
  23. }
  24. if not check_update_url:
  25. return result
  26. try:
  27. response = requests.get(check_update_url, {"current_version": args.get("current_version")})
  28. except Exception as error:
  29. logging.warning("Check update version error: {}.".format(str(error)))
  30. result["version"] = args.get("current_version")
  31. return result
  32. content = json.loads(response.content)
  33. if _has_new_version(latest_version=content["version"], current_version=f"{args.get('current_version')}"):
  34. result["version"] = content["version"]
  35. result["release_date"] = content["releaseDate"]
  36. result["release_notes"] = content["releaseNotes"]
  37. result["can_auto_update"] = content["canAutoUpdate"]
  38. return result
  39. def _has_new_version(*, latest_version: str, current_version: str) -> bool:
  40. try:
  41. latest = version.parse(latest_version)
  42. current = version.parse(current_version)
  43. # Compare versions
  44. return latest > current
  45. except version.InvalidVersion:
  46. logging.warning(f"Invalid version format: latest={latest_version}, current={current_version}")
  47. return False
  48. api.add_resource(VersionApi, "/version")