freddyaboulton HF staff commited on
Commit
29d30f2
·
1 Parent(s): b2e5de5
Files changed (1) hide show
  1. app.py +37 -9
app.py CHANGED
@@ -17,6 +17,24 @@ from dotenv import load_dotenv
17
 
18
  load_dotenv()
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  @dataclass
21
  class Deps:
22
  client: AsyncClient
@@ -134,10 +152,16 @@ deps = Deps(
134
  )
135
 
136
 
137
- async def stream_from_agent(prompt: str, chatbot: list[dict], past_messages: list):
138
- yield "", gr.skip(), gr.skip()
 
 
 
 
 
 
139
  chatbot.append({'role': 'user', 'content': prompt})
140
- yield gr.skip(), chatbot, gr.skip()
141
  async with weather_agent.run_stream(prompt, deps=deps, message_history=past_messages) as result:
142
  for message in result.new_messages():
143
  past_messages.append(message)
@@ -153,14 +177,14 @@ async def stream_from_agent(prompt: str, chatbot: list[dict], past_messages: lis
153
  for gr_message in chatbot:
154
  if gr_message.get('metadata', {}).get('id', "") == message.tool_id:
155
  gr_message['content'] = f"Output: {json.dumps(message.content)}"
156
- yield gr.skip(), chatbot, gr.skip()
157
  chatbot.append({'role': 'assistant', 'content': ""})
158
  async for message in result.stream_text():
159
  chatbot[-1]["content"] = message
160
- yield gr.skip(), chatbot, gr.skip()
161
  data = await result.get_data()
162
  past_messages.append(ModelTextResponse(content=data))
163
- yield gr.skip(), gr.skip(), past_messages
164
 
165
 
166
  with gr.Blocks() as demo:
@@ -183,9 +207,13 @@ with gr.Blocks() as demo:
183
  past_messages = gr.State([])
184
  chatbot = gr.Chatbot(label="Packing Assistant", type="messages",
185
  avatar_images=(None, "https://ai.pydantic.dev/img/logo-white.svg"))
186
- prompt = gr.Textbox(lines=1, label="Enter your destination or follow-up question", placeholder="Miami, Florida")
187
- prompt.submit(stream_from_agent, inputs=[prompt, chatbot, past_messages],
188
- outputs=[prompt, chatbot, past_messages])
 
 
 
 
189
 
190
 
191
 
 
17
 
18
  load_dotenv()
19
 
20
+ import logging
21
+
22
+ # Configure the root logger to WARNING to suppress debug messages from other libraries
23
+ logging.basicConfig(level=logging.WARNING)
24
+
25
+ # Create a console handler
26
+ console_handler = logging.StreamHandler()
27
+ console_handler.setLevel(logging.DEBUG)
28
+
29
+ # Create a formatter
30
+ formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s")
31
+ console_handler.setFormatter(formatter)
32
+
33
+ # Configure the logger for your specific library
34
+ logger = logging.getLogger("gradio_webrtc")
35
+ logger.setLevel(logging.DEBUG)
36
+ logger.addHandler(console_handler)
37
+
38
  @dataclass
39
  class Deps:
40
  client: AsyncClient
 
152
  )
153
 
154
 
155
+ async def stream_from_agent(audio: tuple[int, np.ndarray], chatbot: list[dict], past_messages: list):
156
+
157
+ prompt = groq_client.audio.transcriptions.create(
158
+ file=("audio-file.mp3", audio_to_bytes(audio)),
159
+ model="whisper-large-v3-turbo",
160
+ response_format="verbose_json",
161
+ ).text
162
+
163
  chatbot.append({'role': 'user', 'content': prompt})
164
+ yield AdditionalOutputs(chatbot, gr.skip())
165
  async with weather_agent.run_stream(prompt, deps=deps, message_history=past_messages) as result:
166
  for message in result.new_messages():
167
  past_messages.append(message)
 
177
  for gr_message in chatbot:
178
  if gr_message.get('metadata', {}).get('id', "") == message.tool_id:
179
  gr_message['content'] = f"Output: {json.dumps(message.content)}"
180
+ yield AdditionalOutputs(chatbot, gr.skip())
181
  chatbot.append({'role': 'assistant', 'content': ""})
182
  async for message in result.stream_text():
183
  chatbot[-1]["content"] = message
184
+ yield AdditionalOutputs(chatbot, gr.skip())
185
  data = await result.get_data()
186
  past_messages.append(ModelTextResponse(content=data))
187
+ yield AdditionalOutputs(gr.skip(), past_messages)
188
 
189
 
190
  with gr.Blocks() as demo:
 
207
  past_messages = gr.State([])
208
  chatbot = gr.Chatbot(label="Packing Assistant", type="messages",
209
  avatar_images=(None, "https://ai.pydantic.dev/img/logo-white.svg"))
210
+ audio= WebRTC(label="Talk with the Agent",
211
+ modality="audio",
212
+ mode="send")
213
+ audio.stream(ReplyOnPause(stream_from_agent), inputs=[audio, chatbot, past_messages],
214
+ outputs=[audio])
215
+ audio.on_additional_outputs(lambda c,s: (c, s), outputs=[chatbot, past_messages],
216
+ queue=False, show_progress="hidden")
217
 
218
 
219