Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import json | |
| def update_raw(): | |
| with open("characters_story_sensitive.json", 'r', encoding='utf-8') as file: | |
| categories = json.load(file) | |
| cate_list = [c['cate_name'] for c in categories] | |
| tag_list = [] | |
| for category in categories: | |
| for character in category['characters']: | |
| if isinstance(character['persona_tag'], list): | |
| tag_list.extend(character['persona_tag']) | |
| else: | |
| tag_list.append(character['persona_tag']) | |
| tag_list = list(set(tag_list)) | |
| return categories, cate_list, tag_list | |
| def update_ui(): | |
| _, cate_list, tag_list = update_raw() | |
| return ( | |
| gr.Dropdown(choices=cate_list), | |
| gr.Dropdown(choices=tag_list) | |
| ) | |
| def add_character(cate_name, name, introduction, persona_tag, personality, language_characteristics, character_relationship, preview, age, gender, isBottom, isTop, height, weight, chest_measurement, waist_measurement, hip_measurement, hair_color, face_shape, eyes_color, eyebrows, hair_length, hair_style, clothes): | |
| categories, cate_list, tag_list = update_raw() | |
| category = next((c for c in categories if c["cate_name"] == cate_name), None) | |
| if not category: | |
| category = { | |
| "cate_id": str(len(cate_list) + 1), | |
| "cate_name": cate_name, | |
| "characters": [] | |
| } | |
| categories.append(category) | |
| cate_list.append(cate_name) | |
| characters = category['characters'] | |
| character = { | |
| "id": f'{str(len(characters)+1)}', | |
| "name": f'{name}', | |
| "introduction": f'{introduction}', | |
| "persona_tag": persona_tag, | |
| "personality": f"{personality}", | |
| "language_characteristics": f"{language_characteristics}", | |
| "character_relationship": f"{character_relationship}", | |
| "preview": f"{preview}", | |
| "Age": f"{age}", | |
| "gender": f"{gender}", | |
| "isBottom": f"{isBottom}", | |
| "isTop": f"{isTop}", | |
| "height": height, | |
| "weight": weight, | |
| "measurement": [chest_measurement, waist_measurement, hip_measurement], | |
| "hair_color": f"{hair_color}", | |
| "face_shape": f"{face_shape}", | |
| "eyes_color": f"{eyes_color}", | |
| "eyebrows": f"{eyebrows}", | |
| "hair_length": f"{hair_length}", | |
| "hair_style": f"{hair_style}", | |
| "clothes": f"{clothes}", | |
| } | |
| characters.append(character) | |
| with open("characters_story_sensitive.json", 'w', encoding='utf-8') as file: | |
| json.dump(categories, file, ensure_ascii=False, indent=4) | |
| def add_character_json(cate_name, text): | |
| categories, cate_list, tag_list = update_raw() | |
| category = next((c for c in categories if c["cate_name"] == cate_name), None) | |
| if not category: | |
| category = { | |
| "cate_id": str(len(cate_list) + 1), | |
| "cate_name": cate_name, | |
| "characters": [] | |
| } | |
| categories.append(category) | |
| cate_list.append(cate_name) | |
| characters = category['characters'] | |
| object_characters = json.loads(text) | |
| if isinstance(object_characters, list): | |
| print("list") | |
| for object_character in object_characters: | |
| character = { | |
| "id": f'{str(len(characters)+1)}', | |
| "name": object_character["name"], | |
| "introduction": object_character["introduction"], | |
| "persona_tag": object_character["persona_tag"], | |
| "personality": object_character["personality"], | |
| "language_characteristics": object_character["language_characteristics"], | |
| "character_relationship": object_character["character_relationship"], | |
| "preview": object_character["preview"], | |
| "Age": object_character["age"], | |
| "gender": object_character["gender"], | |
| "isBottom": object_character["isBottom"], | |
| "isTop": object_character["isTop"], | |
| "height": object_character["height"], | |
| "weight": object_character["weight"], | |
| "measurement": object_character["measurement"], | |
| "hair_color": object_character["hair_color"], | |
| "face_shape": object_character["face_shape"], | |
| "eyes_color": object_character["eyes_color"], | |
| "eyebrows": object_character["eyebrows"], | |
| "hair_length": object_character["hair_length"], | |
| "hair_style": object_character["hair_style"], | |
| "clothes": object_character["clothes"], | |
| } | |
| characters.append(character) | |
| else: | |
| print("not list") | |
| # object_character = json.loads(text) | |
| character = { | |
| "id": f'{str(len(characters)+1)}', | |
| "name": object_characters["name"], | |
| "introduction": object_characters["introduction"], | |
| "persona_tag": object_characters["persona_tag"], | |
| "personality": object_characters["personality"], | |
| "language_characteristics": object_characters["language_characteristics"], | |
| "character_relationship": object_characters["character_relationship"], | |
| "preview": object_characters["preview"], | |
| "Age": object_characters["age"], | |
| "gender": object_characters["gender"], | |
| "isBottom": object_characters["isBottom"], | |
| "isTop": object_characters["isTop"], | |
| "height": object_characters["height"], | |
| "weight": object_characters["weight"], | |
| "measurement": object_characters["measurement"], | |
| "hair_color": object_characters["hair_color"], | |
| "face_shape": object_characters["face_shape"], | |
| "eyes_color": object_characters["eyes_color"], | |
| "eyebrows": object_characters["eyebrows"], | |
| "hair_length": object_characters["hair_length"], | |
| "hair_style": object_characters["hair_style"], | |
| "clothes": object_characters["clothes"], | |
| } | |
| characters.append(character) | |
| with open("characters_story_sensitive.json", 'w', encoding='utf-8') as file: | |
| json.dump(categories, file, ensure_ascii=False, indent=4) | |
| return category | |
| with gr.Blocks() as demo: | |
| cate_name = gr.Dropdown(label='Name of category', choices=update_raw()[1], allow_custom_value=True) | |
| with gr.Tab("nhập tay"): | |
| name = gr.Text(label="Character's name") | |
| introduction = gr.Text(label="Character's introduction") | |
| persona_tag = gr.Dropdown(label="Character's personal tag", choices=update_raw()[2], allow_custom_value=True, multiselect=True) | |
| personality = gr.Text(label="Character's personality") | |
| language_characteristics = gr.Text(label="Character's language_characteristics") | |
| character_relationship = gr.Text(label="Character's relationship with user") | |
| preview = gr.Text(label="Character's short preview description") | |
| age = gr.Text(label="Character's age") | |
| gender = gr.Dropdown(label="Character's gender", choices=[0, 1, 2], info='0: male, 1: female, 2: non-binary') | |
| isBottom = gr.Checkbox(label="Is character bottom if gender is non-binary") | |
| isTop = gr.Checkbox(label="Is character top if gender is non-binary") | |
| height = gr.Number(label="Character's height") | |
| weight = gr.Number(label="Character's weight") | |
| chest_measurement = gr.Number(label="Character's chest measurement") | |
| waist_measurement = gr.Number(label="Character's waist measurement") | |
| hip_measurement = gr.Number(label="Character's hip measurement") | |
| hair_color = gr.Text(label="Character's hair color") | |
| hair_length = gr.Text(label="Character's hair length") | |
| hair_style = gr.Text(label="Character's hair style") | |
| face_shape = gr.Text(label="Character's face shape") | |
| eyes_color = gr.Text(label="Character's eyes color") | |
| eyebrows = gr.Text(label="Character's eyebrows") | |
| clothes = gr.Text(label="Character's clothes") | |
| tab = 1 | |
| submit_button = gr.Button('Submit') | |
| update_button = gr.Button('Reload categories, personal tag') | |
| submit_button.click( | |
| add_character, | |
| inputs=[cate_name, name, introduction, persona_tag, personality, language_characteristics, character_relationship, preview, age, gender, isBottom, isTop, height, weight, chest_measurement, waist_measurement, hip_measurement, hair_color, face_shape, eyes_color, eyebrows, hair_length, hair_style, clothes], | |
| outputs=None | |
| ) | |
| update_button.click( | |
| update_ui, | |
| inputs=[], | |
| outputs=[cate_name, persona_tag] | |
| ) | |
| with gr.Tab("Import Json"): | |
| tab = 2 | |
| json_text = gr.Textbox(label="Paste JSON here", lines=10, placeholder='{"name": "character1"}') | |
| output = gr.JSON(label="Parsed JSON") | |
| # json_text.change(add_character_json, inputs=[cate_name, json_text], outputs=output) | |
| submit_button = gr.Button('Submit') | |
| update_button = gr.Button('Reload categories, personal tag') | |
| submit_button.click( | |
| add_character_json, | |
| inputs=[cate_name, json_text], | |
| outputs=output | |
| ) | |
| update_button.click( | |
| update_ui, | |
| inputs=[], | |
| outputs=[cate_name] | |
| ) | |
| demo.load( | |
| update_ui, | |
| inputs=[], | |
| outputs=[cate_name, persona_tag] | |
| ) | |
| demo.launch(server_port=1111, server_name="192.168.5.155", share=True) |