public media gpt

This commit is contained in:
binary-husky
2024-11-18 18:38:49 +00:00
parent ff5901d8c0
commit 3520131ca2
4 changed files with 69 additions and 25 deletions

View File

@@ -308,7 +308,11 @@ PLUGIN_HOT_RELOAD = False
# 自定义按钮的最大数量限制 # 自定义按钮的最大数量限制
NUM_CUSTOM_BASIC_BTN = 4 NUM_CUSTOM_BASIC_BTN = 4
DAAS_SERVER_URL = "http://localhost:48000/stream"
# 媒体智能体的服务地址这是一个huggingface空间请前往huggingface复制该空间然后把自己新的空间地址填在这里
DAAS_SERVER_URL = "https://hamercity-bbdown.hf.space/stream"
""" """

View File

@@ -30,31 +30,19 @@ class VideoResource(BaseModel):
def get_video_resource(search_keyword): def get_video_resource(search_keyword):
from experimental_mods.get_search_kw_api_stop import search_videos from crazy_functions.media_fns.get_media import search_videos
# Default parameters for video search
csrf_token = '40a227fcf12c380d7d3c81af2cd8c5e8' # Using default from main()
search_type = 'default'
max_pages = 1
output_path = 'search_results'
config_path = 'experimental_mods/config.json'
# Search for videos and return the first result # Search for videos and return the first result
videos = search_videos( videos = search_videos(
keyword=search_keyword, search_keyword
csrf_token=csrf_token,
search_type=search_type,
max_pages=max_pages,
output_path=output_path,
config_path=config_path,
early_stop=True
) )
# Return the first video if results exist, otherwise return None # Return the first video if results exist, otherwise return None
return videos return videos
def download_video(bvid, user_name, chatbot, history): def download_video(bvid, user_name, chatbot, history):
from experimental_mods.get_bilibili_resource import download_bilibili # from experimental_mods.get_bilibili_resource import download_bilibili
from crazy_functions.media_fns.get_media import download_video
# pause a while # pause a while
tic_time = 8 tic_time = 8
for i in range(tic_time): for i in range(tic_time):
@@ -64,7 +52,7 @@ def download_video(bvid, user_name, chatbot, history):
# download audio # download audio
chatbot.append((None, "下载音频, 请稍等...")); yield from update_ui(chatbot=chatbot, history=history) chatbot.append((None, "下载音频, 请稍等...")); yield from update_ui(chatbot=chatbot, history=history)
downloaded_files = yield from download_bilibili(bvid, only_audio=True, user_name=user_name, chatbot=chatbot, history=history) downloaded_files = yield from download_video(bvid, only_audio=True, user_name=user_name, chatbot=chatbot, history=history)
# preview # preview
preview_list = [promote_file_to_downloadzone(fp) for fp in downloaded_files] preview_list = [promote_file_to_downloadzone(fp) for fp in downloaded_files]
@@ -81,7 +69,7 @@ def download_video(bvid, user_name, chatbot, history):
# download video # download video
chatbot.append((None, "下载视频, 请稍等...")); yield from update_ui(chatbot=chatbot, history=history) chatbot.append((None, "下载视频, 请稍等...")); yield from update_ui(chatbot=chatbot, history=history)
downloaded_files_part2 = yield from download_bilibili(bvid, only_audio=False, user_name=user_name, chatbot=chatbot, history=history) downloaded_files_part2 = yield from download_video(bvid, only_audio=False, user_name=user_name, chatbot=chatbot, history=history)
# preview # preview
preview_list = [promote_file_to_downloadzone(fp) for fp in downloaded_files_part2] preview_list = [promote_file_to_downloadzone(fp) for fp in downloaded_files_part2]

View File

