import gradio as gr import docx import numpy as np def process_input(uploaded_file, input_text, function): if uploaded_file is not None: try: # Получаем путь к загруженному файлу file_path = uploaded_file.name # Читаем содержимое файла with open(file_path, "rb") as file: file_content = file.read() # Определяем тип файла по расширению if file_path.endswith('.txt'): # Если файл текстовый, декодируем содержимое content = file_content.decode("utf-8") elif file_path.endswith('.docx'): # Если файл Word, используем библиотеку python-docx doc = docx.Document(file_path) content = '\n'.join([para.text for para in doc.paragraphs]) else: return "Неподдерживаемый тип файла" except Exception as e: return f"Ошибка при обработке файла: {str(e)}" elif input_text: content = input_text else: return "Пожалуйста, загрузите файл или введите текст" # Тут можно добавить логику обработки текста return f"Результат для функции '{function}': {content[:100]}... (показаны первые 100 символов)" def main(): with gr.Blocks() as demo: gr.Markdown("### AI Research Assistant") with gr.Row(): file_input = gr.File(label="Загрузите файл", file_types=["text", "docx"]) text_input = gr.Textbox(label="Или введите текст", lines=5) with gr.Row(): function_select = gr.Dropdown(choices=[ "Суммаризатор", "Поиск новых статей", "Учитель", "Критик", "Тестировщик", "Визуализатор связей", "Советник", "Соавтор", "Переводчик", "Аннотатор", "Факт-чекер", "Аналитик данных", "Стилистический редактор", "Рецензент", "Презентатор", "Грант-райтер", "Научный сторителлер", "Библиограф" ], label="Выберите функцию") with gr.Row(): submit_button = gr.Button("Обработать") output_text = gr.Textbox(label="Результат") submit_button.click( fn=process_input, inputs=[file_input, text_input, function_select], outputs=output_text ) demo.launch() if __name__ == "__main__": main()