mirror of https://github.com/langgenius/dify.git
fix: chart tool can't display chinese (#9686)
This commit is contained in:
parent
5f11fe521d
commit
e2710161f6
|
@ -56,6 +56,8 @@ RUN apt-get update \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
# For Security
|
# For Security
|
||||||
&& apt-get install -y --no-install-recommends zlib1g=1:1.3.dfsg+really1.3.1-1 expat=2.6.3-1 libldap-2.5-0=2.5.18+dfsg-3 perl=5.38.2-5 libsqlite3-0=3.46.1-1 \
|
&& apt-get install -y --no-install-recommends zlib1g=1:1.3.dfsg+really1.3.1-1 expat=2.6.3-1 libldap-2.5-0=2.5.18+dfsg-3 perl=5.38.2-5 libsqlite3-0=3.46.1-1 \
|
||||||
|
# install a chinese font to support the use of tools like matplotlib
|
||||||
|
&& apt-get install -y fonts-noto-cjk \
|
||||||
&& apt-get autoremove -y \
|
&& apt-get autoremove -y \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|
|
@ -1,77 +1,36 @@
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from fontTools.ttLib import TTFont
|
from matplotlib.font_manager import FontProperties
|
||||||
from matplotlib.font_manager import findSystemFonts
|
|
||||||
|
|
||||||
from core.tools.errors import ToolProviderCredentialValidationError
|
|
||||||
from core.tools.provider.builtin.chart.tools.line import LinearChartTool
|
|
||||||
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
||||||
|
|
||||||
|
|
||||||
|
def set_chinese_font():
|
||||||
|
font_list = [
|
||||||
|
"PingFang SC",
|
||||||
|
"SimHei",
|
||||||
|
"Microsoft YaHei",
|
||||||
|
"STSong",
|
||||||
|
"SimSun",
|
||||||
|
"Arial Unicode MS",
|
||||||
|
"Noto Sans CJK SC",
|
||||||
|
"Noto Sans CJK JP",
|
||||||
|
]
|
||||||
|
|
||||||
|
for font in font_list:
|
||||||
|
chinese_font = FontProperties(font)
|
||||||
|
if chinese_font.get_name() == font:
|
||||||
|
return chinese_font
|
||||||
|
|
||||||
|
return FontProperties()
|
||||||
|
|
||||||
|
|
||||||
# use a business theme
|
# use a business theme
|
||||||
plt.style.use("seaborn-v0_8-darkgrid")
|
plt.style.use("seaborn-v0_8-darkgrid")
|
||||||
plt.rcParams["axes.unicode_minus"] = False
|
plt.rcParams["axes.unicode_minus"] = False
|
||||||
|
font_properties = set_chinese_font()
|
||||||
|
plt.rcParams["font.family"] = font_properties.get_name()
|
||||||
def init_fonts():
|
|
||||||
fonts = findSystemFonts()
|
|
||||||
|
|
||||||
popular_unicode_fonts = [
|
|
||||||
"Arial Unicode MS",
|
|
||||||
"DejaVu Sans",
|
|
||||||
"DejaVu Sans Mono",
|
|
||||||
"DejaVu Serif",
|
|
||||||
"FreeMono",
|
|
||||||
"FreeSans",
|
|
||||||
"FreeSerif",
|
|
||||||
"Liberation Mono",
|
|
||||||
"Liberation Sans",
|
|
||||||
"Liberation Serif",
|
|
||||||
"Noto Mono",
|
|
||||||
"Noto Sans",
|
|
||||||
"Noto Serif",
|
|
||||||
"Open Sans",
|
|
||||||
"Roboto",
|
|
||||||
"Source Code Pro",
|
|
||||||
"Source Sans Pro",
|
|
||||||
"Source Serif Pro",
|
|
||||||
"Ubuntu",
|
|
||||||
"Ubuntu Mono",
|
|
||||||
]
|
|
||||||
|
|
||||||
supported_fonts = []
|
|
||||||
|
|
||||||
for font_path in fonts:
|
|
||||||
try:
|
|
||||||
font = TTFont(font_path)
|
|
||||||
# get family name
|
|
||||||
family_name = font["name"].getName(1, 3, 1).toUnicode()
|
|
||||||
if family_name in popular_unicode_fonts:
|
|
||||||
supported_fonts.append(family_name)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
plt.rcParams["font.family"] = "sans-serif"
|
|
||||||
# sort by order of popular_unicode_fonts
|
|
||||||
for font in popular_unicode_fonts:
|
|
||||||
if font in supported_fonts:
|
|
||||||
plt.rcParams["font.sans-serif"] = font
|
|
||||||
break
|
|
||||||
|
|
||||||
|
|
||||||
init_fonts()
|
|
||||||
|
|
||||||
|
|
||||||
class ChartProvider(BuiltinToolProviderController):
|
class ChartProvider(BuiltinToolProviderController):
|
||||||
def _validate_credentials(self, credentials: dict) -> None:
|
def _validate_credentials(self, credentials: dict) -> None:
|
||||||
try:
|
pass
|
||||||
LinearChartTool().fork_tool_runtime(
|
|
||||||
runtime={
|
|
||||||
"credentials": credentials,
|
|
||||||
}
|
|
||||||
).invoke(
|
|
||||||
user_id="",
|
|
||||||
tool_parameters={
|
|
||||||
"data": "1,3,5,7,9,2,4,6,8,10",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
raise ToolProviderCredentialValidationError(str(e))
|
|
||||||
|
|
Loading…
Reference in New Issue