akhaliq HF Staff commited on
Commit
e44c04b
Β·
verified Β·
1 Parent(s): d1bc099

Update Gradio app with multiple files

Browse files
Files changed (1) hide show
  1. app.py +17 -68
app.py CHANGED
@@ -1,12 +1,7 @@
1
  import gradio as gr
2
  import openai
3
  import os
4
- import json
5
- import time
6
- import requests
7
- from typing import Optional, Tuple, Dict, Any
8
- import tempfile
9
- import base64
10
 
11
  # Initialize OpenAI client with Poe API configuration
12
  client = openai.OpenAI(
@@ -14,15 +9,6 @@ client = openai.OpenAI(
14
  base_url="https://api.poe.com/v1",
15
  )
16
 
17
- def format_sora_prompt(
18
- prompt: str,
19
- duration: int = 8,
20
- size: str = "1280x720"
21
- ) -> str:
22
- """Format the prompt with Sora-2 specific parameters."""
23
- formatted_prompt = f"{prompt}\n\n--duration {duration} --size {size}"
24
- return formatted_prompt
25
-
26
  def generate_video(
27
  prompt: str,
28
  duration: int = 8,
@@ -31,7 +17,7 @@ def generate_video(
31
  ) -> Tuple[Optional[str], str]:
32
  """
33
  Generate video using Sora-2 through Poe API.
34
- Returns tuple of (video_path, status_message).
35
  """
36
  try:
37
  # Use provided API key or environment variable
@@ -46,12 +32,9 @@ def generate_video(
46
  return None, "❌ Please provide a Poe API key or set POE_API_KEY environment variable."
47
 
48
  # Format prompt with parameters
49
- formatted_prompt = format_sora_prompt(prompt, duration, size)
50
-
51
- # Start generation
52
- status_message = "🎬 Initiating video generation with Sora-2..."
53
 
54
- # Call Sora-2 through Poe API - simplified API call
55
  chat = temp_client.chat.completions.create(
56
  model="Sora-2",
57
  messages=[{"role": "user", "content": formatted_prompt}],
@@ -60,46 +43,14 @@ def generate_video(
60
  # Extract the response content
61
  content = chat.choices[0].message.content
62
 
63
- # The response should contain a video URL or base64 encoded video
64
- # For demonstration, we'll save it as a temporary file
65
- # In production, you'd parse the actual video data from the response
66
-
67
- # Create a placeholder video file (in production, save actual video data)
68
- with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as tmp_file:
69
- video_path = tmp_file.name
70
-
71
- # If the response contains a URL, download it
72
- if content.startswith("http"):
73
- video_response = requests.get(content)
74
- tmp_file.write(video_response.content)
75
- status_message = f"βœ… Video generated successfully! Duration: {duration}s, Size: {size}"
76
- else:
77
- # If it's base64 or other format, handle accordingly
78
- status_message = "βœ… Video generation completed!"
79
- # For demo purposes, write placeholder
80
- tmp_file.write(b"Video data would be here")
81
-
82
- return video_path, status_message
83
 
84
  except Exception as e:
85
- error_msg = f"❌ Error generating video: {str(e)}"
86
  return None, error_msg
87
 
88
- def validate_api_key(api_key: str) -> bool:
89
- """Validate if the provided API key works."""
90
- try:
91
- test_client = openai.OpenAI(
92
- api_key=api_key,
93
- base_url="https://api.poe.com/v1",
94
- )
95
- # Try a simple test request
96
- test_client.chat.completions.create(
97
- model="Sora-2",
98
- messages=[{"role": "user", "content": "test"}],
99
- )
100
- return True
101
- except:
102
- return False
103
 
104
  # Custom CSS for better styling
105
  custom_css = """
@@ -190,10 +141,12 @@ with gr.Blocks(title="Sora-2 Text-to-Video Generator", css=custom_css, theme=gr.
190
  with gr.Column(scale=1):
191
  # Output Section
192
  with gr.Group():
193
- gr.Markdown("### πŸŽ₯ Generated Video")
194
- video_output = gr.Video(
195
- label="Output",
196
- height=400
 
 
197
  )
198
  status_output = gr.Textbox(
199
  label="Status",
@@ -218,13 +171,9 @@ with gr.Blocks(title="Sora-2 Text-to-Video Generator", css=custom_css, theme=gr.
218
  # Information Section
219
  with gr.Accordion("ℹ️ About Sora-2", open=False):
220
  gr.Markdown("""
221
- **Sora-2** is OpenAI's latest video and audio generation model, delivering:
222
 
223
- - 🎨 **Exceptional Realism**: Photorealistic scenes with accurate physics
224
- - 🎬 **Cinematic Quality**: Professional-grade video generation
225
- - πŸ”Š **Synchronized Audio**: Dialogue and sound effects (when applicable)
226
- - 🎯 **Precise Control**: Multi-shot prompt adherence and editing capabilities
227
- - 🌍 **Real-world Elements**: Integration of people, animals, and objects
228
 
229
  **Available Parameters:**
230
  - **Duration**: 4, 8, or 12 seconds
@@ -241,7 +190,7 @@ with gr.Blocks(title="Sora-2 Text-to-Video Generator", css=custom_css, theme=gr.
241
  generate_btn.click(
242
  fn=generate_video,
243
  inputs=[prompt_input, duration_slider, size_dropdown, api_key_input],
244
- outputs=[video_output, status_output]
245
  )
246
 
247
  # Launch the application
 
1
  import gradio as gr
2
  import openai
3
  import os
4
+ from typing import Optional, Tuple
 
 
 
 
 
5
 
6
  # Initialize OpenAI client with Poe API configuration
7
  client = openai.OpenAI(
 
9
  base_url="https://api.poe.com/v1",
10
  )
11
 
 
 
 
 
 
 
 
 
 
12
  def generate_video(
13
  prompt: str,
14
  duration: int = 8,
 
17
  ) -> Tuple[Optional[str], str]:
18
  """
19
  Generate video using Sora-2 through Poe API.
20
+ Returns tuple of (response_content, status_message).
21
  """
22
  try:
23
  # Use provided API key or environment variable
 
32
  return None, "❌ Please provide a Poe API key or set POE_API_KEY environment variable."
33
 
34
  # Format prompt with parameters
35
+ formatted_prompt = f"{prompt}\n\n--duration {duration} --size {size}"
 
 
 
36
 
37
+ # Call Sora-2 through Poe API
38
  chat = temp_client.chat.completions.create(
39
  model="Sora-2",
40
  messages=[{"role": "user", "content": formatted_prompt}],
 
43
  # Extract the response content
44
  content = chat.choices[0].message.content
45
 
46
+ status_message = f"βœ… Response received! Duration: {duration}s, Size: {size}"
47
+ return content, status_message
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
  except Exception as e:
50
+ error_msg = f"❌ Error: {str(e)}"
51
  return None, error_msg
52
 
53
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  # Custom CSS for better styling
56
  custom_css = """
 
141
  with gr.Column(scale=1):
142
  # Output Section
143
  with gr.Group():
144
+ gr.Markdown("### πŸ“„ Response")
145
+ response_output = gr.Textbox(
146
+ label="Sora-2 Response",
147
+ interactive=False,
148
+ lines=10,
149
+ max_lines=20
150
  )
151
  status_output = gr.Textbox(
152
  label="Status",
 
171
  # Information Section
172
  with gr.Accordion("ℹ️ About Sora-2", open=False):
173
  gr.Markdown("""
174
+ **Sora-2** is OpenAI's text-to-video generation model accessible through Poe API.
175
 
176
+ This simplified interface sends your prompt to Sora-2 and displays the response.
 
 
 
 
177
 
178
  **Available Parameters:**
179
  - **Duration**: 4, 8, or 12 seconds
 
190
  generate_btn.click(
191
  fn=generate_video,
192
  inputs=[prompt_input, duration_slider, size_dropdown, api_key_input],
193
+ outputs=[response_output, status_output]
194
  )
195
 
196
  # Launch the application