diff --git a/backend/src/module/models/config.py b/backend/src/module/models/config.py index 51de420a..ddbdef14 100644 --- a/backend/src/module/models/config.py +++ b/backend/src/module/models/config.py @@ -81,11 +81,13 @@ class Notification(BaseModel): return expandvars(self.chat_id_) -class Experimental(BaseModel): - openai_enable: bool = Field(False, description="Enable experimental OpenAI") - openai_api_key: str = Field("", description="OpenAI api key") - openai_api_base: str = Field("https://api.openai.com/v1", description="OpenAI api base url") - openai_model: str = Field("gpt-3.5-turbo", description="OpenAI model") +class ExperimentalOpenAI(BaseModel): + enable: bool = Field(False, description="Enable experimental OpenAI") + api_key: str = Field("", description="OpenAI api key") + api_base: str = Field( + "https://api.openai.com/v1", description="OpenAI api base url" + ) + model: str = Field("gpt-3.5-turbo", description="OpenAI model") class Config(BaseModel): @@ -96,7 +98,7 @@ class Config(BaseModel): log: Log = Log() proxy: Proxy = Proxy() notification: Notification = Notification() - experimental: Experimental = Experimental() + experimental_openai: ExperimentalOpenAI = ExperimentalOpenAI() def dict(self, *args, by_alias=True, **kwargs): return super().dict(*args, by_alias=by_alias, **kwargs) diff --git a/backend/src/module/parser/title_parser.py b/backend/src/module/parser/title_parser.py index 46ec0323..739a5198 100644 --- a/backend/src/module/parser/title_parser.py +++ b/backend/src/module/parser/title_parser.py @@ -55,12 +55,9 @@ class TitleParser: language = settings.rss_parser.language try: # use OpenAI ChatGPT to parse raw title and get structured data - if settings.experimental.openai_enable: - gpt = OpenAIParser( - api_key=settings.experimental.openai_api_key, - api_base=settings.experimental.openai_api_base, - model=settings.experimental.openai_model, - ) + if settings.experimental_openai.enable: + kwargs = settings.experimental_openai.dict(exclude={"enable"}) + gpt = OpenAIParser(**kwargs) episode_dict = gpt.parse(raw, asdict=True) episode = Episode(**episode_dict) else: diff --git a/backend/src/test/test_openai.py b/backend/src/test/test_openai.py index 60408641..e6940979 100644 --- a/backend/src/test/test_openai.py +++ b/backend/src/test/test_openai.py @@ -22,4 +22,9 @@ class TestOpenAIParser: "resolution": "1080P", "episode": 747, "season": 1, + "title_zh": "哆啦A梦新番", + "sub": "GB_JP", + "title_jp": "", + "season_raw": "2023.02.25", + "source": "AVC", } diff --git a/backend/src/test/test_title_parser.py b/backend/src/test/test_title_parser.py index e27b60fa..36199bc2 100644 --- a/backend/src/test/test_title_parser.py +++ b/backend/src/test/test_title_parser.py @@ -17,7 +17,7 @@ class TestTitleParser: assert result.subtitle == "GB_JP" @pytest.mark.skipif( - not settings.experimental.openai_enable, + not settings.experimental_openai.enable, reason="OpenAI is not enabled in settings", ) def test_parse_with_openai(self): diff --git a/webui/src/components/setting/config-experimental.vue b/webui/src/components/setting/config-experimental.vue index 22b8b108..a0f84f15 100644 --- a/webui/src/components/setting/config-experimental.vue +++ b/webui/src/components/setting/config-experimental.vue @@ -1,22 +1,22 @@