QChatGPT/pkg/openai/manager.py

62 lines
1.6 KiB
Python
Raw Normal View History

2022-12-19 22:51:56 +08:00
import logging
2022-12-07 22:27:05 +08:00
import openai
import pkg.openai.keymgr
import pkg.utils.context
import pkg.audit.gatherer
2022-12-07 22:27:05 +08:00
2022-12-11 16:10:12 +08:00
# 为其他模块提供与OpenAI交互的接口
2022-12-07 22:27:05 +08:00
class OpenAIInteract:
api_params = {}
key_mgr: pkg.openai.keymgr.KeysManager = None
audit_mgr: pkg.audit.gatherer.DataGatherer = None
2022-12-27 22:52:53 +08:00
default_image_api_params = {
"size": "256x256",
}
def __init__(self, api_key: str):
# self.api_key = api_key
2022-12-07 22:27:05 +08:00
self.key_mgr = pkg.openai.keymgr.KeysManager(api_key)
self.audit_mgr = pkg.audit.gatherer.DataGatherer()
openai.api_key = self.key_mgr.get_using_key()
2022-12-07 22:27:05 +08:00
pkg.utils.context.set_openai_manager(self)
2022-12-07 22:27:05 +08:00
2022-12-11 16:10:12 +08:00
# 请求OpenAI Completion
2022-12-07 22:27:05 +08:00
def request_completion(self, prompt, stop):
config = pkg.utils.context.get_config()
2022-12-07 22:27:05 +08:00
response = openai.Completion.create(
prompt=prompt,
stop=stop,
2022-12-13 16:04:51 +08:00
timeout=config.process_message_timeout,
2022-12-27 22:52:53 +08:00
**config.completion_api_params
2022-12-07 22:27:05 +08:00
)
self.audit_mgr.report_text_model_usage(config.completion_api_params['model'],
prompt + response['choices'][0]['text'])
2022-12-07 22:27:05 +08:00
return response
2022-12-27 22:52:53 +08:00
def request_image(self, prompt):
config = pkg.utils.context.get_config()
params = config.image_api_params if hasattr(config, "image_api_params") else self.default_image_api_params
2022-12-27 22:52:53 +08:00
response = openai.Image.create(
prompt=prompt,
n=1,
**params
2022-12-27 22:52:53 +08:00
)
self.audit_mgr.report_image_model_usage(params['size'])
2022-12-27 22:52:53 +08:00
return response