# Copyright: DAMO Academy, Alibaba Group # By Xuan Phi Nguyen at DAMO Academy, Alibaba Group # Description: """ Demo script to launch Language chat model """ import spaces import os from gradio.themes import ThemeClass as Theme import numpy as np import argparse # import torch import gradio as gr from typing import Any, Iterator from typing import Iterator, List, Optional, Tuple import filelock import glob import json import time from gradio.routes import Request from gradio.utils import SyncToAsyncIterator, async_iteration from gradio.helpers import special_args import anyio from typing import AsyncGenerator, Callable, Literal, Union, cast from gradio_client.documentation import document, set_documentation_group from typing import List, Optional, Union, Dict, Tuple from tqdm.auto import tqdm from huggingface_hub import snapshot_download from langchain_community.embeddings import HuggingFaceEmbeddings, HuggingFaceBgeEmbeddings from gradio.components import Button, Component from gradio.events import Dependency, EventListenerMethod from multipurpose_chatbot.demos.base_demo import CustomTabbedInterface from multipurpose_chatbot.configs import ( MODEL_TITLE, MODEL_DESC, MODEL_INFO, CITE_MARKDOWN, ALLOWED_PATHS, PROXY, PORT, MODEL_PATH, MODEL_NAME, BACKEND, DEMOS, DELETE_FOLDER, ) demo = None if DELETE_FOLDER is not None and os.path.exists(DELETE_FOLDER): print(F'WARNING deleting folder: {DELETE_FOLDER}') import shutil print(f'DELETE ALL FILES IN {DELETE_FOLDER}') for filename in os.listdir(DELETE_FOLDER): file_path = os.path.join(DELETE_FOLDER, filename) try: if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) print(f'deleted: {file_path}') except Exception as e: print('Failed to delete %s. Reason: %s' % (file_path, e)) def launch_demo(): global demo, MODEL_ENGINE model_desc = MODEL_DESC model_path = MODEL_PATH print(f'Begin importing models') from multipurpose_chatbot.demos import get_demo_class # demos = { # k: get_demo_class(k)().create_demo() # for k in demo_and_tab_names.keys() # } print(f'{DEMOS=}') demo_class_objects = { k: get_demo_class(k)() for k in DEMOS } demos = { k: get_demo_class(k)().create_demo() for k in DEMOS } demos_names = [x.tab_name for x in demo_class_objects.values()] descriptions = model_desc if MODEL_INFO is not None and MODEL_INFO != "": descriptions += ( f"
" + MODEL_INFO.format(model_path=model_path) ) if len(demos) == 1: demo = demos[DEMOS[0]] else: demo = CustomTabbedInterface( interface_list=list(demos.values()), tab_names=demos_names, title=f"{MODEL_TITLE}", description=descriptions, ) demo.title = MODEL_NAME # with demo: # gr.Markdown(CITE_MARKDOWN) demo.queue(api_open=False) return demo if __name__ == "__main__": demo = launch_demo() if PROXY is not None and PROXY != "": print(f'{PROXY=} {PORT=}') print(f"{ALLOWED_PATHS=}") demo.launch(server_port=PORT, root_path=PROXY, show_api=False, allowed_paths=ALLOWED_PATHS) else: demo.launch(server_port=PORT, show_api=False, allowed_paths=ALLOWED_PATHS)