NekoStickers / app /gradio_formatter.py
zhangfeng144
init
cff3b13
raw
history blame contribute delete
3.22 kB
from typing import List, Dict, Any
from app.image_utils import format_image_url
import logging
import os
import gradio as gr
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
class GradioFormatter:
"""贴纸格式化类,处理贴纸数据的格式化逻辑"""
@staticmethod
def _format_image_markdown(image_url: str) -> str:
"""格式化图片显示,支持本地和远程图片"""
if os.path.exists(image_url):
# 使用 Gradio 的 Image 组件显示本地图片
return f"<img src='{image_url}' style='max-width: 200px; max-height: 200px;'>"
return f"![Sticker]({image_url})"
@staticmethod
def format_all_stickers(results: List[Dict[str, Any]]) -> List[List]:
"""格式化所有贴纸,用于Gradio UI显示"""
formatted_results = []
for record in results:
logger.info(f"格式化所有贴纸,用于Gradio UI显示: {record}")
image_url = format_image_url(record['file_name'])
image_markdown = GradioFormatter._format_image_markdown(image_url)
formatted_results.append([
str(record['id']),
image_markdown,
record.get('title', ''),
record['description'],
", ".join(record['tags']) if isinstance(record['tags'], list) else record['tags'],
record['file_name'],
record['image_hash'] if 'image_hash' in record else ''
])
return formatted_results
@staticmethod
def format_search_results(results: List[Dict[str, Any]]) -> List[List]:
"""格式化搜索结果,用于Gradio UI显示"""
formatted_results = []
logger.info(f"Formatting search results: {len(results)} items")
for hit in results:
image_url = format_image_url(hit['entity']['file_name'])
image_markdown = GradioFormatter._format_image_markdown(image_url)
formatted_results.append([
image_markdown,
round(hit['distance'], 4),
hit['entity'].get('description', ''),
hit['entity'].get('file_name', '')
])
return formatted_results
@staticmethod
def format_ai_search_results(results: List[Dict[str, Any]]) -> List[List]:
"""格式化 AI 搜索结果,用于Gradio UI显示"""
formatted_results = []
logger.info(f"Formatting AI search results: {len(results)} items")
for hit in results:
image_url = format_image_url(hit['entity']['file_name'])
image_markdown = GradioFormatter._format_image_markdown(image_url)
formatted_results.append([
image_markdown,
hit['entity'].get('score', ''),
hit['entity'].get('reason', ''),
hit['entity'].get('description', ''),
hit['entity'].get('file_name', '')
])
return formatted_results
# 创建格式化器实例
gradio_formatter = GradioFormatter()