import spaces import torch import gradio as gr from transformers import pipeline from huggingface_hub import InferenceClient import tempfile import os MODEL_NAME = "openai/whisper-large-v3-turbo" BATCH_SIZE = 8 FILE_LIMIT_MB = 1000 device = 0 if torch.cuda.is_available() else "cpu" pipe = pipeline( task="automatic-speech-recognition", model=MODEL_NAME, chunk_length_s=30, device=device, ) # Hugging Face InferenceClient 사용 hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus-08-2024", token=os.getenv("HF_TOKEN")) @spaces.GPU def transcribe_summarize_and_blog(inputs, task): if inputs is None: raise gr.Error("오디오 파일이 제출되지 않았습니다! 요청을 제출하기 전에 오디오 파일을 업로드하거나 녹음해 주세요.") # 음성을 텍스트로 변환 text = pipe(inputs, batch_size=BATCH_SIZE, generate_kwargs={"task": task}, return_timestamps=True)["text"] # 변환된 텍스트 요약 요청 try: summary = hf_client.summarization(text) except Exception as e: raise gr.Error(f"요약 중 오류가 발생했습니다: {e}") # 블로그 포스팅 생성 요청 try: blog_post = hf_client.text_generation( prompt=f"다음 내용을 기반으로 블로그 포스팅을 작성해 주세요:\n{text}", max_length=500, temperature=0.7 ) except Exception as e: raise gr.Error(f"블로그 글 생성 중 오류가 발생했습니다: {e}") return { "transcribed_text": text, "summary": summary["summary_text"], "blog_post": blog_post["generated_text"] } css = """ footer { visibility: hidden; } """ file_transcribe = gr.Interface( fn=transcribe_summarize_and_blog, inputs=[ gr.Audio(sources="upload", type="filepath", label="오디오 파일"), gr.Radio(["transcribe", "translate"], label="작업", value="transcribe"), ], outputs=["text", "text", "text"], # 변환된 텍스트, 요약, 블로그 글 출력 title="받아쓰기 AI: 음성을 텍스트 변환, 요약 및 블로그 포스팅 자동 생성", flagging_mode="never", ) mf_transcribe = gr.Interface(css=css, fn=transcribe_summarize_and_blog, inputs=[ gr.Audio(sources="microphone", type="filepath"), gr.Radio(["transcribe", "translate"], label="작업", value="transcribe"), ], outputs=["text", "text", "text"], # 변환된 텍스트, 요약, 블로그 글 출력 title="받아쓰기 AI: 음성을 텍스트 변환, 요약 및 블로그 포스팅 자동 생성", flagging_mode="never", ) # demo 변수를 Gradio Blocks 컨테이너로 정의 demo = gr.Blocks(theme="Nymbo/Nymbo_Theme") with demo: gr.TabbedInterface([mf_transcribe, file_transcribe], ["마이크", "오디오 파일"]) demo.queue().launch(ssr_mode=False)