Felguk commited on
Commit
517e316
·
verified ·
1 Parent(s): 884352a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +107 -28
app.py CHANGED
@@ -1,33 +1,112 @@
1
  import gradio as gr
 
 
 
 
 
 
 
2
 
3
- # Функция для обработки ввода пользователя и генерации ответа
4
- def felguk_response(input_text, file=None):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  if file is not None:
6
- # Здесь можно добавить логику обработки файла
7
- response = f"Вы загрузили файл: {file.name}. "
8
- else:
9
- response = ""
10
-
11
- # Здесь можно добавить логику генерации ответа на основе текста
12
- response += f"Felguk v0 отвечает: {input_text}"
13
-
14
- return response
15
-
16
- # Создание интерфейса Gradio
17
- with gr.Blocks() as demo:
18
- gr.Markdown("# Felguk v0")
19
-
20
- with gr.Row():
21
- with gr.Column():
22
- input_text = gr.Textbox(label="Введите ваш вопрос или сообщение")
23
- file_input = gr.File(label="Загрузите файл (опционально)")
24
- submit_button = gr.Button("Отправить")
25
-
26
- with gr.Column():
27
- output_text = gr.Textbox(label="Ответ Felguk v0", interactive=False)
28
-
29
- # Привязка функции к интерфейсу
30
- submit_button.click(fn=felguk_response, inputs=[input_text, file_input], outputs=output_text)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  # Запуск интерфейса
33
- demo.launch()
 
 
1
  import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
+ import PyPDF2
4
+ from PIL import Image
5
+ import cv2
6
+ import numpy as np
7
+ from pydub import AudioSegment
8
+ import io
9
 
10
+ # Инициализация клиента для модели Hugging Face
11
+ client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
12
+
13
+ # Функция для обработки PDF
14
+ def process_pdf(file):
15
+ pdf_reader = PyPDF2.PdfReader(file)
16
+ text = ""
17
+ for page in pdf_reader.pages:
18
+ text += page.extract_text()
19
+ return text
20
+
21
+ # Функция для обработки изображений
22
+ def process_image(file):
23
+ image = Image.open(file)
24
+ return f"Изображение: {image.size[0]}x{image.size[1]} пикселей, формат: {image.format}"
25
+
26
+ # Функция для обработки видео
27
+ def process_video(file):
28
+ cap = cv2.VideoCapture(file.name)
29
+ frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
30
+ duration = frame_count / cap.get(cv2.CAP_PROP_FPS)
31
+ cap.release()
32
+ return f"Видео: длительность {duration:.2f} секунд, {frame_count} кадров"
33
+
34
+ # Функция для обработки аудио
35
+ def process_audio(file):
36
+ audio = AudioSegment.from_file(file)
37
+ return f"Аудио: длительность {len(audio) / 1000:.2f} секунд, частота {audio.frame_rate} Гц"
38
+
39
+ # Функция для обработки сообщений, истории и файлов
40
+ def respond(
41
+ message,
42
+ history: list[tuple[str, str]],
43
+ system_message,
44
+ max_tokens,
45
+ temperature,
46
+ top_p,
47
+ file=None,
48
+ ):
49
+ # Добавляем системное сообщение
50
+ messages = [{"role": "system", "content": system_message}]
51
+
52
+ # Добавляем историю сообщений
53
+ for val in history:
54
+ if val[0]:
55
+ messages.append({"role": "user", "content": val[0]})
56
+ if val[1]:
57
+ messages.append({"role": "assistant", "content": val[1]})
58
+
59
+ # Если загружен файл, обрабатываем его
60
  if file is not None:
61
+ file_type = file.name.split(".")[-1].lower()
62
+ if file_type == "pdf":
63
+ file_info = process_pdf(file)
64
+ elif file_type in ["jpg", "jpeg", "png", "bmp", "gif"]:
65
+ file_info = process_image(file)
66
+ elif file_type in ["mp4", "avi", "mov"]:
67
+ file_info = process_video(file)
68
+ elif file_type in ["mp3", "wav", "ogg"]:
69
+ file_info = process_audio(file)
70
+ else:
71
+ file_info = "Неизвестный тип файла"
72
+ message += f"\n[Пользователь загрузил файл: {file.name}]\n{file_info}"
73
+
74
+ # Добавляем текущее сообщение пользователя
75
+ messages.append({"role": "user", "content": message})
76
+
77
+ # Генерация ответа с использованием модели
78
+ response = ""
79
+ for message in client.chat_completion(
80
+ messages,
81
+ max_tokens=max_tokens,
82
+ stream=True,
83
+ temperature=temperature,
84
+ top_p=top_p,
85
+ ):
86
+ token = message.choices[0].delta.content
87
+ response += token
88
+ yield response
89
+
90
+ # Создание интерфейса с использованием ChatInterface
91
+ demo = gr.ChatInterface(
92
+ respond,
93
+ additional_inputs=[
94
+ gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
95
+ gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
96
+ gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
97
+ gr.Slider(
98
+ minimum=0.1,
99
+ maximum=1.0,
100
+ value=0.95,
101
+ step=0.05,
102
+ label="Top-p (nucleus sampling)",
103
+ ),
104
+ gr.File(label="Загрузите файл (опционально)"), # Поле для загрузки файлов
105
+ ],
106
+ title="Felguk v0",
107
+ description="Чат-бот Felguk v0. Задавайте вопросы и загружайте файлы (PDF, изображения, видео, аудио)!",
108
+ )
109
 
110
  # Запуск интерфейса
111
+ if __name__ == "__main__":
112
+ demo.launch()