mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-29 13:47:14 +00:00
feat: 上报使用量信息
This commit is contained in:
@@ -115,6 +115,11 @@ retry_times = 3
|
|||||||
# 默认值20分钟
|
# 默认值20分钟
|
||||||
session_expire_time = 60 * 20
|
session_expire_time = 60 * 20
|
||||||
|
|
||||||
|
# 是否上报统计信息
|
||||||
|
# 用于统计机器人的使用情况,不会收集任何用户信息
|
||||||
|
# 仅上报时间、字数使用量、绘图使用量,其他信息不会上报
|
||||||
|
report_usage = True
|
||||||
|
|
||||||
# 日志级别
|
# 日志级别
|
||||||
logging_level = logging.INFO
|
logging_level = logging.INFO
|
||||||
|
|
||||||
|
|||||||
+18
-1
@@ -1,8 +1,13 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
import pkg.utils.context
|
import pkg.utils.context
|
||||||
|
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
|
|
||||||
class DataGatherer:
|
class DataGatherer:
|
||||||
"""数据收集器"""
|
"""数据收集器"""
|
||||||
@@ -19,6 +24,14 @@ class DataGatherer:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.load_from_db()
|
self.load_from_db()
|
||||||
|
|
||||||
|
def report_to_server(self, subservice_name: str, count: int):
|
||||||
|
config = pkg.utils.context.get_config()
|
||||||
|
if hasattr(config, "report_usage") and not config.report_usage:
|
||||||
|
return
|
||||||
|
res = requests.get("http://rockchin.top:18989/usage?service_name=qchatgpt.{}&version={}&count={}".format(subservice_name, version, count))
|
||||||
|
if res.status_code != 200 or res.text != "ok":
|
||||||
|
logging.warning("report to server failed, status_code: {}, text: {}".format(res.status_code, res.text))
|
||||||
|
|
||||||
def report_text_model_usage(self, model, text):
|
def report_text_model_usage(self, model, text):
|
||||||
key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5()
|
key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5()
|
||||||
|
|
||||||
@@ -31,10 +44,12 @@ class DataGatherer:
|
|||||||
if model not in self.usage[key_md5]["text"]:
|
if model not in self.usage[key_md5]["text"]:
|
||||||
self.usage[key_md5]["text"][model] = 0
|
self.usage[key_md5]["text"][model] = 0
|
||||||
|
|
||||||
length = ((len(text.encode('utf-8')) - len(text)) / 2 + len(text))
|
length = int((len(text.encode('utf-8')) - len(text)) / 2 + len(text))
|
||||||
self.usage[key_md5]["text"][model] += length
|
self.usage[key_md5]["text"][model] += length
|
||||||
self.dump_to_db()
|
self.dump_to_db()
|
||||||
|
|
||||||
|
self.report_to_server("text", length)
|
||||||
|
|
||||||
def report_image_model_usage(self, size):
|
def report_image_model_usage(self, size):
|
||||||
key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5()
|
key_md5 = pkg.utils.context.get_openai_manager().key_mgr.get_using_key_md5()
|
||||||
|
|
||||||
@@ -50,6 +65,8 @@ class DataGatherer:
|
|||||||
self.usage[key_md5]["image"][size] += 1
|
self.usage[key_md5]["image"][size] += 1
|
||||||
self.dump_to_db()
|
self.dump_to_db()
|
||||||
|
|
||||||
|
self.report_to_server("image", 1)
|
||||||
|
|
||||||
def get_text_length_of_key(self, key):
|
def get_text_length_of_key(self, key):
|
||||||
key_md5 = hashlib.md5(key.encode('utf-8')).hexdigest()
|
key_md5 = hashlib.md5(key.encode('utf-8')).hexdigest()
|
||||||
if key_md5 not in self.usage:
|
if key_md5 not in self.usage:
|
||||||
|
|||||||
Reference in New Issue
Block a user