Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FEAT : Add Model Dashboard #334

Merged
merged 34 commits into from
Aug 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
416743b
init react project
Bojun-Feng Jul 14, 2023
d10f8c3
basic file structure
Bojun-Feng Jul 17, 2023
5d6a924
implement menu
Bojun-Feng Jul 20, 2023
c60d799
implement navigation
Bojun-Feng Jul 21, 2023
7c781df
add model card draft
Bojun-Feng Jul 21, 2023
b7390f2
fix side menu bug
Bojun-Feng Jul 21, 2023
cdffc4d
restful api demo
Bojun-Feng Jul 21, 2023
c8026b4
implement individual gradio page
Bojun-Feng Jul 24, 2023
d66d20f
rebase after refactor
Bojun-Feng Jul 25, 2023
29506f1
add state to ui
Bojun-Feng Jul 25, 2023
247eee7
implement model dashboard
Bojun-Feng Jul 25, 2023
d0f50ae
implement delete model
Bojun-Feng Jul 26, 2023
01c9efc
connect ui and backend
Bojun-Feng Jul 27, 2023
cfde99a
fix api conflict
Bojun-Feng Jul 27, 2023
72eb4d8
minor fix
Bojun-Feng Jul 28, 2023
6e4b2b3
add gradio theme
Bojun-Feng Aug 7, 2023
7d56bb4
change format
Bojun-Feng Aug 8, 2023
73a4eae
rewrite model_dashboard
Bojun-Feng Aug 8, 2023
fcf198b
fix endpoint bug
Bojun-Feng Aug 9, 2023
535ac13
remove unused components
Bojun-Feng Aug 9, 2023
9077343
fix lint
Bojun-Feng Aug 9, 2023
e037083
fix minor typos
Bojun-Feng Aug 10, 2023
81c631a
remove README file
Bojun-Feng Aug 10, 2023
6cfb799
edit theme
Bojun-Feng Aug 10, 2023
57708d7
add button tooltip
Bojun-Feng Aug 10, 2023
3b80598
update chat interface
Bojun-Feng Aug 10, 2023
4dc71be
fix gradio version
Bojun-Feng Aug 10, 2023
842eae1
add setup support
Bojun-Feng Aug 11, 2023
38eb3e2
update README files
Bojun-Feng Aug 11, 2023
7822de5
resolve comments
Bojun-Feng Aug 14, 2023
1337cfb
add generate interface
Bojun-Feng Aug 16, 2023
64ee5c7
undo README change
Bojun-Feng Aug 16, 2023
d1982b6
minor
Bojun-Feng Aug 16, 2023
1a285f9
minor
Bojun-Feng Aug 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ jobs:
pip install
build
--user
- name: Build web
run: >-
python setup.py build_web
- name: Build a binary wheel and a source tarball
run: >-
python3 -m
Expand Down
1 change: 1 addition & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ include xinference/_version.py
global-exclude conftest.py
include xinference/locale/*.json
include xinference/model/llm/*.json
global-include xinference/web/ui/build/**/*
2 changes: 1 addition & 1 deletion doc/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,4 @@
]
}

html_favicon = "_static/favicon.svg"
html_favicon = "_static/favicon.svg"
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ packages = find:
install_requires =
xoscar
xorbits
gradio>=3.35.0
gradio>=3.39.0
click
tqdm>=4.27
tabulate
Expand Down
88 changes: 86 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,16 @@
import os
import platform
import sys
import shutil
import subprocess
import warnings
from sysconfig import get_config_vars

from pkg_resources import parse_version
from setuptools import setup
from setuptools import Command, setup
from setuptools.command.develop import develop
from setuptools.command.install import install
from setuptools.command.sdist import sdist

# From https://github.com/pandas-dev/pandas/pull/24274:
# For mac, ensure extensions are built for macos 10.9 when compiling on a
Expand All @@ -43,6 +49,77 @@
repo_root = os.path.dirname(os.path.abspath(__file__))
os.chdir(repo_root)


class ExtraCommandMixin:
_extra_pre_commands = []

def run(self):
[self.run_command(cmd) for cmd in self._extra_pre_commands]
super().run()

@classmethod
def register_pre_command(cls, cmd):
cls._extra_pre_commands.append(cmd)


class CustomInstall(ExtraCommandMixin, install):
pass


class CustomDevelop(ExtraCommandMixin, develop):
pass


class CustomSDist(ExtraCommandMixin, sdist):
pass

class BuildWeb(Command):
"""build_web command"""

user_options = []
_web_src_path = "xinference/web/ui"
_web_dest_path = "xinference/web/ui/build/index.html"
_commands = [
["npm", "install"],
["npm", "run", "build"],
]

def initialize_options(self):
pass

def finalize_options(self):
pass

@classmethod
def run(cls):
if int(os.environ.get("NO_WEB_UI", "0")):
return

npm_path = shutil.which("npm")
web_src_path = os.path.join(repo_root, *cls._web_src_path.split("/"))
web_dest_path = os.path.join(repo_root, *cls._web_dest_path.split("/"))

if npm_path is None:
warnings.warn("Cannot find NPM, may affect displaying Xinference web UI")
return
else:
replacements = {"npm": npm_path}
cmd_errored = False
for cmd in cls._commands:
cmd = [replacements.get(c, c) for c in cmd]
proc_result = subprocess.run(cmd, cwd=web_src_path)
if proc_result.returncode != 0:
warnings.warn(f'Failed when running `{" ".join(cmd)}`')
cmd_errored = True
break
if not cmd_errored:
assert os.path.exists(web_dest_path)


CustomInstall.register_pre_command("build_web")
CustomDevelop.register_pre_command("build_web")
CustomSDist.register_pre_command("build_web")

sys.path.append(repo_root)
versioneer = __import__("versioneer")

Expand All @@ -57,7 +134,14 @@ def build_long_description():

setup_options = dict(
version=versioneer.get_version(),
cmdclass=versioneer.get_cmdclass(),
cmdclass=versioneer.get_cmdclass(
{
"build_web": BuildWeb,
"install": CustomInstall,
"develop": CustomDevelop,
"sdist": CustomSDist,
}
),
long_description=build_long_description(),
long_description_content_type="text/markdown",
)
Expand Down
47 changes: 47 additions & 0 deletions xinference/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -763,3 +763,50 @@ def get_model(self, model_uid: str) -> RESTfulModelHandle:
return RESTfulChatModelHandle(model_uid, self.base_url)
else:
raise ValueError(f"Unrecognized model ability: {desc['model_ability']}")

def describe_model(self, model_uid: str):
"""
Get model information via RESTful APIs.

Parameters
----------
model_uid: str
The unique id that identify the model.

Returns
-------
dict
A dictionary containing the following keys:
- "model_type": str
the type of the model determined by its function, e.g. "LLM" (Large Language Model)
- "model_name": str
the name of the specific LLM model family
- "model_lang": List[str]
the languages supported by the LLM model
- "model_ability": List[str]
the ability or capabilities of the LLM model
- "model_description": str
a detailed description of the LLM model
- "model_format": str
the format specification of the LLM model
- "model_size_in_billions": int
the size of the LLM model in billions
- "quantization": str
the quantization applied to the model
- "revision": str
the revision number of the LLM model specification

Raises
------
RuntimeError
Report failure to get the wanted model with given model_uid. Provide details of failure through error message.

"""

url = f"{self.base_url}/v1/models/{model_uid}"
response = requests.get(url)
if response.status_code != 200:
raise RuntimeError(
f"Failed to get the model description, detail: {response.json()['detail']}"
)
return response.json()
Loading