Jiangxz01 commited on
Commit
194b951
·
verified ·
1 Parent(s): 681ba78

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -36
app.py CHANGED
@@ -19,23 +19,23 @@ class PodcastGenerator:
19
 
20
  async def generate_script(self, prompt: str, language: str, api_key: str) -> Dict:
21
  """
22
- 非同步生成基於給定提示和語言的Podcast劇本。
23
 
24
- 引數:
25
- prompt (str): 用於生成Podcast劇本的使用者輸入文字。
26
- language (str): Podcast指劇本所需的語言。
27
- api_key (str): 用於訪問 Gemini AI 服務的 API 金鑰。
28
 
29
  返回:
30
- Dict: 包含以 JSON 格式生成Podcast劇本的字典。
31
 
32
  異常:
33
- gr.Error: 如果 API 金鑰或速率限制出現問題。
34
 
35
- 此方法使用 Gemini AI 模型根據使用者的輸入生成Podcast劇本。
36
- 它處理語言選擇,使用適當的配置設定 AI 模型,並處理生成的響應。
37
  """
38
- # 定義一個示例JSON結構,用於指導AI生成類似格式的Podcast劇本
39
  example = """
40
  {
41
  "topic": "AGI",
@@ -244,7 +244,7 @@ class PodcastGenerator:
244
  - The podcast should be interesting, lively, and engaging, and hook the listener from the start.
245
  - The input text might be disorganized or unformatted, originating from sources like PDFs or text files. Ignore any formatting inconsistencies or irrelevant details; your task is to distill the essential points, identify key definitions, and highlight intriguing facts that would be suitable for discussion in a podcast.
246
  - The script must be in JSON format.
247
- Follow this example structure carefully:
248
  {example}
249
  """
250
 
@@ -301,8 +301,8 @@ class PodcastGenerator:
301
  """
302
  非同步生成文字轉語音音訊檔案。
303
 
304
- 引數:
305
- text (str): 要轉換爲語音的文字內容。
306
  speaker (int): 說話者的編號(1 或 2)。
307
  speaker1 (str): 第一位說話者的語音設定。
308
  speaker2 (str): 第二位說話者的語音設定。
@@ -310,7 +310,7 @@ class PodcastGenerator:
310
  返回:
311
  str: 生成的臨時音訊檔案的檔名。
312
 
313
- 此方法使用 Edge TTS 將文字轉換爲語音,並將結果儲存爲臨時音訊檔案。
314
  根據指定的說話者編號選擇相應的語音設定。
315
  """
316
  # 根據說話者選擇語音
@@ -334,7 +334,7 @@ class PodcastGenerator:
334
  """
335
  非同步合併音訊檔案。
336
 
337
- 引數:
338
  audio_files (List[str]): 包含音訊檔案路徑的列表。
339
 
340
  返回:
@@ -355,26 +355,26 @@ class PodcastGenerator:
355
 
356
  async def generate_podcast(self, input_text: str, language: str, speaker1: str, speaker2: str, api_key: str) -> str:
357
  """
358
- 非同步生成Podcast音訊檔案。
359
 
360
- 引數:
361
- input_text (str): 用於生成Podcast指令碼的輸入文字。
362
- language (str): Podcast使用的語言。
363
  speaker1 (str): 第一位說話者的語音設定。
364
  speaker2 (str): 第二位說話者的語音設定。
365
- api_key (str): 用於訪問 Gemini AI 服務的 API 金鑰。
366
 
367
  返回:
368
- str: 生成的Podcast音訊檔案的檔名。
369
 
370
  此方法執行以下步驟:
371
- 1. 使用 generate_script 方法生成Podcast劇本。
372
- 2. 使用 tts_generate 方法爲每個對話行生成音訊檔案。
373
- 3. 使用 combine_audio_files 方法將所有音訊檔案合併爲一個完整的Podcast。
374
 
375
  整個過程是非同步的,以提高效率。方法還會記錄並顯示每個步驟的執行時間。
376
  """
377
- # 生成Podcast劇本
378
  gr.Info("Generating podcast script...")
379
  start_time = time.time()
380
  podcast_json = await self.generate_script(input_text, language, api_key)
@@ -420,21 +420,21 @@ class TextExtractor:
420
 
421
  async def process_input(input_text: str, input_file, language: str, speaker1: str, speaker2: str, api_key: str = "") -> str:
422
  """
423
- 處理輸入並生成Podcast的非同步函式。
424
 
425
- 引數:
426
- input_text (str): 使用者輸入的文字內容。
427
- input_file: 使用者上傳的檔案(可以是 PDF 或 TXT)。
428
  language (str): 選擇的語言。
429
  speaker1 (str): 第一位說話者的語音選擇。
430
  speaker2 (str): 第二位說話者的語音選擇。
431
- api_key (str): 用於生成 AI 的 API 金鑰,預設爲空字串。
432
 
433
  返回:
434
- str: 生成的Podcast音訊檔案路徑。
435
 
436
- 此函式協調整個Podcast生成過程,包括文字提取、指令碼生成和音訊合成。
437
- 它處理不同的輸入型別(文字或檔案),並使用指定的語音和語言設定來建立最終的Podcast。
438
  """
439
  # 開始生成Podcast
440
  gr.Info("Starting podcast generation...")
@@ -462,7 +462,7 @@ async def process_input(input_text: str, input_file, language: str, speaker1: st
462
 
463
  # 如果沒有提供API金鑰,則使用環境變數中的金鑰
464
  if not api_key:
465
- api_key = os.getenv("Your_API_KEY")
466
 
467
  # 建立PodcastGenerator實例並生成Podcast
468
  podcast_generator = PodcastGenerator()
@@ -524,7 +524,7 @@ iface = gr.Interface(
524
  outputs=[
525
  gr.Audio(label="Generated Podcast Audio")
526
  ],
527
- title="🎙️ PodcastGen 🎙️",
528
  description="Generate a 2-speaker podcast from text input or documents!",
529
  allow_flagging="never"
530
  )
@@ -532,4 +532,3 @@ iface = gr.Interface(
532
  if __name__ == "__main__":
533
  iface.launch()
534
 
535
-
 
19
 
20
  async def generate_script(self, prompt: str, language: str, api_key: str) -> Dict:
21
  """
