add changes in pdf logic
changes: 1. Remove `/` file (just missed click when create it); 2. Add filename input for pdf; 3. Now pdf file saves.
This commit is contained in:
24
\
24
\
@@ -1,24 +0,0 @@
|
|||||||
import re
|
|
||||||
from pylatexenc.latex2text import LatexNodes2Text
|
|
||||||
|
|
||||||
class ConvertMdToPdf:
|
|
||||||
# Конвертирует md в pdf
|
|
||||||
def convertLatexToText(self, text:str):
|
|
||||||
# Обрабатываем только математические выражения
|
|
||||||
text = re.sub(
|
|
||||||
r'\$\$(.*?)\$\$|\$(.*?)\$',
|
|
||||||
self.replace_math,
|
|
||||||
text,
|
|
||||||
flags=re.DOTALL
|
|
||||||
)
|
|
||||||
return text
|
|
||||||
|
|
||||||
def replace_math(self, match):
|
|
||||||
math_content = match.group(1) or match.group(2) # $$...$$ или $...$
|
|
||||||
try:
|
|
||||||
# Преобразуем только математическое выражение
|
|
||||||
converted = LatexNodes2Text().latex_to_text(math_content)
|
|
||||||
return converted
|
|
||||||
except:
|
|
||||||
return math_content # В случае ошибки оставляем как есть
|
|
||||||
|
|
||||||
25
app.py
25
app.py
@@ -11,7 +11,7 @@ from services.convertMdToPdf import ConvertMdToPdf
|
|||||||
from config import *
|
from config import *
|
||||||
|
|
||||||
# Функция транскрибации
|
# Функция транскрибации
|
||||||
def generateByCondition(api_key, llm_model, system_prompt, recognized_text, llm_temperature, is_pipeline_enabled, trigger, isSaveFile):
|
def generateByCondition(api_key, llm_model, system_prompt, recognized_text, llm_temperature, is_pipeline_enabled, trigger, isSaveFile, filename, filenamePdf):
|
||||||
llm = Llm(api_key)
|
llm = Llm(api_key)
|
||||||
|
|
||||||
# если чекбокс включен и событие было change → обрабатываем
|
# если чекбокс включен и событие было change → обрабатываем
|
||||||
@@ -19,10 +19,11 @@ def generateByCondition(api_key, llm_model, system_prompt, recognized_text, llm_
|
|||||||
result, md = llm.generate(llm_model, system_prompt, recognized_text, llm_temperature)
|
result, md = llm.generate(llm_model, system_prompt, recognized_text, llm_temperature)
|
||||||
|
|
||||||
# Конвертируем текст с латексом в юникод
|
# Конвертируем текст с латексом в юникод
|
||||||
unicodeText = ConvertMdToPdf().convertLatexToText(md)
|
pdf, unicodeText = ConvertMdToPdf().convertLatexToText(md)
|
||||||
|
|
||||||
if isSaveFile:
|
if isSaveFile:
|
||||||
saveFile("output.txt", result)
|
savePdf(filenamePdf, pdf)
|
||||||
|
saveFile(filename, result)
|
||||||
|
|
||||||
return result, unicodeText
|
return result, unicodeText
|
||||||
|
|
||||||
@@ -31,10 +32,11 @@ def generateByCondition(api_key, llm_model, system_prompt, recognized_text, llm_
|
|||||||
result, md = llm.generate(llm_model, system_prompt, recognized_text, llm_temperature)
|
result, md = llm.generate(llm_model, system_prompt, recognized_text, llm_temperature)
|
||||||
|
|
||||||
# Конвертируем текст с латексом в юникод
|
# Конвертируем текст с латексом в юникод
|
||||||
unicodeText = ConvertMdToPdf().convertLatexToText(md)
|
pdf, unicodeText = ConvertMdToPdf().convertLatexToText(md)
|
||||||
|
|
||||||
if isSaveFile:
|
if isSaveFile:
|
||||||
saveFile("output.txt", result)
|
savePdf(filenamePdf, pdf)
|
||||||
|
saveFile(filename, result)
|
||||||
|
|
||||||
return result, unicodeText
|
return result, unicodeText
|
||||||
|
|
||||||
@@ -42,6 +44,12 @@ def generateByCondition(api_key, llm_model, system_prompt, recognized_text, llm_
|
|||||||
return gr.skip(), gr.skip()
|
return gr.skip(), gr.skip()
|
||||||
|
|
||||||
|
|
||||||
|
def savePdf(filename, pdf):
|
||||||
|
directory = Path(OUTPUT_PATH)
|
||||||
|
filePath = directory / filename
|
||||||
|
filePath.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
pdf.save(filePath)
|
||||||
|
|
||||||
# Функция сохранеhния файла
|
# Функция сохранеhния файла
|
||||||
def saveFile(filename, text):
|
def saveFile(filename, text):
|
||||||
directory = Path(OUTPUT_PATH)
|
directory = Path(OUTPUT_PATH)
|
||||||
@@ -93,6 +101,7 @@ with gr.Blocks() as demo:
|
|||||||
with gr.Group():
|
with gr.Group():
|
||||||
saveFileCheckbox = gr.Checkbox(label='save file', value=True, interactive=True)
|
saveFileCheckbox = gr.Checkbox(label='save file', value=True, interactive=True)
|
||||||
filename = gr.Textbox(label='Output filename', value='output.txt', interactive=True)
|
filename = gr.Textbox(label='Output filename', value='output.txt', interactive=True)
|
||||||
|
filenamePdf = gr.Textbox(label='Output filename for pdf', value='output.pdf', interactive=True)
|
||||||
|
|
||||||
|
|
||||||
# Акордион настроек faster whisper
|
# Акордион настроек faster whisper
|
||||||
@@ -127,7 +136,7 @@ with gr.Blocks() as demo:
|
|||||||
systemPrompt = gr.Textbox(label='', value=DEFAULT_SYSTEM_PROMPT, interactive=True)
|
systemPrompt = gr.Textbox(label='', value=DEFAULT_SYSTEM_PROMPT, interactive=True)
|
||||||
|
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
llmModel = gr.Dropdown(label='models', choices=LLM_MODELS, value=LLM_MODELS[0], interactive=True)
|
llmModel = gr.Dropdown(label='models', choices=LLM_MODELS, value=LLM_MODELS[1], interactive=True)
|
||||||
llmTemperature = gr.Number(label='Temperature', value=0.8, interactive=True )
|
llmTemperature = gr.Number(label='Temperature', value=0.8, interactive=True )
|
||||||
|
|
||||||
with gr.Column():
|
with gr.Column():
|
||||||
@@ -151,14 +160,14 @@ with gr.Blocks() as demo:
|
|||||||
# автоматический пайплайн
|
# автоматический пайплайн
|
||||||
recognizedText.change(
|
recognizedText.change(
|
||||||
generateByCondition,
|
generateByCondition,
|
||||||
inputs=[apiKey, llmModel, systemPrompt, recognizedText, llmTemperature, isPipelineEnabledCheckbox, gr.State("change"), saveFileCheckbox],
|
inputs=[apiKey, llmModel, systemPrompt, recognizedText, llmTemperature, isPipelineEnabledCheckbox, gr.State("change"), saveFileCheckbox, filename, filenamePdf],
|
||||||
outputs=[refinedText, refinedTextMD]
|
outputs=[refinedText, refinedTextMD]
|
||||||
)
|
)
|
||||||
|
|
||||||
# ручной запуск по кнопке
|
# ручной запуск по кнопке
|
||||||
refineTextBtn.click(
|
refineTextBtn.click(
|
||||||
generateByCondition,
|
generateByCondition,
|
||||||
inputs=[apiKey, llmModel, systemPrompt, recognizedText, llmTemperature, isPipelineEnabledCheckbox, gr.State("click"), saveFileCheckbox],
|
inputs=[apiKey, llmModel, systemPrompt, recognizedText, llmTemperature, isPipelineEnabledCheckbox, gr.State("click"), saveFileCheckbox, filename, filenamePdf],
|
||||||
outputs=[refinedText, refinedTextMD]
|
outputs=[refinedText, refinedTextMD]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,6 @@ DEFAULT_API_KEY=os.getenv('API_KEY')
|
|||||||
# Задаем выходную директорию
|
# Задаем выходную директорию
|
||||||
OUTPUT_PATH='outputs'
|
OUTPUT_PATH='outputs'
|
||||||
|
|
||||||
# Стандартный системный промпт
|
|
||||||
OUTPUT_PATH='outputs'
|
|
||||||
|
|
||||||
DEFAULT_SYSTEM_PROMPT='''You are a diligent university student who has recorded a lecture as an audio file and later transcribed it into raw text.
|
DEFAULT_SYSTEM_PROMPT='''You are a diligent university student who has recorded a lecture as an audio file and later transcribed it into raw text.
|
||||||
Your task is to rewrite this unstructured transcript into a clear, logically organized, and detailed lecture summary (lecture notes).
|
Your task is to rewrite this unstructured transcript into a clear, logically organized, and detailed lecture summary (lecture notes).
|
||||||
|
|
||||||
@@ -45,5 +42,6 @@ Guidelines:
|
|||||||
Final Output: A cohesive, detailed, and well-structured lecture summary, suitable for later studying and revision.
|
Final Output: A cohesive, detailed, and well-structured lecture summary, suitable for later studying and revision.
|
||||||
Use only russian language!
|
Use only russian language!
|
||||||
USE LATEX IN DOLLAR SIGN ($)!
|
USE LATEX IN DOLLAR SIGN ($)!
|
||||||
|
EXTRA BIG LENTH OF CONSPECT!
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ class ConvertMdToPdf:
|
|||||||
text,
|
text,
|
||||||
flags=re.DOTALL
|
flags=re.DOTALL
|
||||||
)
|
)
|
||||||
pdf = MarkdownPdf(toc_level=2, optimize=True)
|
pdf = MarkdownPdf(toc_level=0, optimize=True)
|
||||||
pdf.add_section(Section(text))
|
pdf.add_section(Section(text))
|
||||||
return text
|
return pdf, text
|
||||||
|
|
||||||
def replace_math(self, match):
|
def replace_math(self, match):
|
||||||
math_content = match.group(1) or match.group(2) # $$...$$ или $...$
|
math_content = match.group(1) or match.group(2) # $$...$$ или $...$
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from faster_whisper import WhisperModel
|
|||||||
|
|
||||||
class FasterWhisper:
|
class FasterWhisper:
|
||||||
def recognize(self, model, audioFile, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText):
|
def recognize(self, model, audioFile, beamSize, vadFilter, minSilenceDurationMs, speechPadMs, temp0, temp1, temp2, wordTimestamps, noSpeechThreshold, conditionOnPreviousText):
|
||||||
model = WhisperModel(model, device='auto', compute_type='auto') # Задаем модель
|
model = WhisperModel(model, device='cuda', compute_type='auto') # Задаем модель
|
||||||
|
|
||||||
segments, _ = model.transcribe( # Распознаем текст
|
segments, _ = model.transcribe( # Распознаем текст
|
||||||
audioFile,
|
audioFile,
|
||||||
|
|||||||
Reference in New Issue
Block a user