fastapi_django_main_live / mysite /gradio_config.py
kenken999's picture
d
3d2aa58
raw
history blame
5.32 kB
import shutil
import gradio as gr
from mysite.utilities import chat_with_interpreter, completion, process_file
from interpreter import interpreter
import mysite.interpreter_config # インポートするだけで設定が適用されます
import importlib
import os
import pkgutil
from routers.chat.chat import demo44 as demo4
def include_gradio_interfaces():
package_dir = "/home/user/app/routers"
gradio_interfaces = []
gradio_names = set()
for module_info in pkgutil.walk_packages([package_dir], "routers."):
sub_module_name = module_info.name
try:
print(f"Trying to import {sub_module_name}")
module = importlib.import_module(sub_module_name)
if hasattr(module, "gradio_interface"):
print(f"Found gradio_interface in {sub_module_name}")
interface_name = module_info.name.split(".")[-1]
if interface_name not in gradio_names:
gradio_interfaces.append(module.gradio_interface)
gradio_names.add(interface_name)
else:
unique_name = f"{interface_name}_{len(gradio_names)}"
gradio_interfaces.append(module.gradio_interface)
gradio_names.add(unique_name)
except ModuleNotFoundError:
print(f"ModuleNotFoundError: {sub_module_name}")
pass
except Exception as e:
print(f"Failed to import {sub_module_name}: {e}")
print(f"Collected Gradio Interfaces: {gradio_names}")
return gradio_interfaces, list(gradio_names)
import os
import gradio as gr
def list_files_in_directory(directory):
tree = []
for root, dirs, files in os.walk(directory):
path = root.split(os.sep)
for dir_name in dirs:
tree.append((os.path.join(root, dir_name), '/'.join(path + [dir_name])))
for file_name in files:
tree.append((os.path.join(root, file_name), '/'.join(path + [file_name])))
return tree
def read_file(file_path):
try:
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
except UnicodeDecodeError:
with open(file_path, 'rb') as file:
content = file.read()
try:
return content.decode('utf-8')
except UnicodeDecodeError:
try:
return content.decode('latin-1')
except UnicodeDecodeError:
return "Cannot decode file content with utf-8 or latin-1 encoding."
def save_file(file_path, content):
with open(file_path, 'w', encoding='utf-8') as file:
file.write(content)
return "File saved successfully"
def on_file_select(selected_file):
if os.path.isfile(selected_file):
return read_file(selected_file)
return ""
def build_interface(base_directory):
file_list = list_files_in_directory(base_directory)
file_display = [f[1] for f in file_list]
file_paths = {f[1]: f[0] for f in file_list}
with gr.Blocks() as demo:
gr.Markdown("## File Explorer and Editor")
file_dropdown = gr.Dropdown(label="Select a file or folder", choices=file_display)
file_editor = gr.Textbox(label="File Editor", lines=20)
save_button = gr.Button("Save File")
def update_editor(selected_display):
selected_file = file_paths.get(selected_display, "")
return on_file_select(selected_file)
def on_edit_button_click(selected_display, new_content):
selected_file = file_paths.get(selected_display, "")
if os.path.isfile(selected_file):
return save_file(selected_file, new_content)
return "File not found"
file_dropdown.change(fn=update_editor, inputs=file_dropdown, outputs=file_editor)
save_button.click(fn=on_edit_button_click, inputs=[file_dropdown, file_editor], outputs=None)
return demo
#if __name__ == "__main__":
base_directory = "/home/user/app/routers" # Here you can specify any directory you want to explore
demo = build_interface(base_directory)
#demo.launch()
def setup_gradio_interfaces():
chat_interface = gr.ChatInterface(
fn=chat_with_interpreter,
examples=["サンプルHTMLの作成", "google spreadの読み込み作成", "merhaba"],
title="Auto Program",
css=".chat-container { height: 1500px; }",
)
chat_interface2 = gr.ChatInterface(
fn=chat_with_interpreter,
examples=["こんにちは", "どうしたの?"],
title="Auto Program 2",
)
chat_interface2.queue()
democs = gr.Interface(
fn=process_file,
inputs=[
"file",
gr.Textbox(label="Additional Notes", lines=10),
gr.Textbox(label="Folder Name"),
],
outputs="text",
)
from routers.postg.gradio_app import crud_interface
default_interfaces = [demo4,democs,crud_interface()]#,demo]
default_names = ["OpenInterpreter","仕様書から作成","Database",]#"demo"]
gradio_interfaces, gradio_names = include_gradio_interfaces()
all_interfaces = default_interfaces + gradio_interfaces
all_names = default_names + gradio_names
tabs = gr.TabbedInterface(all_interfaces, all_names)
tabs.queue()
return tabs