22
+ 異步生成基於給定提示和語言的播客腳本。
23
 
24
+ 參數:
25
+ prompt (str): 用於生成播客腳本的用戶輸入文本。
26
+ language (str): 播客腳本所需的語言。
27
+ api_key (str): 用於訪問 Gemini AI 服務的 API 密鑰。
28
 
29
  返回:
30
+ Dict: 包含以 JSON 格式生成的播客腳本的字典。
31
 
32
  異常:
33
+ gr.Error: 如果 API 密鑰或速率限制出現問題。
34
 
35
+ 此方法使用 Gemini AI 模型根據用戶的輸入生成播客腳本。
36
+ 它處理語言選擇,使用適當的配置設置 AI 模型,並處理生成的響應。
37
  """
38
+ # 定義一個示例JSON結構,用於指導AI生成類似格式的Podcast指令碼
39
  example = """
40
  {
41
  "topic": "AGI",
 
244
  - The podcast should be interesting, lively, and engaging, and hook the listener from the start.
245
  - The input text might be disorganized or unformatted, originating from sources like PDFs or text files. Ignore any formatting inconsistencies or irrelevant details; your task is to distill the essential points, identify key definitions, and highlight intriguing facts that would be suitable for discussion in a podcast.
246
  - The script must be in JSON format.
247
+ Follow this example structure:
248
  {example}
249
  """
250
 
 
301
  """
302
  非同步生成文字轉語音音訊檔案。
303
 
304
+ 參數:
305
+ text (str): 要轉換為語音的文字內容。
306
  speaker (int): 說話者的編號(1 或 2)。
307
  speaker1 (str): 第一位說話者的語音設定。
308
  speaker2 (str): 第二位說話者的語音設定。
 
310
  返回:
311
  str: 生成的臨時音訊檔案的檔名。
312
 
313
+ 此方法使用 Edge TTS 將文字轉換為語音,並將結果保存為臨時音訊檔案。
314
  根據指定的說話者編號選擇相應的語音設定。
315
  """
316
  # 根據說話者選擇語音
 
334
  """
335
  非同步合併音訊檔案。
336
 
337
+ 參數:
338
  audio_files (List[str]): 包含音訊檔案路徑的列表。
339
 
340
  返回:
 
355
 
356
  async def generate_podcast(self, input_text: str, language: str, speaker1: str, speaker2: str, api_key: str) -> str:
357
  """
358
+ 非同步生成播客音訊檔案。
359
 
360
+ 參數:
361
+ input_text (str): 用於生成播客腳本的輸入文本。
362
+ language (str): 播客使用的語言。
363
  speaker1 (str): 第一位說話者的語音設定。
364
  speaker2 (str): 第二位說話者的語音設定。
365
+ api_key (str): 用於訪問 Gemini AI 服務的 API 密鑰。
366
 
367
  返回:
368
+ str: 生成的播客音訊檔案的檔名。
369
 
370
  此方法執行以下步驟:
371
+ 1. 使用 generate_script 方法生成播客腳本。
372
+ 2. 使用 tts_generate 方法為每個對話行生成音訊檔案。
373
+ 3. 使用 combine_audio_files 方法將所有音訊檔案合併為一個完整的播客。
374
 
375
  整個過程是非同步的,以提高效率。方法還會記錄並顯示每個步驟的執行時間。
376
  """
377
+ # 生成Podcast指令碼
378
  gr.Info("Generating podcast script...")
379
  start_time = time.time()
380
  podcast_json = await self.generate_script(input_text, language, api_key)
 
420
 
421
  async def process_input(input_text: str, input_file, language: str, speaker1: str, speaker2: str, api_key: str = "") -> str:
422
  """
423
+ 處理輸入並生成播客的非同步函數。
424
 
425
+ 參數:
426
+ input_text (str): 用戶輸入的文本內容。
427
+ input_file: 用戶上傳的文件(可以是 PDF 或 TXT)。
428
  language (str): 選擇的語言。
429
  speaker1 (str): 第一位說話者的語音選擇。
430
  speaker2 (str): 第二位說話者的語音選擇。
431
+ api_key (str): 用於生成 AI 的 API 金鑰,預設為空字串。
432
 
433
  返回:
434
+ str: 生成的播客音頻文件路徑。
435
 
436
+ 此函數協調整個播客生成過程,包括文本提取、腳本生成和音頻合成。
437
+ 它處理不同的輸入類型(文本或文件),並使用指定的語音和語言設置來創建最終的播客。
438
  """
439
  # 開始生成Podcast
440
  gr.Info("Starting podcast generation...")
 
462
 
463
  # 如果沒有提供API金鑰,則使用環境變數中的金鑰
464
  if not api_key:
465
+ api_key = os.getenv("GENAI_API_KEY")
466
 
467
  # 建立PodcastGenerator實例並生成Podcast
468
  podcast_generator = PodcastGenerator()
 
524
  outputs=[
525
  gr.Audio(label="Generated Podcast Audio")
526
  ],
527
+ title="PodcastGen 🎙️",
528
  description="Generate a 2-speaker podcast from text input or documents!",
529
  allow_flagging="never"
530
  )
 
532
  if __name__ == "__main__":
533
  iface.launch()
534