import gradio as gr from io import BytesIO import docx def process_input(uploaded_file, function): if uploaded_file is None: return "Файл не загружен" try: # Получаем содержимое файла file_content = uploaded_file.read() # Определяем тип файла по расширению if uploaded_file.name.endswith('.txt'): # Если файл текстовый, декодируем содержимое content = file_content.decode("utf-8") elif uploaded_file.name.endswith('.docx'): # Если файл Word, используем библиотеку python-docx doc = docx.Document(BytesIO(file_content)) content = '\n'.join([para.text for para in doc.paragraphs]) else: return "Неподдерживаемый тип файла" # Тут можно добавить логику обработки текста return f"Результат для функции '{function}': {content[:100]}... (показаны первые 100 символов)" except Exception as e: return f"Ошибка при обработке файла: {str(e)}" def main(): with gr.Blocks() as demo: gr.Markdown("### AI Research Assistant") with gr.Row(): file_input = gr.File(label="Загрузите файл", file_types=["text", "docx"]) 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, function_select], outputs=output_text ) demo.launch() if __name__ == "__main__": main()