wraps.py 3.1 KB

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