H2OTest / llm_studio /src /tooltips.py
elineve's picture
Upload 301 files
07423df
import glob
import re
from dataclasses import dataclass
from typing import Dict
CLEANR = re.compile("<[^<]+?>")
tooltip_files = glob.glob("documentation/docs/tooltips/**/*.mdx", recursive=True)
def read_tooltip_file(path: str) -> str:
"""
Reads all lines of a text file.
Args:
filename: path to the file
Returns:
str: the text of the file
"""
with open(path) as f:
lines = f.readlines()
return "".join(lines)
def cleanhtml(raw_html: str) -> str:
"""
Removes html tags from a string.
Args:
raw_html: the string to clean
Returns:
str: the cleaned string
"""
cleantext = re.sub(CLEANR, "", raw_html)
return cleantext
def clean_docusaurus_tags(text: str) -> str:
"""
Removes docusaurus tags from a string.
Args:
text: the string to clean
Returns:
str: the cleaned string
"""
text = text.replace(":::info note", "")
text = text.replace(":::info Note", "")
text = text.replace(":::tip tip", "")
text = text.replace(":::", "")
return text
def clean_md_links(text: str) -> str:
"""
Removes markdown links from a string.
Args:
text: the string to clean
Returns:
str: the cleaned string
"""
text = re.sub(r"\[(.*?)\]\(.*?\)", r"\1", text)
return text
@dataclass
class Tooltip:
"""
A tooltip.
Returns:
str: the text of the tooltip
"""
name: str
text: str
def __repr__(self):
return f"{self.name}: {self.text}"
class Tooltips:
"""
A collection of tooltips.
During initialization, all tooltips are read from the tooltip files.
Usage:
tooltips = Tooltips()
a tooltip can be accessed by its name:
tooltips["name"] returns the tooltip with the name "name"
"""
def __init__(self):
self.tooltips: Dict[str, Tooltip] = {}
for filename in tooltip_files:
name = filename.split("/")[-1].split(".")[0]
name = name.replace("-", "_")
name = name[1:] # remove leading underscore
section = filename.split("/")[3]
text = read_tooltip_file(filename)
text = cleanhtml(text)
text = clean_docusaurus_tags(text)
text = clean_md_links(text)
if name in self.tooltips.keys():
raise ValueError
self.add_tooltip(Tooltip(f"{section}_{name}", text))
def add_tooltip(self, tooltip):
self.tooltips[tooltip.name] = tooltip
def __getitem__(self, name: str) -> str:
try:
text = self.tooltips[name].text
except KeyError:
text = None
return text
def __len__(self):
return len(self.tooltips)
def __repr__(self):
return f"{self.tooltips}"
def get(self, name: str, default=None):
if name in self.tooltips.keys():
return self.tooltips[name].text
else:
return default
tooltips = Tooltips()