wraps.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import json
  2. from functools import wraps
  3. from flask_login import login_required, current_user
  4. from flask_restful import Resource
  5. from controllers.console.setup import setup_required
  6. from controllers.console.wraps import account_initialization_required
  7. from extensions.ext_database import db
  8. from models.model import App, AppModelConfig
  9. def universal_chat_app_required(view=None):
  10. def decorator(view):
  11. @wraps(view)
  12. def decorated(*args, **kwargs):
  13. # get universal chat app
  14. universal_app = db.session.query(App).filter(
  15. App.tenant_id == current_user.current_tenant_id,
  16. App.is_universal == True
  17. ).first()
  18. if universal_app is None:
  19. # create universal app if not exists
  20. universal_app = App(
  21. tenant_id=current_user.current_tenant_id,
  22. name='Universal Chat',
  23. mode='chat',
  24. is_universal=True,
  25. icon='',
  26. icon_background='',
  27. api_rpm=0,
  28. api_rph=0,
  29. enable_site=False,
  30. enable_api=False,
  31. status='normal'
  32. )
  33. db.session.add(universal_app)
  34. db.session.flush()
  35. app_model_config = AppModelConfig(
  36. provider="",
  37. model_id="",
  38. configs={},
  39. opening_statement='',
  40. suggested_questions=json.dumps([]),
  41. suggested_questions_after_answer=json.dumps({'enabled': True}),
  42. speech_to_text=json.dumps({'enabled': True}),
  43. more_like_this=None,
  44. sensitive_word_avoidance=None,
  45. model=json.dumps({
  46. "provider": "openai",
  47. "name": "gpt-3.5-turbo-16k",
  48. "completion_params": {
  49. "max_tokens": 800,
  50. "temperature": 0.8,
  51. "top_p": 1,
  52. "presence_penalty": 0,
  53. "frequency_penalty": 0
  54. }
  55. }),
  56. user_input_form=json.dumps([]),
  57. pre_prompt='',
  58. agent_mode=json.dumps({"enabled": True, "strategy": "function_call", "tools": []}),
  59. )
  60. app_model_config.app_id = universal_app.id
  61. db.session.add(app_model_config)
  62. db.session.flush()
  63. universal_app.app_model_config_id = app_model_config.id
  64. db.session.commit()
  65. return view(universal_app, *args, **kwargs)
  66. return decorated
  67. if view:
  68. return decorator(view)
  69. return decorator
  70. class UniversalChatResource(Resource):
  71. # must be reversed if there are multiple decorators
  72. method_decorators = [universal_chat_app_required, account_initialization_required, login_required, setup_required]