|
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 |
|
|
|
|
|
|
|
|
|
base_directory = "/home/user/app/routers" |
|
demo = build_interface(base_directory) |
|
|
|
|
|
|
|
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()] |
|
default_names = ["OpenInterpreter","仕様書から作成","Database",] |
|
|
|
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 |
|
|