amd-gaia 0.15.0__py3-none-any.whl → 0.15.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.1.dist-info}/METADATA +223 -223
- amd_gaia-0.15.1.dist-info/RECORD +178 -0
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.1.dist-info}/entry_points.txt +1 -0
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.1.dist-info}/licenses/LICENSE.md +20 -20
- gaia/__init__.py +29 -29
- gaia/agents/__init__.py +19 -19
- gaia/agents/base/__init__.py +9 -9
- gaia/agents/base/agent.py +2177 -2177
- gaia/agents/base/api_agent.py +120 -120
- gaia/agents/base/console.py +1841 -1841
- gaia/agents/base/errors.py +237 -237
- gaia/agents/base/mcp_agent.py +86 -86
- gaia/agents/base/tools.py +83 -83
- gaia/agents/blender/agent.py +556 -556
- gaia/agents/blender/agent_simple.py +133 -135
- gaia/agents/blender/app.py +211 -211
- gaia/agents/blender/app_simple.py +41 -41
- gaia/agents/blender/core/__init__.py +16 -16
- gaia/agents/blender/core/materials.py +506 -506
- gaia/agents/blender/core/objects.py +316 -316
- gaia/agents/blender/core/rendering.py +225 -225
- gaia/agents/blender/core/scene.py +220 -220
- gaia/agents/blender/core/view.py +146 -146
- gaia/agents/chat/__init__.py +9 -9
- gaia/agents/chat/agent.py +835 -835
- gaia/agents/chat/app.py +1058 -1058
- gaia/agents/chat/session.py +508 -508
- gaia/agents/chat/tools/__init__.py +15 -15
- gaia/agents/chat/tools/file_tools.py +96 -96
- gaia/agents/chat/tools/rag_tools.py +1729 -1729
- gaia/agents/chat/tools/shell_tools.py +436 -436
- gaia/agents/code/__init__.py +7 -7
- gaia/agents/code/agent.py +549 -549
- gaia/agents/code/cli.py +377 -0
- gaia/agents/code/models.py +135 -135
- gaia/agents/code/orchestration/__init__.py +24 -24
- gaia/agents/code/orchestration/checklist_executor.py +1763 -1763
- gaia/agents/code/orchestration/checklist_generator.py +713 -713
- gaia/agents/code/orchestration/factories/__init__.py +9 -9
- gaia/agents/code/orchestration/factories/base.py +63 -63
- gaia/agents/code/orchestration/factories/nextjs_factory.py +118 -118
- gaia/agents/code/orchestration/factories/python_factory.py +106 -106
- gaia/agents/code/orchestration/orchestrator.py +841 -841
- gaia/agents/code/orchestration/project_analyzer.py +391 -391
- gaia/agents/code/orchestration/steps/__init__.py +67 -67
- gaia/agents/code/orchestration/steps/base.py +188 -188
- gaia/agents/code/orchestration/steps/error_handler.py +314 -314
- gaia/agents/code/orchestration/steps/nextjs.py +828 -828
- gaia/agents/code/orchestration/steps/python.py +307 -307
- gaia/agents/code/orchestration/template_catalog.py +469 -469
- gaia/agents/code/orchestration/workflows/__init__.py +14 -14
- gaia/agents/code/orchestration/workflows/base.py +80 -80
- gaia/agents/code/orchestration/workflows/nextjs.py +186 -186
- gaia/agents/code/orchestration/workflows/python.py +94 -94
- gaia/agents/code/prompts/__init__.py +11 -11
- gaia/agents/code/prompts/base_prompt.py +77 -77
- gaia/agents/code/prompts/code_patterns.py +2036 -2036
- gaia/agents/code/prompts/nextjs_prompt.py +40 -40
- gaia/agents/code/prompts/python_prompt.py +109 -109
- gaia/agents/code/schema_inference.py +365 -365
- gaia/agents/code/system_prompt.py +41 -41
- gaia/agents/code/tools/__init__.py +42 -42
- gaia/agents/code/tools/cli_tools.py +1138 -1138
- gaia/agents/code/tools/code_formatting.py +319 -319
- gaia/agents/code/tools/code_tools.py +769 -769
- gaia/agents/code/tools/error_fixing.py +1347 -1347
- gaia/agents/code/tools/external_tools.py +180 -180
- gaia/agents/code/tools/file_io.py +845 -845
- gaia/agents/code/tools/prisma_tools.py +190 -190
- gaia/agents/code/tools/project_management.py +1016 -1016
- gaia/agents/code/tools/testing.py +321 -321
- gaia/agents/code/tools/typescript_tools.py +122 -122
- gaia/agents/code/tools/validation_parsing.py +461 -461
- gaia/agents/code/tools/validation_tools.py +806 -806
- gaia/agents/code/tools/web_dev_tools.py +1758 -1758
- gaia/agents/code/validators/__init__.py +16 -16
- gaia/agents/code/validators/antipattern_checker.py +241 -241
- gaia/agents/code/validators/ast_analyzer.py +197 -197
- gaia/agents/code/validators/requirements_validator.py +145 -145
- gaia/agents/code/validators/syntax_validator.py +171 -171
- gaia/agents/docker/__init__.py +7 -7
- gaia/agents/docker/agent.py +642 -642
- gaia/agents/emr/__init__.py +8 -8
- gaia/agents/emr/agent.py +1506 -1506
- gaia/agents/emr/cli.py +1322 -1322
- gaia/agents/emr/constants.py +475 -475
- gaia/agents/emr/dashboard/__init__.py +4 -4
- gaia/agents/emr/dashboard/server.py +1974 -1974
- gaia/agents/jira/__init__.py +11 -11
- gaia/agents/jira/agent.py +894 -894
- gaia/agents/jira/jql_templates.py +299 -299
- gaia/agents/routing/__init__.py +7 -7
- gaia/agents/routing/agent.py +567 -570
- gaia/agents/routing/system_prompt.py +75 -75
- gaia/agents/summarize/__init__.py +11 -0
- gaia/agents/summarize/agent.py +885 -0
- gaia/agents/summarize/prompts.py +129 -0
- gaia/api/__init__.py +23 -23
- gaia/api/agent_registry.py +238 -238
- gaia/api/app.py +305 -305
- gaia/api/openai_server.py +575 -575
- gaia/api/schemas.py +186 -186
- gaia/api/sse_handler.py +373 -373
- gaia/apps/__init__.py +4 -4
- gaia/apps/llm/__init__.py +6 -6
- gaia/apps/llm/app.py +173 -169
- gaia/apps/summarize/app.py +116 -633
- gaia/apps/summarize/html_viewer.py +133 -133
- gaia/apps/summarize/pdf_formatter.py +284 -284
- gaia/audio/__init__.py +2 -2
- gaia/audio/audio_client.py +439 -439
- gaia/audio/audio_recorder.py +269 -269
- gaia/audio/kokoro_tts.py +599 -599
- gaia/audio/whisper_asr.py +432 -432
- gaia/chat/__init__.py +16 -16
- gaia/chat/app.py +430 -430
- gaia/chat/prompts.py +522 -522
- gaia/chat/sdk.py +1228 -1225
- gaia/cli.py +5481 -5632
- gaia/database/__init__.py +10 -10
- gaia/database/agent.py +176 -176
- gaia/database/mixin.py +290 -290
- gaia/database/testing.py +64 -64
- gaia/eval/batch_experiment.py +2332 -2332
- gaia/eval/claude.py +542 -542
- gaia/eval/config.py +37 -37
- gaia/eval/email_generator.py +512 -512
- gaia/eval/eval.py +3179 -3179
- gaia/eval/groundtruth.py +1130 -1130
- gaia/eval/transcript_generator.py +582 -582
- gaia/eval/webapp/README.md +167 -167
- gaia/eval/webapp/package-lock.json +875 -875
- gaia/eval/webapp/package.json +20 -20
- gaia/eval/webapp/public/app.js +3402 -3402
- gaia/eval/webapp/public/index.html +87 -87
- gaia/eval/webapp/public/styles.css +3661 -3661
- gaia/eval/webapp/server.js +415 -415
- gaia/eval/webapp/test-setup.js +72 -72
- gaia/llm/__init__.py +9 -2
- gaia/llm/base_client.py +60 -0
- gaia/llm/exceptions.py +12 -0
- gaia/llm/factory.py +70 -0
- gaia/llm/lemonade_client.py +3236 -3221
- gaia/llm/lemonade_manager.py +294 -294
- gaia/llm/providers/__init__.py +9 -0
- gaia/llm/providers/claude.py +108 -0
- gaia/llm/providers/lemonade.py +120 -0
- gaia/llm/providers/openai_provider.py +79 -0
- gaia/llm/vlm_client.py +382 -382
- gaia/logger.py +189 -189
- gaia/mcp/agent_mcp_server.py +245 -245
- gaia/mcp/blender_mcp_client.py +138 -138
- gaia/mcp/blender_mcp_server.py +648 -648
- gaia/mcp/context7_cache.py +332 -332
- gaia/mcp/external_services.py +518 -518
- gaia/mcp/mcp_bridge.py +811 -550
- gaia/mcp/servers/__init__.py +6 -6
- gaia/mcp/servers/docker_mcp.py +83 -83
- gaia/perf_analysis.py +361 -0
- gaia/rag/__init__.py +10 -10
- gaia/rag/app.py +293 -293
- gaia/rag/demo.py +304 -304
- gaia/rag/pdf_utils.py +235 -235
- gaia/rag/sdk.py +2194 -2194
- gaia/security.py +163 -163
- gaia/talk/app.py +289 -289
- gaia/talk/sdk.py +538 -538
- gaia/testing/__init__.py +87 -87
- gaia/testing/assertions.py +330 -330
- gaia/testing/fixtures.py +333 -333
- gaia/testing/mocks.py +493 -493
- gaia/util.py +46 -46
- gaia/utils/__init__.py +33 -33
- gaia/utils/file_watcher.py +675 -675
- gaia/utils/parsing.py +223 -223
- gaia/version.py +100 -100
- amd_gaia-0.15.0.dist-info/RECORD +0 -168
- gaia/agents/code/app.py +0 -266
- gaia/llm/llm_client.py +0 -723
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.1.dist-info}/WHEEL +0 -0
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.1.dist-info}/top_level.txt +0 -0
gaia/talk/app.py
CHANGED
|
@@ -1,289 +1,289 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
3
|
-
# SPDX-License-Identifier: MIT
|
|
4
|
-
|
|
5
|
-
"""
|
|
6
|
-
Gaia Talk SDK Demo Application
|
|
7
|
-
|
|
8
|
-
This demonstrates various ways to use the TalkSDK for integrating
|
|
9
|
-
voice and text chat capabilities into your applications.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import argparse
|
|
13
|
-
import asyncio
|
|
14
|
-
import sys
|
|
15
|
-
|
|
16
|
-
from gaia.talk.sdk import SimpleTalk, TalkConfig, TalkSDK, quick_chat
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
async def demo_text_chat():
|
|
20
|
-
"""Demo basic text chat functionality."""
|
|
21
|
-
print("=== Text Chat Demo ===")
|
|
22
|
-
|
|
23
|
-
config = TalkConfig(
|
|
24
|
-
enable_tts=False, # Disable TTS for text-only demo
|
|
25
|
-
show_stats=True,
|
|
26
|
-
logging_level="INFO",
|
|
27
|
-
)
|
|
28
|
-
talk = TalkSDK(config)
|
|
29
|
-
|
|
30
|
-
# Simple chat
|
|
31
|
-
print("User: Hello! Can you tell me a short joke?")
|
|
32
|
-
response = await talk.chat("Hello! Can you tell me a short joke?")
|
|
33
|
-
print(f"AI: {response.text}")
|
|
34
|
-
if response.stats:
|
|
35
|
-
print(f"Stats: {response.stats}")
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
async def demo_streaming_chat():
|
|
39
|
-
"""Demo streaming text chat functionality."""
|
|
40
|
-
print("\n=== Streaming Chat Demo ===")
|
|
41
|
-
|
|
42
|
-
config = TalkConfig(enable_tts=False, show_stats=True, logging_level="INFO")
|
|
43
|
-
talk = TalkSDK(config)
|
|
44
|
-
|
|
45
|
-
# Streaming chat
|
|
46
|
-
print("User: Tell me a very short story")
|
|
47
|
-
print("AI: ", end="", flush=True)
|
|
48
|
-
async for chunk in talk.chat_stream("Tell me a very short story"):
|
|
49
|
-
if not chunk.is_complete:
|
|
50
|
-
print(chunk.text, end="", flush=True)
|
|
51
|
-
else:
|
|
52
|
-
print() # New line at the end
|
|
53
|
-
if chunk.stats:
|
|
54
|
-
print(f"Stats: {chunk.stats}")
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
async def demo_voice_chat():
|
|
58
|
-
"""Demo voice chat functionality."""
|
|
59
|
-
print("\n=== Voice Chat Demo ===")
|
|
60
|
-
|
|
61
|
-
config = TalkConfig(enable_tts=True, show_stats=True, logging_level="INFO")
|
|
62
|
-
talk = TalkSDK(config)
|
|
63
|
-
|
|
64
|
-
def on_voice_input(text: str):
|
|
65
|
-
print(f"You said: {text}")
|
|
66
|
-
|
|
67
|
-
print("Starting voice chat... Say 'stop' to quit or press Ctrl+C")
|
|
68
|
-
await talk.start_voice_session(on_voice_input)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
async def demo_simple_api():
|
|
72
|
-
"""Demo the SimpleTalk API."""
|
|
73
|
-
print("\n=== Simple API Demo ===")
|
|
74
|
-
|
|
75
|
-
talk = SimpleTalk(enable_tts=False)
|
|
76
|
-
|
|
77
|
-
# Simple question
|
|
78
|
-
print("User: What's 2+2?")
|
|
79
|
-
response = await talk.ask("What's 2+2?")
|
|
80
|
-
print(f"AI: {response}")
|
|
81
|
-
|
|
82
|
-
# Streaming response
|
|
83
|
-
print("User: Count from 1 to 5")
|
|
84
|
-
print("AI: ", end="", flush=True)
|
|
85
|
-
async for chunk in talk.ask_stream("Count from 1 to 5"):
|
|
86
|
-
print(chunk, end="", flush=True)
|
|
87
|
-
print() # New line
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
async def demo_quick_functions():
|
|
91
|
-
"""Demo convenience functions."""
|
|
92
|
-
print("\n=== Quick Functions Demo ===")
|
|
93
|
-
|
|
94
|
-
print("User: Hello! How are you?")
|
|
95
|
-
response = await quick_chat("Hello! How are you?")
|
|
96
|
-
print(f"AI: {response}")
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
async def demo_configuration():
|
|
100
|
-
"""Demo configuration options."""
|
|
101
|
-
print("\n=== Configuration Demo ===")
|
|
102
|
-
|
|
103
|
-
# Custom system prompt
|
|
104
|
-
config = TalkConfig(
|
|
105
|
-
system_prompt="You are a helpful assistant that always responds in a friendly, enthusiastic way!",
|
|
106
|
-
enable_tts=False,
|
|
107
|
-
show_stats=True,
|
|
108
|
-
)
|
|
109
|
-
talk = TalkSDK(config)
|
|
110
|
-
|
|
111
|
-
print("User: How are you today?")
|
|
112
|
-
response = await talk.chat("How are you today?")
|
|
113
|
-
print(f"AI: {response.text}")
|
|
114
|
-
|
|
115
|
-
# Update configuration dynamically
|
|
116
|
-
talk.update_config(system_prompt="You are now a serious, professional assistant.")
|
|
117
|
-
|
|
118
|
-
print("User: How are you today? (after config change)")
|
|
119
|
-
response = await talk.chat("How are you today?")
|
|
120
|
-
print(f"AI: {response.text}")
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
def print_integration_examples():
|
|
124
|
-
"""Print example code for integration."""
|
|
125
|
-
print("\n" + "=" * 60)
|
|
126
|
-
print("INTEGRATION EXAMPLES")
|
|
127
|
-
print("=" * 60)
|
|
128
|
-
|
|
129
|
-
print(
|
|
130
|
-
"""
|
|
131
|
-
Basic Integration:
|
|
132
|
-
```python
|
|
133
|
-
from gaia.talk.sdk import TalkSDK, TalkConfig
|
|
134
|
-
|
|
135
|
-
# Create SDK instance
|
|
136
|
-
config = TalkConfig(enable_tts=True, show_stats=True)
|
|
137
|
-
talk = TalkSDK(config)
|
|
138
|
-
|
|
139
|
-
# Text chat
|
|
140
|
-
response = await talk.chat("Hello!")
|
|
141
|
-
print(response.text)
|
|
142
|
-
|
|
143
|
-
# Streaming chat
|
|
144
|
-
async for chunk in talk.chat_stream("Tell me a story"):
|
|
145
|
-
print(chunk.text, end="", flush=True)
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Simple Integration:
|
|
149
|
-
```python
|
|
150
|
-
from gaia.talk.sdk import SimpleTalk
|
|
151
|
-
|
|
152
|
-
talk = SimpleTalk()
|
|
153
|
-
response = await talk.ask("What's the weather?")
|
|
154
|
-
print(response)
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
Voice Chat Integration:
|
|
158
|
-
```python
|
|
159
|
-
from gaia.talk.sdk import TalkSDK, TalkConfig
|
|
160
|
-
|
|
161
|
-
config = TalkConfig(enable_tts=True)
|
|
162
|
-
talk = TalkSDK(config)
|
|
163
|
-
|
|
164
|
-
def on_voice_input(text):
|
|
165
|
-
print(f"User: {text}")
|
|
166
|
-
|
|
167
|
-
await talk.start_voice_session(on_voice_input)
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Quick One-off Usage:
|
|
171
|
-
```python
|
|
172
|
-
from gaia.talk.sdk import quick_chat
|
|
173
|
-
|
|
174
|
-
response = await quick_chat("Hello!")
|
|
175
|
-
print(response)
|
|
176
|
-
```
|
|
177
|
-
"""
|
|
178
|
-
)
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
async def main():
|
|
182
|
-
"""Main entry point for the Talk SDK demo application."""
|
|
183
|
-
parser = argparse.ArgumentParser(
|
|
184
|
-
description="Gaia Talk SDK Demo - Examples of voice and text chat integration",
|
|
185
|
-
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
186
|
-
epilog="""
|
|
187
|
-
Demo Types:
|
|
188
|
-
text - Basic text chat demo
|
|
189
|
-
stream - Streaming text chat demo
|
|
190
|
-
voice - Voice chat demo with TTS/ASR
|
|
191
|
-
simple - SimpleTalk API demo
|
|
192
|
-
quick - Quick functions demo
|
|
193
|
-
config - Configuration options demo
|
|
194
|
-
all - Run all demos sequentially
|
|
195
|
-
examples - Show integration code examples only
|
|
196
|
-
""",
|
|
197
|
-
)
|
|
198
|
-
|
|
199
|
-
parser.add_argument(
|
|
200
|
-
"demo",
|
|
201
|
-
nargs="?",
|
|
202
|
-
default="text",
|
|
203
|
-
choices=[
|
|
204
|
-
"text",
|
|
205
|
-
"stream",
|
|
206
|
-
"voice",
|
|
207
|
-
"simple",
|
|
208
|
-
"quick",
|
|
209
|
-
"config",
|
|
210
|
-
"all",
|
|
211
|
-
"examples",
|
|
212
|
-
],
|
|
213
|
-
help="Type of demo to run (default: text)",
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
# Configuration options for demos
|
|
217
|
-
parser.add_argument("--system-prompt", help="Custom system prompt for the AI")
|
|
218
|
-
parser.add_argument(
|
|
219
|
-
"--no-tts", action="store_true", help="Disable text-to-speech (for voice demo)"
|
|
220
|
-
)
|
|
221
|
-
parser.add_argument(
|
|
222
|
-
"--verbose", "-v", action="store_true", help="Enable verbose logging"
|
|
223
|
-
)
|
|
224
|
-
|
|
225
|
-
args = parser.parse_args()
|
|
226
|
-
|
|
227
|
-
# Show just examples
|
|
228
|
-
if args.demo == "examples":
|
|
229
|
-
print_integration_examples()
|
|
230
|
-
return
|
|
231
|
-
|
|
232
|
-
print("🤖 Gaia Talk SDK Demo")
|
|
233
|
-
print("=" * 50)
|
|
234
|
-
|
|
235
|
-
try:
|
|
236
|
-
if args.demo == "all":
|
|
237
|
-
# Run all demos
|
|
238
|
-
await demo_text_chat()
|
|
239
|
-
await demo_streaming_chat()
|
|
240
|
-
await demo_simple_api()
|
|
241
|
-
await demo_quick_functions()
|
|
242
|
-
await demo_configuration()
|
|
243
|
-
print_integration_examples()
|
|
244
|
-
|
|
245
|
-
# Ask user if they want to try voice demo
|
|
246
|
-
try:
|
|
247
|
-
choice = input(
|
|
248
|
-
"\nWould you like to try the voice chat demo? (y/N): "
|
|
249
|
-
).lower()
|
|
250
|
-
if choice.startswith("y"):
|
|
251
|
-
await demo_voice_chat()
|
|
252
|
-
except KeyboardInterrupt:
|
|
253
|
-
print("\nSkipping voice demo...")
|
|
254
|
-
|
|
255
|
-
elif args.demo == "text":
|
|
256
|
-
await demo_text_chat()
|
|
257
|
-
elif args.demo == "stream":
|
|
258
|
-
await demo_streaming_chat()
|
|
259
|
-
elif args.demo == "voice":
|
|
260
|
-
await demo_voice_chat()
|
|
261
|
-
elif args.demo == "simple":
|
|
262
|
-
await demo_simple_api()
|
|
263
|
-
elif args.demo == "quick":
|
|
264
|
-
await demo_quick_functions()
|
|
265
|
-
elif args.demo == "config":
|
|
266
|
-
await demo_configuration()
|
|
267
|
-
|
|
268
|
-
# Always show integration examples at the end
|
|
269
|
-
if args.demo != "voice": # Voice demo already shows examples
|
|
270
|
-
print_integration_examples()
|
|
271
|
-
|
|
272
|
-
except KeyboardInterrupt:
|
|
273
|
-
print("\n\nDemo interrupted. Goodbye!")
|
|
274
|
-
except Exception as e:
|
|
275
|
-
print(f"\n❌ Error: {e}")
|
|
276
|
-
if args.verbose:
|
|
277
|
-
import traceback
|
|
278
|
-
|
|
279
|
-
traceback.print_exc()
|
|
280
|
-
sys.exit(1)
|
|
281
|
-
|
|
282
|
-
print("\n✅ Demo completed successfully!")
|
|
283
|
-
print("\nTo integrate TalkSDK into your app:")
|
|
284
|
-
print(" from gaia.talk.sdk import TalkSDK, TalkConfig")
|
|
285
|
-
print("\nFor more examples, run: python app.py examples")
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
if __name__ == "__main__":
|
|
289
|
-
asyncio.run(main())
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# Copyright(C) 2024-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
3
|
+
# SPDX-License-Identifier: MIT
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Gaia Talk SDK Demo Application
|
|
7
|
+
|
|
8
|
+
This demonstrates various ways to use the TalkSDK for integrating
|
|
9
|
+
voice and text chat capabilities into your applications.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import asyncio
|
|
14
|
+
import sys
|
|
15
|
+
|
|
16
|
+
from gaia.talk.sdk import SimpleTalk, TalkConfig, TalkSDK, quick_chat
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
async def demo_text_chat():
|
|
20
|
+
"""Demo basic text chat functionality."""
|
|
21
|
+
print("=== Text Chat Demo ===")
|
|
22
|
+
|
|
23
|
+
config = TalkConfig(
|
|
24
|
+
enable_tts=False, # Disable TTS for text-only demo
|
|
25
|
+
show_stats=True,
|
|
26
|
+
logging_level="INFO",
|
|
27
|
+
)
|
|
28
|
+
talk = TalkSDK(config)
|
|
29
|
+
|
|
30
|
+
# Simple chat
|
|
31
|
+
print("User: Hello! Can you tell me a short joke?")
|
|
32
|
+
response = await talk.chat("Hello! Can you tell me a short joke?")
|
|
33
|
+
print(f"AI: {response.text}")
|
|
34
|
+
if response.stats:
|
|
35
|
+
print(f"Stats: {response.stats}")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
async def demo_streaming_chat():
|
|
39
|
+
"""Demo streaming text chat functionality."""
|
|
40
|
+
print("\n=== Streaming Chat Demo ===")
|
|
41
|
+
|
|
42
|
+
config = TalkConfig(enable_tts=False, show_stats=True, logging_level="INFO")
|
|
43
|
+
talk = TalkSDK(config)
|
|
44
|
+
|
|
45
|
+
# Streaming chat
|
|
46
|
+
print("User: Tell me a very short story")
|
|
47
|
+
print("AI: ", end="", flush=True)
|
|
48
|
+
async for chunk in talk.chat_stream("Tell me a very short story"):
|
|
49
|
+
if not chunk.is_complete:
|
|
50
|
+
print(chunk.text, end="", flush=True)
|
|
51
|
+
else:
|
|
52
|
+
print() # New line at the end
|
|
53
|
+
if chunk.stats:
|
|
54
|
+
print(f"Stats: {chunk.stats}")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
async def demo_voice_chat():
|
|
58
|
+
"""Demo voice chat functionality."""
|
|
59
|
+
print("\n=== Voice Chat Demo ===")
|
|
60
|
+
|
|
61
|
+
config = TalkConfig(enable_tts=True, show_stats=True, logging_level="INFO")
|
|
62
|
+
talk = TalkSDK(config)
|
|
63
|
+
|
|
64
|
+
def on_voice_input(text: str):
|
|
65
|
+
print(f"You said: {text}")
|
|
66
|
+
|
|
67
|
+
print("Starting voice chat... Say 'stop' to quit or press Ctrl+C")
|
|
68
|
+
await talk.start_voice_session(on_voice_input)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
async def demo_simple_api():
|
|
72
|
+
"""Demo the SimpleTalk API."""
|
|
73
|
+
print("\n=== Simple API Demo ===")
|
|
74
|
+
|
|
75
|
+
talk = SimpleTalk(enable_tts=False)
|
|
76
|
+
|
|
77
|
+
# Simple question
|
|
78
|
+
print("User: What's 2+2?")
|
|
79
|
+
response = await talk.ask("What's 2+2?")
|
|
80
|
+
print(f"AI: {response}")
|
|
81
|
+
|
|
82
|
+
# Streaming response
|
|
83
|
+
print("User: Count from 1 to 5")
|
|
84
|
+
print("AI: ", end="", flush=True)
|
|
85
|
+
async for chunk in talk.ask_stream("Count from 1 to 5"):
|
|
86
|
+
print(chunk, end="", flush=True)
|
|
87
|
+
print() # New line
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async def demo_quick_functions():
|
|
91
|
+
"""Demo convenience functions."""
|
|
92
|
+
print("\n=== Quick Functions Demo ===")
|
|
93
|
+
|
|
94
|
+
print("User: Hello! How are you?")
|
|
95
|
+
response = await quick_chat("Hello! How are you?")
|
|
96
|
+
print(f"AI: {response}")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
async def demo_configuration():
|
|
100
|
+
"""Demo configuration options."""
|
|
101
|
+
print("\n=== Configuration Demo ===")
|
|
102
|
+
|
|
103
|
+
# Custom system prompt
|
|
104
|
+
config = TalkConfig(
|
|
105
|
+
system_prompt="You are a helpful assistant that always responds in a friendly, enthusiastic way!",
|
|
106
|
+
enable_tts=False,
|
|
107
|
+
show_stats=True,
|
|
108
|
+
)
|
|
109
|
+
talk = TalkSDK(config)
|
|
110
|
+
|
|
111
|
+
print("User: How are you today?")
|
|
112
|
+
response = await talk.chat("How are you today?")
|
|
113
|
+
print(f"AI: {response.text}")
|
|
114
|
+
|
|
115
|
+
# Update configuration dynamically
|
|
116
|
+
talk.update_config(system_prompt="You are now a serious, professional assistant.")
|
|
117
|
+
|
|
118
|
+
print("User: How are you today? (after config change)")
|
|
119
|
+
response = await talk.chat("How are you today?")
|
|
120
|
+
print(f"AI: {response.text}")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def print_integration_examples():
|
|
124
|
+
"""Print example code for integration."""
|
|
125
|
+
print("\n" + "=" * 60)
|
|
126
|
+
print("INTEGRATION EXAMPLES")
|
|
127
|
+
print("=" * 60)
|
|
128
|
+
|
|
129
|
+
print(
|
|
130
|
+
"""
|
|
131
|
+
Basic Integration:
|
|
132
|
+
```python
|
|
133
|
+
from gaia.talk.sdk import TalkSDK, TalkConfig
|
|
134
|
+
|
|
135
|
+
# Create SDK instance
|
|
136
|
+
config = TalkConfig(enable_tts=True, show_stats=True)
|
|
137
|
+
talk = TalkSDK(config)
|
|
138
|
+
|
|
139
|
+
# Text chat
|
|
140
|
+
response = await talk.chat("Hello!")
|
|
141
|
+
print(response.text)
|
|
142
|
+
|
|
143
|
+
# Streaming chat
|
|
144
|
+
async for chunk in talk.chat_stream("Tell me a story"):
|
|
145
|
+
print(chunk.text, end="", flush=True)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Simple Integration:
|
|
149
|
+
```python
|
|
150
|
+
from gaia.talk.sdk import SimpleTalk
|
|
151
|
+
|
|
152
|
+
talk = SimpleTalk()
|
|
153
|
+
response = await talk.ask("What's the weather?")
|
|
154
|
+
print(response)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Voice Chat Integration:
|
|
158
|
+
```python
|
|
159
|
+
from gaia.talk.sdk import TalkSDK, TalkConfig
|
|
160
|
+
|
|
161
|
+
config = TalkConfig(enable_tts=True)
|
|
162
|
+
talk = TalkSDK(config)
|
|
163
|
+
|
|
164
|
+
def on_voice_input(text):
|
|
165
|
+
print(f"User: {text}")
|
|
166
|
+
|
|
167
|
+
await talk.start_voice_session(on_voice_input)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Quick One-off Usage:
|
|
171
|
+
```python
|
|
172
|
+
from gaia.talk.sdk import quick_chat
|
|
173
|
+
|
|
174
|
+
response = await quick_chat("Hello!")
|
|
175
|
+
print(response)
|
|
176
|
+
```
|
|
177
|
+
"""
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
async def main():
|
|
182
|
+
"""Main entry point for the Talk SDK demo application."""
|
|
183
|
+
parser = argparse.ArgumentParser(
|
|
184
|
+
description="Gaia Talk SDK Demo - Examples of voice and text chat integration",
|
|
185
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
186
|
+
epilog="""
|
|
187
|
+
Demo Types:
|
|
188
|
+
text - Basic text chat demo
|
|
189
|
+
stream - Streaming text chat demo
|
|
190
|
+
voice - Voice chat demo with TTS/ASR
|
|
191
|
+
simple - SimpleTalk API demo
|
|
192
|
+
quick - Quick functions demo
|
|
193
|
+
config - Configuration options demo
|
|
194
|
+
all - Run all demos sequentially
|
|
195
|
+
examples - Show integration code examples only
|
|
196
|
+
""",
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
parser.add_argument(
|
|
200
|
+
"demo",
|
|
201
|
+
nargs="?",
|
|
202
|
+
default="text",
|
|
203
|
+
choices=[
|
|
204
|
+
"text",
|
|
205
|
+
"stream",
|
|
206
|
+
"voice",
|
|
207
|
+
"simple",
|
|
208
|
+
"quick",
|
|
209
|
+
"config",
|
|
210
|
+
"all",
|
|
211
|
+
"examples",
|
|
212
|
+
],
|
|
213
|
+
help="Type of demo to run (default: text)",
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# Configuration options for demos
|
|
217
|
+
parser.add_argument("--system-prompt", help="Custom system prompt for the AI")
|
|
218
|
+
parser.add_argument(
|
|
219
|
+
"--no-tts", action="store_true", help="Disable text-to-speech (for voice demo)"
|
|
220
|
+
)
|
|
221
|
+
parser.add_argument(
|
|
222
|
+
"--verbose", "-v", action="store_true", help="Enable verbose logging"
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
args = parser.parse_args()
|
|
226
|
+
|
|
227
|
+
# Show just examples
|
|
228
|
+
if args.demo == "examples":
|
|
229
|
+
print_integration_examples()
|
|
230
|
+
return
|
|
231
|
+
|
|
232
|
+
print("🤖 Gaia Talk SDK Demo")
|
|
233
|
+
print("=" * 50)
|
|
234
|
+
|
|
235
|
+
try:
|
|
236
|
+
if args.demo == "all":
|
|
237
|
+
# Run all demos
|
|
238
|
+
await demo_text_chat()
|
|
239
|
+
await demo_streaming_chat()
|
|
240
|
+
await demo_simple_api()
|
|
241
|
+
await demo_quick_functions()
|
|
242
|
+
await demo_configuration()
|
|
243
|
+
print_integration_examples()
|
|
244
|
+
|
|
245
|
+
# Ask user if they want to try voice demo
|
|
246
|
+
try:
|
|
247
|
+
choice = input(
|
|
248
|
+
"\nWould you like to try the voice chat demo? (y/N): "
|
|
249
|
+
).lower()
|
|
250
|
+
if choice.startswith("y"):
|
|
251
|
+
await demo_voice_chat()
|
|
252
|
+
except KeyboardInterrupt:
|
|
253
|
+
print("\nSkipping voice demo...")
|
|
254
|
+
|
|
255
|
+
elif args.demo == "text":
|
|
256
|
+
await demo_text_chat()
|
|
257
|
+
elif args.demo == "stream":
|
|
258
|
+
await demo_streaming_chat()
|
|
259
|
+
elif args.demo == "voice":
|
|
260
|
+
await demo_voice_chat()
|
|
261
|
+
elif args.demo == "simple":
|
|
262
|
+
await demo_simple_api()
|
|
263
|
+
elif args.demo == "quick":
|
|
264
|
+
await demo_quick_functions()
|
|
265
|
+
elif args.demo == "config":
|
|
266
|
+
await demo_configuration()
|
|
267
|
+
|
|
268
|
+
# Always show integration examples at the end
|
|
269
|
+
if args.demo != "voice": # Voice demo already shows examples
|
|
270
|
+
print_integration_examples()
|
|
271
|
+
|
|
272
|
+
except KeyboardInterrupt:
|
|
273
|
+
print("\n\nDemo interrupted. Goodbye!")
|
|
274
|
+
except Exception as e:
|
|
275
|
+
print(f"\n❌ Error: {e}")
|
|
276
|
+
if args.verbose:
|
|
277
|
+
import traceback
|
|
278
|
+
|
|
279
|
+
traceback.print_exc()
|
|
280
|
+
sys.exit(1)
|
|
281
|
+
|
|
282
|
+
print("\n✅ Demo completed successfully!")
|
|
283
|
+
print("\nTo integrate TalkSDK into your app:")
|
|
284
|
+
print(" from gaia.talk.sdk import TalkSDK, TalkConfig")
|
|
285
|
+
print("\nFor more examples, run: python app.py examples")
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
if __name__ == "__main__":
|
|
289
|
+
asyncio.run(main())
|