supported g4f (gpt4free)

This commit is contained in:
harry
2024-03-18 17:01:09 +08:00
parent 74e634d64c
commit 59ae82a47d
3 changed files with 56 additions and 33 deletions

View File

@@ -2,6 +2,7 @@ import logging
import re import re
import json import json
from typing import List from typing import List
import g4f
from loguru import logger from loguru import logger
from openai import OpenAI from openai import OpenAI
@@ -9,41 +10,57 @@ from app.config import config
def _generate_response(prompt: str) -> str: def _generate_response(prompt: str) -> str:
content = ""
llm_provider = config.app.get("llm_provider", "openai") llm_provider = config.app.get("llm_provider", "openai")
if llm_provider == "moonshot": logger.info(f"llm provider: {llm_provider}")
api_key = config.app.get("moonshot_api_key") if llm_provider == "g4f":
model_name = config.app.get("moonshot_model_name") model_name = config.app.get("g4f_model_name", "")
base_url = "https://api.moonshot.cn/v1" if not model_name:
elif llm_provider == "openai": model_name = "gpt-3.5-turbo-16k-0613"
api_key = config.app.get("openai_api_key")
model_name = config.app.get("openai_model_name") content = g4f.ChatCompletion.create(
base_url = config.app.get("openai_base_url", "") model=model_name,
if not base_url: messages=[{"role": "user", "content": prompt}],
base_url = "https://api.openai.com/v1" )
elif llm_provider == "oneapi":
api_key = config.app.get("oneapi_api_key")
model_name = config.app.get("oneapi_model_name")
base_url = config.app.get("oneapi_base_url", "")
else: else:
raise ValueError("llm_provider is not set, please set it in the config.toml file.") if llm_provider == "moonshot":
api_key = config.app.get("moonshot_api_key")
model_name = config.app.get("moonshot_model_name")
base_url = "https://api.moonshot.cn/v1"
elif llm_provider == "openai":
api_key = config.app.get("openai_api_key")
model_name = config.app.get("openai_model_name")
base_url = config.app.get("openai_base_url", "")
if not base_url:
base_url = "https://api.openai.com/v1"
elif llm_provider == "oneapi":
api_key = config.app.get("oneapi_api_key")
model_name = config.app.get("oneapi_model_name")
base_url = config.app.get("oneapi_base_url", "")
model_name = config.app.get("g4f_model_name")
else:
raise ValueError("llm_provider is not set, please set it in the config.toml file.")
if not api_key: if not api_key:
raise ValueError(f"{llm_provider}: api_key is not set, please set it in the config.toml file.") raise ValueError(f"{llm_provider}: api_key is not set, please set it in the config.toml file.")
if not model_name: if not model_name:
raise ValueError(f"{llm_provider}: model_name is not set, please set it in the config.toml file.") raise ValueError(f"{llm_provider}: model_name is not set, please set it in the config.toml file.")
if not base_url: if not base_url:
raise ValueError(f"{llm_provider}: base_url is not set, please set it in the config.toml file.") raise ValueError(f"{llm_provider}: base_url is not set, please set it in the config.toml file.")
client = OpenAI( client = OpenAI(
api_key=api_key, api_key=api_key,
base_url=base_url, base_url=base_url,
) )
response = client.chat.completions.create( response = client.chat.completions.create(
model=model_name, model=model_name,
messages=[{"role": "user", "content": prompt}], messages=[{"role": "user", "content": prompt}]
).choices[0].message.content )
return response if response:
content = response.choices[0].message.content
return content
def generate_script(video_subject: str, language: str = "zh-CN", paragraph_number: int = 1) -> str: def generate_script(video_subject: str, language: str = "zh-CN", paragraph_number: int = 1) -> str:
@@ -160,6 +177,6 @@ if __name__ == "__main__":
script = generate_script(video_subject=video_subject, language="zh-CN", paragraph_number=1) script = generate_script(video_subject=video_subject, language="zh-CN", paragraph_number=1)
# print("######################") # print("######################")
# print(script) # print(script)
search_terms = generate_terms(video_subject=video_subject, video_script=script, amount=5) # search_terms = generate_terms(video_subject=video_subject, video_script=script, amount=5)
# print("######################") # print("######################")
# print(search_terms) # print(search_terms)

View File

@@ -5,7 +5,7 @@
# For example: pexels_api_keys = ["123456789","abcdefghi"] # For example: pexels_api_keys = ["123456789","abcdefghi"]
pexels_api_keys = [] pexels_api_keys = []
llm_provider="openai" # "openai" or "moonshot" or "oneapi" llm_provider="openai" # "openai" or "moonshot" or "oneapi" or "g4f"
# OpenAI API Key # OpenAI API Key
# Visit https://openai.com/api/ for details on obtaining an API key. # Visit https://openai.com/api/ for details on obtaining an API key.
@@ -25,6 +25,11 @@
oneapi_base_url="" oneapi_base_url=""
oneapi_model_name="" oneapi_model_name=""
# G4F
# Visit https://github.com/xtekky/gpt4free to get more details
# Supported model list: https://github.com/xtekky/gpt4free/blob/main/g4f/models.py
g4f_model_name = "gpt-3.5-turbo-16k-0613"
# Subtitle Provider, "edge" or "whisper" # Subtitle Provider, "edge" or "whisper"
# If empty, the subtitle will not be generated # If empty, the subtitle will not be generated
subtitle_provider = "edge" subtitle_provider = "edge"

View File

@@ -11,4 +11,5 @@ loguru~=0.7.2
aiohttp~=3.9.3 aiohttp~=3.9.3
urllib3~=2.2.1 urllib3~=2.2.1
pillow~=10.2.0 pillow~=10.2.0
pydantic~=2.6.3 pydantic~=2.6.3
g4f~=0.2.5.4