@@ -0,0 +1,39 @@
from toolbox import update_ui, get_conf, promote_file_to_downloadzone, update_ui_lastest_msg, generate_file_link
from shared_utils.docker_as_service_api import stream_daas
from shared_utils.docker_as_service_api import DockerServiceApiComModel
def download_video(video_id, only_audio, user_name, chatbot, history):
from toolbox import get_log_folder
chatbot.append([None, "Processing..."])
yield from update_ui(chatbot, history)
client_command = f'{video_id} --audio-only' if only_audio else video_id
server_url = get_conf('DAAS_SERVER_URL')
docker_service_api_com_model = DockerServiceApiComModel(client_command=client_command)
save_file_dir = get_log_folder(user_name, plugin_name='media_downloader')
for output_manifest in stream_daas(docker_service_api_com_model, server_url, save_file_dir):
status_buf = ""
status_buf += "DaaS message: \n\n"
status_buf += output_manifest['server_message'].replace('\n', '<br/>')
status_buf += "\n\n"
status_buf += "DaaS standard error: \n\n"
status_buf += output_manifest['server_std_err'].replace('\n', '<br/>')
status_buf += "\n\n"
status_buf += "DaaS standard output: \n\n"
status_buf += output_manifest['server_std_out'].replace('\n', '<br/>')
status_buf += "\n\n"
status_buf += "DaaS file attach: \n\n"
status_buf += str(output_manifest['server_file_attach'])
yield from update_ui_lastest_msg(status_buf, chatbot, history)
return output_manifest['server_file_attach']
def search_videos(keywords):
from toolbox import get_log_folder
client_command = keywords
server_url = get_conf('DAAS_SERVER_URL').replace('stream', 'search')
docker_service_api_com_model = DockerServiceApiComModel(client_command=client_command)
save_file_dir = get_log_folder("default_user", plugin_name='media_downloader')
for output_manifest in stream_daas(docker_service_api_com_model, server_url, save_file_dir):
return output_manifest['server_message']

View File

@@ -3,13 +3,13 @@ import pickle
import io import io
import os import os
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import Optional, Dict from typing import Optional, Dict, Any
from loguru import logger from loguru import logger
class DockerServiceApiComModel(BaseModel): class DockerServiceApiComModel(BaseModel):
client_command: Optional[str] = Field(default=None, title="Client command", description="The command to be executed on the client side") client_command: Optional[str] = Field(default=None, title="Client command", description="The command to be executed on the client side")
client_file_attach: Optional[dict] = Field(default=None, title="Client file attach", description="The file to be attached to the client side") client_file_attach: Optional[dict] = Field(default=None, title="Client file attach", description="The file to be attached to the client side")
server_message: Optional[str] = Field(default=None, title="Server standard error", description="The standard error from the server side") server_message: Optional[Any] = Field(default=None, title="Server standard error", description="The standard error from the server side")
server_std_err: Optional[str] = Field(default=None, title="Server standard error", description="The standard error from the server side") server_std_err: Optional[str] = Field(default=None, title="Server standard error", description="The standard error from the server side")
server_std_out: Optional[str] = Field(default=None, title="Server standard output", description="The standard output from the server side") server_std_out: Optional[str] = Field(default=None, title="Server standard output", description="The standard output from the server side")
server_file_attach: Optional[dict] = Field(default=None, title="Server file attach", description="The file to be attached to the server side") server_file_attach: Optional[dict] = Field(default=None, title="Server file attach", description="The file to be attached to the server side")
@@ -17,7 +17,10 @@ class DockerServiceApiComModel(BaseModel):
def process_received(received: DockerServiceApiComModel, save_file_dir="./daas_output", output_manifest=None): def process_received(received: DockerServiceApiComModel, save_file_dir="./daas_output", output_manifest=None):
# Process the received data # Process the received data
if received.server_message: if received.server_message:
output_manifest['server_message'] += received.server_message try:
output_manifest['server_message'] += received.server_message
except:
output_manifest['server_message'] = received.server_message
if received.server_std_err: if received.server_std_err:
output_manifest['server_std_err'] += received.server_std_err output_manifest['server_std_err'] += received.server_std_err
if received.server_std_out: if received.server_std_out:
@@ -59,11 +62,21 @@ def stream_daas(docker_service_api_com_model, server_url, save_file_dir):
# Check if the request was successful # Check if the request was successful
if response.status_code == 200: if response.status_code == 200:
# Process the streaming response # Process the streaming response
chunk_buf = None
for chunk in response.iter_content(max_full_package_size): for chunk in response.iter_content(max_full_package_size):
if chunk: if chunk:
received = pickle.loads(chunk) if chunk_buf is None: chunk_buf = chunk
received_output_manifest = process_received(received, save_file_dir, output_manifest = received_output_manifest) else: chunk_buf += chunk
yield received_output_manifest
try:
received = pickle.loads(chunk_buf)
chunk_buf = None
received_output_manifest = process_received(received, save_file_dir, output_manifest = received_output_manifest)
yield received_output_manifest
except Exception as e:
# logger.error(f"pickle data was truncated, but don't worry, we will continue to receive the rest of the data.")
continue
else: else:
logger.error(f"Error: Received status code {response.status_code}, response.text: {response.text}") logger.error(f"Error: Received status code {response.status_code}, response.text: {response.text}")