NekoAI-Lab / app /gradio_formatter.py
nekoko
feat: Sticker DB
1c2b077
from typing import List, Dict, Any
from app.image_utils import format_image_url
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
class GradioFormatter:
"""贴纸格式化类,处理贴纸数据的格式化逻辑"""
@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'])
formatted_results.append([
str(record['id']),
f"![Sticker]({image_url})",
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'])
formatted_results.append([
f"![Sticker]({image_url})",
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'])
formatted_results.append([
f"![Sticker]({image_url})",
hit['entity'].get('score', ''),
hit['entity'].get('reason', ''),
hit['entity'].get('description', ''),
hit['entity'].get('file_name', '')
])
return formatted_results
# 创建格式化器实例
gradio_formatter = GradioFormatter()