From a6c6d6e336ff1185429330faa1c104601d407a0b Mon Sep 17 00:00:00 2001 From: Tiger Ren Date: Mon, 7 Oct 2024 17:23:07 +0800 Subject: [PATCH] init commit --- .gitignore | 11 ++++++++++ README.md | 0 app/__init__.py | 18 +++++++++++++++ app/api/__init__.py | 0 app/api/v1/__init__.py | 0 app/api/v1/controllers.py | 7 ++++++ app/api/v1/models.py | 0 app/api/v1/zhipu_controller.py | 21 ++++++++++++++++++ app/config.py | 6 +++++ app/services/openai_service.py | 0 app/services/zhipu_service.py | 40 ++++++++++++++++++++++++++++++++++ config.py | 0 manage.py | 6 +++++ requirements.txt | 17 +++++++++++++++ tests/__init__.py | 0 15 files changed, 126 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/__init__.py create mode 100644 app/api/__init__.py create mode 100644 app/api/v1/__init__.py create mode 100644 app/api/v1/controllers.py create mode 100644 app/api/v1/models.py create mode 100644 app/api/v1/zhipu_controller.py create mode 100644 app/config.py create mode 100644 app/services/openai_service.py create mode 100644 app/services/zhipu_service.py create mode 100644 config.py create mode 100644 manage.py create mode 100644 requirements.txt create mode 100644 tests/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..55c3426 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +__pycache__/ +*.pyc +*.pyo +.env + +# IDE +.vscode/ +.idea/ + +# OS +.DS_Store" >> .gitignore \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..073f4aa --- /dev/null +++ b/app/__init__.py @@ -0,0 +1,18 @@ +from flask import Flask +from app.api.v1.controllers import api_v1 +from app.api.v1.zhipu_controller import zhipu_controller +from app.config import Config + +def create_app(): + app = Flask(__name__) + app.config.from_object(Config) + + # Register Blueprints + app.register_blueprint(api_v1, url_prefix='/api/v1') + + + + # Register Zhipu-related routes under /api/v1/zhipu + app.register_blueprint(zhipu_controller, url_prefix='/api/v1') + + return app diff --git a/app/api/__init__.py b/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/v1/__init__.py b/app/api/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/v1/controllers.py b/app/api/v1/controllers.py new file mode 100644 index 0000000..da30bc2 --- /dev/null +++ b/app/api/v1/controllers.py @@ -0,0 +1,7 @@ +from flask import Blueprint, jsonify + +api_v1 = Blueprint('api_v1', __name__) + +@api_v1.route('/ping', methods=['GET']) +def ping(): + return jsonify({'message': 'pong!'}) diff --git a/app/api/v1/models.py b/app/api/v1/models.py new file mode 100644 index 0000000..e69de29 diff --git a/app/api/v1/zhipu_controller.py b/app/api/v1/zhipu_controller.py new file mode 100644 index 0000000..8c0a34b --- /dev/null +++ b/app/api/v1/zhipu_controller.py @@ -0,0 +1,21 @@ +from flask import Blueprint, request, jsonify, Response +from app.services.zhipu_service import ZhipuService + +zhipu_controller = Blueprint('zhipu_controller', __name__) +zhipu_service = ZhipuService() + + +@zhipu_controller.route('/zhipu/stream', methods=['POST']) +def stream_sse(): + data = request.json + message = data.get('message', '') + + def event_stream(): + for chunk in zhipu_service.talk_to_zhipu_sse(message): + if chunk: + yield chunk + # yield f"data: {chunk}\n\n" + + return Response(event_stream(), content_type='text/event-stream') + + diff --git a/app/config.py b/app/config.py new file mode 100644 index 0000000..0b943b1 --- /dev/null +++ b/app/config.py @@ -0,0 +1,6 @@ +import os + +class Config: + SECRET_KEY = os.environ.get('SECRET_KEY') or 'supersecretkey' + SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or 'sqlite:///app.db' + SQLALCHEMY_TRACK_MODIFICATIONS = False diff --git a/app/services/openai_service.py b/app/services/openai_service.py new file mode 100644 index 0000000..e69de29 diff --git a/app/services/zhipu_service.py b/app/services/zhipu_service.py new file mode 100644 index 0000000..108bd6b --- /dev/null +++ b/app/services/zhipu_service.py @@ -0,0 +1,40 @@ +from zhipuai import ZhipuAI + +class ZhipuService: + def __init__(self): + self.model_name = "glm-4" + self.app_secret_key = "d54f764a1d67c17d857bd3983b772016.GRjowY0fyiMNurLc" + + def talk_to_zhipu(self, message): + client = ZhipuAI(api_key=self.app_secret_key) # 请填写您自己的APIKey + response = client.chat.completions.create( + model=self.model_name, # 填写需要调用的模型名称 + messages=[ + {"role": "user", "content": message}, + ], + stream=True, # 流式输出 + temperature= 0.01, #随机度,越大越发散,0.01则是一个比较确定和稳定的输出 + top_p= 0.1, #选择前 10% 概率的 tokens 作为候选,也是影响随机程度 + ) + accum_resp = "" + for chunk in response: + print(chunk.choices[0].delta.content) + accum_resp = accum_resp + chunk.choices[0].delta.content + print(accum_resp) + return accum_resp + + def talk_to_zhipu_sse(self, message): + client = ZhipuAI(api_key=self.app_secret_key) # 请填写您自己的APIKey + response = client.chat.completions.create( + model=self.model_name, # 填写需要调用的模型名称 + messages=[ + {"role": "user", "content": message}, + ], + stream=True, # 流式输出 + temperature= 0.01, #随机度,越大越发散,0.01则是一个比较确定和稳定的输出 + top_p= 0.1, #选择前 10% 概率的 tokens 作为候选,也是影响随机程度 + ) + + for chunk in response: + print(chunk.choices[0].delta.content) + yield chunk.choices[0].delta.content \ No newline at end of file diff --git a/config.py b/config.py new file mode 100644 index 0000000..e69de29 diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..3dc5f39 --- /dev/null +++ b/manage.py @@ -0,0 +1,6 @@ +from app import create_app + +app = create_app() + +if __name__ == '__main__': + app.run() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5b57cea --- /dev/null +++ b/requirements.txt @@ -0,0 +1,17 @@ +alembic==1.13.3 +blinker==1.8.2 +click==8.1.7 +Flask==3.0.3 +Flask-Migrate==4.0.7 +Flask-SQLAlchemy==3.1.1 +importlib_metadata==8.5.0 +importlib_resources==6.4.5 +itsdangerous==2.2.0 +Jinja2==3.1.4 +Mako==1.3.5 +MarkupSafe==2.1.5 +SQLAlchemy==2.0.35 +typing_extensions==4.12.2 +Werkzeug==3.0.4 +zipp==3.20.2 +zhipuai==2.0.1 \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29