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/chat/app.py
CHANGED
|
@@ -1,430 +1,430 @@
|
|
|
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 Chat SDK Demo Application
|
|
7
|
-
|
|
8
|
-
This demonstrates various ways to use the ChatSDK for integrating
|
|
9
|
-
text chat capabilities with conversation history into your applications.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import argparse
|
|
13
|
-
import asyncio
|
|
14
|
-
import sys
|
|
15
|
-
|
|
16
|
-
from gaia.chat.sdk import (
|
|
17
|
-
ChatConfig,
|
|
18
|
-
ChatSDK,
|
|
19
|
-
ChatSession,
|
|
20
|
-
SimpleChat,
|
|
21
|
-
quick_chat,
|
|
22
|
-
quick_chat_with_memory,
|
|
23
|
-
)
|
|
24
|
-
from gaia.llm.lemonade_client import DEFAULT_MODEL_NAME
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
async def demo_basic_chat():
|
|
28
|
-
"""Demo basic chat functionality with conversation memory."""
|
|
29
|
-
print("=== Basic Chat Demo ===")
|
|
30
|
-
|
|
31
|
-
config = ChatConfig(
|
|
32
|
-
model=DEFAULT_MODEL_NAME,
|
|
33
|
-
assistant_name="Gaia", # Custom assistant name
|
|
34
|
-
show_stats=True,
|
|
35
|
-
max_history_length=3, # Keep 3 conversation pairs
|
|
36
|
-
logging_level="INFO",
|
|
37
|
-
)
|
|
38
|
-
chat = ChatSDK(config)
|
|
39
|
-
|
|
40
|
-
# Multi-turn conversation
|
|
41
|
-
messages = [
|
|
42
|
-
"Hello! My name is Alex and I'm a software developer.",
|
|
43
|
-
"What's my name?",
|
|
44
|
-
"What's my profession?",
|
|
45
|
-
"Can you write a simple Python function?",
|
|
46
|
-
]
|
|
47
|
-
|
|
48
|
-
for i, message in enumerate(messages, 1):
|
|
49
|
-
print(f"\nTurn {i}")
|
|
50
|
-
print(f"User: {message}")
|
|
51
|
-
response = chat.send(message)
|
|
52
|
-
print(f"Gaia: {response.text}")
|
|
53
|
-
|
|
54
|
-
if response.stats and i == len(messages): # Show stats on last message
|
|
55
|
-
print(f"Stats: {response.stats}")
|
|
56
|
-
|
|
57
|
-
print(f"\nConversation pairs in memory: {chat.conversation_pairs}")
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
async def demo_streaming_chat():
|
|
61
|
-
"""Demo streaming chat functionality."""
|
|
62
|
-
print("\n=== Streaming Chat Demo ===")
|
|
63
|
-
|
|
64
|
-
config = ChatConfig(
|
|
65
|
-
model=DEFAULT_MODEL_NAME,
|
|
66
|
-
assistant_name="StreamBot",
|
|
67
|
-
show_stats=True,
|
|
68
|
-
)
|
|
69
|
-
chat = ChatSDK(config)
|
|
70
|
-
|
|
71
|
-
# First establish context
|
|
72
|
-
chat.send("I'm learning about AI and machine learning.")
|
|
73
|
-
|
|
74
|
-
print(
|
|
75
|
-
"User: Can you explain neural networks in simple terms, based on what you know about my interests?"
|
|
76
|
-
)
|
|
77
|
-
print("StreamBot: ", end="", flush=True)
|
|
78
|
-
|
|
79
|
-
for chunk in chat.send_stream(
|
|
80
|
-
"Can you explain neural networks in simple terms, based on what you know about my interests?"
|
|
81
|
-
):
|
|
82
|
-
if not chunk.is_complete:
|
|
83
|
-
print(chunk.text, end="", flush=True)
|
|
84
|
-
else:
|
|
85
|
-
print() # New line at the end
|
|
86
|
-
if chunk.stats:
|
|
87
|
-
print(f"Stats: {chunk.stats}")
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
async def demo_simple_chat():
|
|
91
|
-
"""Demo the SimpleChat API."""
|
|
92
|
-
print("\n=== Simple Chat Demo ===")
|
|
93
|
-
|
|
94
|
-
# Show both default and custom assistant names
|
|
95
|
-
print("--- Default Assistant Name ---")
|
|
96
|
-
chat1 = SimpleChat(system_prompt="You are a helpful programming assistant.")
|
|
97
|
-
print("User: I'm working on a Python project")
|
|
98
|
-
response1 = chat1.ask("I'm working on a Python project")
|
|
99
|
-
print(f"Assistant: {response1}")
|
|
100
|
-
|
|
101
|
-
print("\n--- Custom Assistant Name ---")
|
|
102
|
-
chat2 = SimpleChat(
|
|
103
|
-
system_prompt="You are a helpful programming assistant.",
|
|
104
|
-
assistant_name="CodeHelper",
|
|
105
|
-
)
|
|
106
|
-
print("User: Can you help me with error handling?")
|
|
107
|
-
response2 = chat2.ask("Can you help me with error handling?")
|
|
108
|
-
print(f"CodeHelper: {response2}")
|
|
109
|
-
|
|
110
|
-
# Show conversation history
|
|
111
|
-
conversation = chat2.get_conversation()
|
|
112
|
-
print(f"\nConversation history: {len(conversation)} entries")
|
|
113
|
-
if conversation:
|
|
114
|
-
print("Sample entry:", conversation[0])
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
async def demo_chat_sessions():
|
|
118
|
-
"""Demo session-based chat management."""
|
|
119
|
-
print("\n=== Chat Sessions Demo ===")
|
|
120
|
-
|
|
121
|
-
# Create session manager
|
|
122
|
-
sessions = ChatSession()
|
|
123
|
-
|
|
124
|
-
# Create different themed sessions with custom assistant names
|
|
125
|
-
work_chat = sessions.create_session(
|
|
126
|
-
"work",
|
|
127
|
-
system_prompt="You are a professional business assistant.",
|
|
128
|
-
assistant_name="WorkBot",
|
|
129
|
-
max_history_length=2,
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
casual_chat = sessions.create_session(
|
|
133
|
-
"casual",
|
|
134
|
-
system_prompt="You are a friendly, casual conversation partner.",
|
|
135
|
-
assistant_name="Buddy",
|
|
136
|
-
max_history_length=2,
|
|
137
|
-
)
|
|
138
|
-
|
|
139
|
-
# Chat in work context
|
|
140
|
-
print("=== Work Session ===")
|
|
141
|
-
print("User: I need to write a project proposal")
|
|
142
|
-
work_response = work_chat.send("I need to write a project proposal")
|
|
143
|
-
print(f"WorkBot: {work_response.text}")
|
|
144
|
-
|
|
145
|
-
# Chat in casual context
|
|
146
|
-
print("\n=== Casual Session ===")
|
|
147
|
-
print("User: I need to write a project proposal")
|
|
148
|
-
casual_response = casual_chat.send("I need to write a project proposal")
|
|
149
|
-
print(f"Buddy: {casual_response.text}")
|
|
150
|
-
|
|
151
|
-
print(f"\nActive sessions: {sessions.list_sessions()}")
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
async def demo_quick_functions():
|
|
155
|
-
"""Demo convenience functions."""
|
|
156
|
-
print("\n=== Quick Functions Demo ===")
|
|
157
|
-
|
|
158
|
-
# Single message
|
|
159
|
-
print("User: What's the capital of France?")
|
|
160
|
-
response = quick_chat("What's the capital of France?")
|
|
161
|
-
print(f"AI: {response}")
|
|
162
|
-
|
|
163
|
-
# Multi-turn with memory and custom assistant name
|
|
164
|
-
print("\n=== Multi-turn Quick Chat ===")
|
|
165
|
-
messages = [
|
|
166
|
-
"I have a pet dog named Max",
|
|
167
|
-
"What's my pet's name?",
|
|
168
|
-
"What kind of animal is Max?",
|
|
169
|
-
]
|
|
170
|
-
|
|
171
|
-
responses = quick_chat_with_memory(messages, assistant_name="QuickBot")
|
|
172
|
-
for msg, resp in zip(messages, responses):
|
|
173
|
-
print(f"User: {msg}")
|
|
174
|
-
print(f"QuickBot: {resp}")
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
async def demo_configuration():
|
|
178
|
-
"""Demo configuration options."""
|
|
179
|
-
print("\n=== Configuration Demo ===")
|
|
180
|
-
|
|
181
|
-
# Create chat with custom config
|
|
182
|
-
config = ChatConfig(
|
|
183
|
-
model=DEFAULT_MODEL_NAME,
|
|
184
|
-
system_prompt="You are a helpful assistant that always responds enthusiastically!",
|
|
185
|
-
max_history_length=2,
|
|
186
|
-
show_stats=True,
|
|
187
|
-
)
|
|
188
|
-
chat = ChatSDK(config)
|
|
189
|
-
|
|
190
|
-
print("User: How are you today?")
|
|
191
|
-
response1 = chat.send("How are you today?")
|
|
192
|
-
print(f"AI: {response1.text}")
|
|
193
|
-
|
|
194
|
-
# Update configuration dynamically including assistant name
|
|
195
|
-
chat.update_config(
|
|
196
|
-
system_prompt="You are now a serious, professional assistant.",
|
|
197
|
-
assistant_name="Professional",
|
|
198
|
-
max_history_length=1,
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
print("\nUser: How are you today? (after config change)")
|
|
202
|
-
response2 = chat.send("How are you today?")
|
|
203
|
-
print(f"Professional: {response2.text}")
|
|
204
|
-
|
|
205
|
-
print(f"\nHistory length after config change: {chat.history_length}")
|
|
206
|
-
print(f"Current assistant name: {chat.config.assistant_name}")
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
def print_integration_examples():
|
|
210
|
-
"""Print example code for integration."""
|
|
211
|
-
print("\n" + "=" * 60)
|
|
212
|
-
print("INTEGRATION EXAMPLES")
|
|
213
|
-
print("=" * 60)
|
|
214
|
-
|
|
215
|
-
print(
|
|
216
|
-
"""
|
|
217
|
-
Basic Integration:
|
|
218
|
-
```python
|
|
219
|
-
from gaia.chat.sdk import ChatSDK, ChatConfig
|
|
220
|
-
|
|
221
|
-
# Create SDK instance
|
|
222
|
-
config = ChatConfig(model=DEFAULT_MODEL_NAME, show_stats=True)
|
|
223
|
-
chat = ChatSDK(config)
|
|
224
|
-
|
|
225
|
-
# Send message with conversation memory
|
|
226
|
-
response = chat.send("Hello!")
|
|
227
|
-
print(response.text)
|
|
228
|
-
|
|
229
|
-
# Streaming chat
|
|
230
|
-
for chunk in chat.send_stream("Tell me a story"):
|
|
231
|
-
print(chunk.text, end="", flush=True)
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Assistant Naming:
|
|
235
|
-
```python
|
|
236
|
-
from gaia.chat.sdk import ChatSDK, ChatConfig
|
|
237
|
-
|
|
238
|
-
# Create SDK with custom assistant name
|
|
239
|
-
config = ChatConfig(
|
|
240
|
-
model=DEFAULT_MODEL_NAME,
|
|
241
|
-
assistant_name="Gaia"
|
|
242
|
-
)
|
|
243
|
-
chat = ChatSDK(config)
|
|
244
|
-
|
|
245
|
-
response = chat.send("What's your name?")
|
|
246
|
-
print(f"Gaia: {response.text}")
|
|
247
|
-
|
|
248
|
-
# Interactive session will show "Gaia:" instead of "Assistant:"
|
|
249
|
-
await chat.start_interactive_session()
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
Simple Integration:
|
|
253
|
-
```python
|
|
254
|
-
from gaia.chat.sdk import SimpleChat
|
|
255
|
-
|
|
256
|
-
# Default assistant name
|
|
257
|
-
chat = SimpleChat()
|
|
258
|
-
response = chat.ask("What's the weather?")
|
|
259
|
-
print(response)
|
|
260
|
-
|
|
261
|
-
# Custom assistant name
|
|
262
|
-
chat = SimpleChat(assistant_name="Helper")
|
|
263
|
-
response = chat.ask("What's the weather?")
|
|
264
|
-
print(response)
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
Session Management:
|
|
268
|
-
```python
|
|
269
|
-
from gaia.chat.sdk import ChatSession
|
|
270
|
-
|
|
271
|
-
sessions = ChatSession()
|
|
272
|
-
work_chat = sessions.create_session(
|
|
273
|
-
"work",
|
|
274
|
-
system_prompt="Professional assistant",
|
|
275
|
-
assistant_name="WorkBot"
|
|
276
|
-
)
|
|
277
|
-
personal_chat = sessions.create_session(
|
|
278
|
-
"personal",
|
|
279
|
-
system_prompt="Friendly companion",
|
|
280
|
-
assistant_name="Buddy"
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
work_response = work_chat.send("Draft an email")
|
|
284
|
-
personal_response = personal_chat.send("What's for dinner?")
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
Quick One-off Usage:
|
|
288
|
-
```python
|
|
289
|
-
from gaia.chat.sdk import quick_chat, quick_chat_with_memory
|
|
290
|
-
|
|
291
|
-
# Single message with custom assistant name
|
|
292
|
-
response = quick_chat("Hello!", assistant_name="Gaia")
|
|
293
|
-
|
|
294
|
-
# Multi-turn conversation with custom assistant name
|
|
295
|
-
responses = quick_chat_with_memory([
|
|
296
|
-
"My name is John",
|
|
297
|
-
"What's my name?"
|
|
298
|
-
], assistant_name="Gaia")
|
|
299
|
-
```
|
|
300
|
-
"""
|
|
301
|
-
)
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
async def main():
|
|
305
|
-
"""Main entry point for the Chat SDK demo application."""
|
|
306
|
-
parser = argparse.ArgumentParser(
|
|
307
|
-
description="Gaia Chat SDK Demo - Examples of text chat with conversation history",
|
|
308
|
-
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
309
|
-
epilog="""
|
|
310
|
-
Demo Types:
|
|
311
|
-
basic - Basic chat with conversation memory
|
|
312
|
-
stream - Streaming chat demo
|
|
313
|
-
simple - SimpleChat API demo
|
|
314
|
-
sessions - Session management demo
|
|
315
|
-
quick - Quick functions demo
|
|
316
|
-
config - Configuration options demo
|
|
317
|
-
all - Run all demos sequentially
|
|
318
|
-
examples - Show integration code examples only
|
|
319
|
-
""",
|
|
320
|
-
)
|
|
321
|
-
|
|
322
|
-
parser.add_argument(
|
|
323
|
-
"demo",
|
|
324
|
-
nargs="?",
|
|
325
|
-
default="basic",
|
|
326
|
-
choices=[
|
|
327
|
-
"basic",
|
|
328
|
-
"stream",
|
|
329
|
-
"simple",
|
|
330
|
-
"sessions",
|
|
331
|
-
"quick",
|
|
332
|
-
"config",
|
|
333
|
-
"all",
|
|
334
|
-
"examples",
|
|
335
|
-
],
|
|
336
|
-
help="Type of demo to run (default: basic)",
|
|
337
|
-
)
|
|
338
|
-
|
|
339
|
-
# Configuration options for demos
|
|
340
|
-
parser.add_argument(
|
|
341
|
-
"--model", default=DEFAULT_MODEL_NAME, help="Model to use for demos"
|
|
342
|
-
)
|
|
343
|
-
parser.add_argument("--system-prompt", help="Custom system prompt for the AI")
|
|
344
|
-
parser.add_argument(
|
|
345
|
-
"--verbose", "-v", action="store_true", help="Enable verbose logging"
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
args = parser.parse_args()
|
|
349
|
-
|
|
350
|
-
# Show just examples
|
|
351
|
-
if args.demo == "examples":
|
|
352
|
-
print_integration_examples()
|
|
353
|
-
return
|
|
354
|
-
|
|
355
|
-
print("💬 Gaia Chat SDK Demo")
|
|
356
|
-
print("=" * 50)
|
|
357
|
-
|
|
358
|
-
try:
|
|
359
|
-
if args.demo == "all":
|
|
360
|
-
# Run all demos
|
|
361
|
-
await demo_basic_chat()
|
|
362
|
-
await demo_streaming_chat()
|
|
363
|
-
await demo_simple_chat()
|
|
364
|
-
await demo_chat_sessions()
|
|
365
|
-
await demo_quick_functions()
|
|
366
|
-
await demo_configuration()
|
|
367
|
-
print_integration_examples()
|
|
368
|
-
|
|
369
|
-
elif args.demo == "basic":
|
|
370
|
-
await demo_basic_chat()
|
|
371
|
-
elif args.demo == "stream":
|
|
372
|
-
await demo_streaming_chat()
|
|
373
|
-
elif args.demo == "simple":
|
|
374
|
-
await demo_simple_chat()
|
|
375
|
-
elif args.demo == "sessions":
|
|
376
|
-
await demo_chat_sessions()
|
|
377
|
-
elif args.demo == "quick":
|
|
378
|
-
await demo_quick_functions()
|
|
379
|
-
elif args.demo == "config":
|
|
380
|
-
await demo_configuration()
|
|
381
|
-
|
|
382
|
-
# Always show integration examples at the end
|
|
383
|
-
if args.demo != "all":
|
|
384
|
-
print_integration_examples()
|
|
385
|
-
|
|
386
|
-
except KeyboardInterrupt:
|
|
387
|
-
print("\n\nDemo interrupted. Goodbye!")
|
|
388
|
-
except Exception as e:
|
|
389
|
-
print(f"\n❌ Error: {e}")
|
|
390
|
-
if args.verbose:
|
|
391
|
-
import traceback
|
|
392
|
-
|
|
393
|
-
traceback.print_exc()
|
|
394
|
-
sys.exit(1)
|
|
395
|
-
|
|
396
|
-
print("\n✅ Demo completed successfully!")
|
|
397
|
-
print("\nTo integrate ChatSDK into your app:")
|
|
398
|
-
print(" from gaia.chat.sdk import ChatSDK, ChatConfig")
|
|
399
|
-
print("\nFor more examples, run: python app.py examples")
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
# Keep the original main function for backward compatibility with CLI
|
|
403
|
-
def cli_main(
|
|
404
|
-
message: str = None,
|
|
405
|
-
model: str = None,
|
|
406
|
-
max_tokens: int = 512,
|
|
407
|
-
system_prompt: str = None,
|
|
408
|
-
interactive: bool = False,
|
|
409
|
-
) -> str:
|
|
410
|
-
"""Main function to run the Chat app (backward compatibility)."""
|
|
411
|
-
if interactive:
|
|
412
|
-
print("Interactive mode not available in demo app.")
|
|
413
|
-
print("Use: python app.py basic")
|
|
414
|
-
return None
|
|
415
|
-
elif message:
|
|
416
|
-
# Use SimpleChat for backward compatibility
|
|
417
|
-
config = ChatConfig(
|
|
418
|
-
model=model or DEFAULT_MODEL_NAME,
|
|
419
|
-
max_tokens=max_tokens,
|
|
420
|
-
system_prompt=system_prompt,
|
|
421
|
-
)
|
|
422
|
-
chat = ChatSDK(config)
|
|
423
|
-
response = chat.send(message)
|
|
424
|
-
return response.text
|
|
425
|
-
else:
|
|
426
|
-
raise ValueError("Either message or interactive mode is required")
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
if __name__ == "__main__":
|
|
430
|
-
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 Chat SDK Demo Application
|
|
7
|
+
|
|
8
|
+
This demonstrates various ways to use the ChatSDK for integrating
|
|
9
|
+
text chat capabilities with conversation history into your applications.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import asyncio
|
|
14
|
+
import sys
|
|
15
|
+
|
|
16
|
+
from gaia.chat.sdk import (
|
|
17
|
+
ChatConfig,
|
|
18
|
+
ChatSDK,
|
|
19
|
+
ChatSession,
|
|
20
|
+
SimpleChat,
|
|
21
|
+
quick_chat,
|
|
22
|
+
quick_chat_with_memory,
|
|
23
|
+
)
|
|
24
|
+
from gaia.llm.lemonade_client import DEFAULT_MODEL_NAME
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
async def demo_basic_chat():
|
|
28
|
+
"""Demo basic chat functionality with conversation memory."""
|
|
29
|
+
print("=== Basic Chat Demo ===")
|
|
30
|
+
|
|
31
|
+
config = ChatConfig(
|
|
32
|
+
model=DEFAULT_MODEL_NAME,
|
|
33
|
+
assistant_name="Gaia", # Custom assistant name
|
|
34
|
+
show_stats=True,
|
|
35
|
+
max_history_length=3, # Keep 3 conversation pairs
|
|
36
|
+
logging_level="INFO",
|
|
37
|
+
)
|
|
38
|
+
chat = ChatSDK(config)
|
|
39
|
+
|
|
40
|
+
# Multi-turn conversation
|
|
41
|
+
messages = [
|
|
42
|
+
"Hello! My name is Alex and I'm a software developer.",
|
|
43
|
+
"What's my name?",
|
|
44
|
+
"What's my profession?",
|
|
45
|
+
"Can you write a simple Python function?",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
for i, message in enumerate(messages, 1):
|
|
49
|
+
print(f"\nTurn {i}")
|
|
50
|
+
print(f"User: {message}")
|
|
51
|
+
response = chat.send(message)
|
|
52
|
+
print(f"Gaia: {response.text}")
|
|
53
|
+
|
|
54
|
+
if response.stats and i == len(messages): # Show stats on last message
|
|
55
|
+
print(f"Stats: {response.stats}")
|
|
56
|
+
|
|
57
|
+
print(f"\nConversation pairs in memory: {chat.conversation_pairs}")
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
async def demo_streaming_chat():
|
|
61
|
+
"""Demo streaming chat functionality."""
|
|
62
|
+
print("\n=== Streaming Chat Demo ===")
|
|
63
|
+
|
|
64
|
+
config = ChatConfig(
|
|
65
|
+
model=DEFAULT_MODEL_NAME,
|
|
66
|
+
assistant_name="StreamBot",
|
|
67
|
+
show_stats=True,
|
|
68
|
+
)
|
|
69
|
+
chat = ChatSDK(config)
|
|
70
|
+
|
|
71
|
+
# First establish context
|
|
72
|
+
chat.send("I'm learning about AI and machine learning.")
|
|
73
|
+
|
|
74
|
+
print(
|
|
75
|
+
"User: Can you explain neural networks in simple terms, based on what you know about my interests?"
|
|
76
|
+
)
|
|
77
|
+
print("StreamBot: ", end="", flush=True)
|
|
78
|
+
|
|
79
|
+
for chunk in chat.send_stream(
|
|
80
|
+
"Can you explain neural networks in simple terms, based on what you know about my interests?"
|
|
81
|
+
):
|
|
82
|
+
if not chunk.is_complete:
|
|
83
|
+
print(chunk.text, end="", flush=True)
|
|
84
|
+
else:
|
|
85
|
+
print() # New line at the end
|
|
86
|
+
if chunk.stats:
|
|
87
|
+
print(f"Stats: {chunk.stats}")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
async def demo_simple_chat():
|
|
91
|
+
"""Demo the SimpleChat API."""
|
|
92
|
+
print("\n=== Simple Chat Demo ===")
|
|
93
|
+
|
|
94
|
+
# Show both default and custom assistant names
|
|
95
|
+
print("--- Default Assistant Name ---")
|
|
96
|
+
chat1 = SimpleChat(system_prompt="You are a helpful programming assistant.")
|
|
97
|
+
print("User: I'm working on a Python project")
|
|
98
|
+
response1 = chat1.ask("I'm working on a Python project")
|
|
99
|
+
print(f"Assistant: {response1}")
|
|
100
|
+
|
|
101
|
+
print("\n--- Custom Assistant Name ---")
|
|
102
|
+
chat2 = SimpleChat(
|
|
103
|
+
system_prompt="You are a helpful programming assistant.",
|
|
104
|
+
assistant_name="CodeHelper",
|
|
105
|
+
)
|
|
106
|
+
print("User: Can you help me with error handling?")
|
|
107
|
+
response2 = chat2.ask("Can you help me with error handling?")
|
|
108
|
+
print(f"CodeHelper: {response2}")
|
|
109
|
+
|
|
110
|
+
# Show conversation history
|
|
111
|
+
conversation = chat2.get_conversation()
|
|
112
|
+
print(f"\nConversation history: {len(conversation)} entries")
|
|
113
|
+
if conversation:
|
|
114
|
+
print("Sample entry:", conversation[0])
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
async def demo_chat_sessions():
|
|
118
|
+
"""Demo session-based chat management."""
|
|
119
|
+
print("\n=== Chat Sessions Demo ===")
|
|
120
|
+
|
|
121
|
+
# Create session manager
|
|
122
|
+
sessions = ChatSession()
|
|
123
|
+
|
|
124
|
+
# Create different themed sessions with custom assistant names
|
|
125
|
+
work_chat = sessions.create_session(
|
|
126
|
+
"work",
|
|
127
|
+
system_prompt="You are a professional business assistant.",
|
|
128
|
+
assistant_name="WorkBot",
|
|
129
|
+
max_history_length=2,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
casual_chat = sessions.create_session(
|
|
133
|
+
"casual",
|
|
134
|
+
system_prompt="You are a friendly, casual conversation partner.",
|
|
135
|
+
assistant_name="Buddy",
|
|
136
|
+
max_history_length=2,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Chat in work context
|
|
140
|
+
print("=== Work Session ===")
|
|
141
|
+
print("User: I need to write a project proposal")
|
|
142
|
+
work_response = work_chat.send("I need to write a project proposal")
|
|
143
|
+
print(f"WorkBot: {work_response.text}")
|
|
144
|
+
|
|
145
|
+
# Chat in casual context
|
|
146
|
+
print("\n=== Casual Session ===")
|
|
147
|
+
print("User: I need to write a project proposal")
|
|
148
|
+
casual_response = casual_chat.send("I need to write a project proposal")
|
|
149
|
+
print(f"Buddy: {casual_response.text}")
|
|
150
|
+
|
|
151
|
+
print(f"\nActive sessions: {sessions.list_sessions()}")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
async def demo_quick_functions():
|
|
155
|
+
"""Demo convenience functions."""
|
|
156
|
+
print("\n=== Quick Functions Demo ===")
|
|
157
|
+
|
|
158
|
+
# Single message
|
|
159
|
+
print("User: What's the capital of France?")
|
|
160
|
+
response = quick_chat("What's the capital of France?")
|
|
161
|
+
print(f"AI: {response}")
|
|
162
|
+
|
|
163
|
+
# Multi-turn with memory and custom assistant name
|
|
164
|
+
print("\n=== Multi-turn Quick Chat ===")
|
|
165
|
+
messages = [
|
|
166
|
+
"I have a pet dog named Max",
|
|
167
|
+
"What's my pet's name?",
|
|
168
|
+
"What kind of animal is Max?",
|
|
169
|
+
]
|
|
170
|
+
|
|
171
|
+
responses = quick_chat_with_memory(messages, assistant_name="QuickBot")
|
|
172
|
+
for msg, resp in zip(messages, responses):
|
|
173
|
+
print(f"User: {msg}")
|
|
174
|
+
print(f"QuickBot: {resp}")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
async def demo_configuration():
|
|
178
|
+
"""Demo configuration options."""
|
|
179
|
+
print("\n=== Configuration Demo ===")
|
|
180
|
+
|
|
181
|
+
# Create chat with custom config
|
|
182
|
+
config = ChatConfig(
|
|
183
|
+
model=DEFAULT_MODEL_NAME,
|
|
184
|
+
system_prompt="You are a helpful assistant that always responds enthusiastically!",
|
|
185
|
+
max_history_length=2,
|
|
186
|
+
show_stats=True,
|
|
187
|
+
)
|
|
188
|
+
chat = ChatSDK(config)
|
|
189
|
+
|
|
190
|
+
print("User: How are you today?")
|
|
191
|
+
response1 = chat.send("How are you today?")
|
|
192
|
+
print(f"AI: {response1.text}")
|
|
193
|
+
|
|
194
|
+
# Update configuration dynamically including assistant name
|
|
195
|
+
chat.update_config(
|
|
196
|
+
system_prompt="You are now a serious, professional assistant.",
|
|
197
|
+
assistant_name="Professional",
|
|
198
|
+
max_history_length=1,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
print("\nUser: How are you today? (after config change)")
|
|
202
|
+
response2 = chat.send("How are you today?")
|
|
203
|
+
print(f"Professional: {response2.text}")
|
|
204
|
+
|
|
205
|
+
print(f"\nHistory length after config change: {chat.history_length}")
|
|
206
|
+
print(f"Current assistant name: {chat.config.assistant_name}")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def print_integration_examples():
|
|
210
|
+
"""Print example code for integration."""
|
|
211
|
+
print("\n" + "=" * 60)
|
|
212
|
+
print("INTEGRATION EXAMPLES")
|
|
213
|
+
print("=" * 60)
|
|
214
|
+
|
|
215
|
+
print(
|
|
216
|
+
"""
|
|
217
|
+
Basic Integration:
|
|
218
|
+
```python
|
|
219
|
+
from gaia.chat.sdk import ChatSDK, ChatConfig
|
|
220
|
+
|
|
221
|
+
# Create SDK instance
|
|
222
|
+
config = ChatConfig(model=DEFAULT_MODEL_NAME, show_stats=True)
|
|
223
|
+
chat = ChatSDK(config)
|
|
224
|
+
|
|
225
|
+
# Send message with conversation memory
|
|
226
|
+
response = chat.send("Hello!")
|
|
227
|
+
print(response.text)
|
|
228
|
+
|
|
229
|
+
# Streaming chat
|
|
230
|
+
for chunk in chat.send_stream("Tell me a story"):
|
|
231
|
+
print(chunk.text, end="", flush=True)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Assistant Naming:
|
|
235
|
+
```python
|
|
236
|
+
from gaia.chat.sdk import ChatSDK, ChatConfig
|
|
237
|
+
|
|
238
|
+
# Create SDK with custom assistant name
|
|
239
|
+
config = ChatConfig(
|
|
240
|
+
model=DEFAULT_MODEL_NAME,
|
|
241
|
+
assistant_name="Gaia"
|
|
242
|
+
)
|
|
243
|
+
chat = ChatSDK(config)
|
|
244
|
+
|
|
245
|
+
response = chat.send("What's your name?")
|
|
246
|
+
print(f"Gaia: {response.text}")
|
|
247
|
+
|
|
248
|
+
# Interactive session will show "Gaia:" instead of "Assistant:"
|
|
249
|
+
await chat.start_interactive_session()
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Simple Integration:
|
|
253
|
+
```python
|
|
254
|
+
from gaia.chat.sdk import SimpleChat
|
|
255
|
+
|
|
256
|
+
# Default assistant name
|
|
257
|
+
chat = SimpleChat()
|
|
258
|
+
response = chat.ask("What's the weather?")
|
|
259
|
+
print(response)
|
|
260
|
+
|
|
261
|
+
# Custom assistant name
|
|
262
|
+
chat = SimpleChat(assistant_name="Helper")
|
|
263
|
+
response = chat.ask("What's the weather?")
|
|
264
|
+
print(response)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Session Management:
|
|
268
|
+
```python
|
|
269
|
+
from gaia.chat.sdk import ChatSession
|
|
270
|
+
|
|
271
|
+
sessions = ChatSession()
|
|
272
|
+
work_chat = sessions.create_session(
|
|
273
|
+
"work",
|
|
274
|
+
system_prompt="Professional assistant",
|
|
275
|
+
assistant_name="WorkBot"
|
|
276
|
+
)
|
|
277
|
+
personal_chat = sessions.create_session(
|
|
278
|
+
"personal",
|
|
279
|
+
system_prompt="Friendly companion",
|
|
280
|
+
assistant_name="Buddy"
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
work_response = work_chat.send("Draft an email")
|
|
284
|
+
personal_response = personal_chat.send("What's for dinner?")
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Quick One-off Usage:
|
|
288
|
+
```python
|
|
289
|
+
from gaia.chat.sdk import quick_chat, quick_chat_with_memory
|
|
290
|
+
|
|
291
|
+
# Single message with custom assistant name
|
|
292
|
+
response = quick_chat("Hello!", assistant_name="Gaia")
|
|
293
|
+
|
|
294
|
+
# Multi-turn conversation with custom assistant name
|
|
295
|
+
responses = quick_chat_with_memory([
|
|
296
|
+
"My name is John",
|
|
297
|
+
"What's my name?"
|
|
298
|
+
], assistant_name="Gaia")
|
|
299
|
+
```
|
|
300
|
+
"""
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
async def main():
|
|
305
|
+
"""Main entry point for the Chat SDK demo application."""
|
|
306
|
+
parser = argparse.ArgumentParser(
|
|
307
|
+
description="Gaia Chat SDK Demo - Examples of text chat with conversation history",
|
|
308
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
309
|
+
epilog="""
|
|
310
|
+
Demo Types:
|
|
311
|
+
basic - Basic chat with conversation memory
|
|
312
|
+
stream - Streaming chat demo
|
|
313
|
+
simple - SimpleChat API demo
|
|
314
|
+
sessions - Session management demo
|
|
315
|
+
quick - Quick functions demo
|
|
316
|
+
config - Configuration options demo
|
|
317
|
+
all - Run all demos sequentially
|
|
318
|
+
examples - Show integration code examples only
|
|
319
|
+
""",
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
parser.add_argument(
|
|
323
|
+
"demo",
|
|
324
|
+
nargs="?",
|
|
325
|
+
default="basic",
|
|
326
|
+
choices=[
|
|
327
|
+
"basic",
|
|
328
|
+
"stream",
|
|
329
|
+
"simple",
|
|
330
|
+
"sessions",
|
|
331
|
+
"quick",
|
|
332
|
+
"config",
|
|
333
|
+
"all",
|
|
334
|
+
"examples",
|
|
335
|
+
],
|
|
336
|
+
help="Type of demo to run (default: basic)",
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
# Configuration options for demos
|
|
340
|
+
parser.add_argument(
|
|
341
|
+
"--model", default=DEFAULT_MODEL_NAME, help="Model to use for demos"
|
|
342
|
+
)
|
|
343
|
+
parser.add_argument("--system-prompt", help="Custom system prompt for the AI")
|
|
344
|
+
parser.add_argument(
|
|
345
|
+
"--verbose", "-v", action="store_true", help="Enable verbose logging"
|
|
346
|
+
)
|
|
347
|
+
|
|
348
|
+
args = parser.parse_args()
|
|
349
|
+
|
|
350
|
+
# Show just examples
|
|
351
|
+
if args.demo == "examples":
|
|
352
|
+
print_integration_examples()
|
|
353
|
+
return
|
|
354
|
+
|
|
355
|
+
print("💬 Gaia Chat SDK Demo")
|
|
356
|
+
print("=" * 50)
|
|
357
|
+
|
|
358
|
+
try:
|
|
359
|
+
if args.demo == "all":
|
|
360
|
+
# Run all demos
|
|
361
|
+
await demo_basic_chat()
|
|
362
|
+
await demo_streaming_chat()
|
|
363
|
+
await demo_simple_chat()
|
|
364
|
+
await demo_chat_sessions()
|
|
365
|
+
await demo_quick_functions()
|
|
366
|
+
await demo_configuration()
|
|
367
|
+
print_integration_examples()
|
|
368
|
+
|
|
369
|
+
elif args.demo == "basic":
|
|
370
|
+
await demo_basic_chat()
|
|
371
|
+
elif args.demo == "stream":
|
|
372
|
+
await demo_streaming_chat()
|
|
373
|
+
elif args.demo == "simple":
|
|
374
|
+
await demo_simple_chat()
|
|
375
|
+
elif args.demo == "sessions":
|
|
376
|
+
await demo_chat_sessions()
|
|
377
|
+
elif args.demo == "quick":
|
|
378
|
+
await demo_quick_functions()
|
|
379
|
+
elif args.demo == "config":
|
|
380
|
+
await demo_configuration()
|
|
381
|
+
|
|
382
|
+
# Always show integration examples at the end
|
|
383
|
+
if args.demo != "all":
|
|
384
|
+
print_integration_examples()
|
|
385
|
+
|
|
386
|
+
except KeyboardInterrupt:
|
|
387
|
+
print("\n\nDemo interrupted. Goodbye!")
|
|
388
|
+
except Exception as e:
|
|
389
|
+
print(f"\n❌ Error: {e}")
|
|
390
|
+
if args.verbose:
|
|
391
|
+
import traceback
|
|
392
|
+
|
|
393
|
+
traceback.print_exc()
|
|
394
|
+
sys.exit(1)
|
|
395
|
+
|
|
396
|
+
print("\n✅ Demo completed successfully!")
|
|
397
|
+
print("\nTo integrate ChatSDK into your app:")
|
|
398
|
+
print(" from gaia.chat.sdk import ChatSDK, ChatConfig")
|
|
399
|
+
print("\nFor more examples, run: python app.py examples")
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
# Keep the original main function for backward compatibility with CLI
|
|
403
|
+
def cli_main(
|
|
404
|
+
message: str = None,
|
|
405
|
+
model: str = None,
|
|
406
|
+
max_tokens: int = 512,
|
|
407
|
+
system_prompt: str = None,
|
|
408
|
+
interactive: bool = False,
|
|
409
|
+
) -> str:
|
|
410
|
+
"""Main function to run the Chat app (backward compatibility)."""
|
|
411
|
+
if interactive:
|
|
412
|
+
print("Interactive mode not available in demo app.")
|
|
413
|
+
print("Use: python app.py basic")
|
|
414
|
+
return None
|
|
415
|
+
elif message:
|
|
416
|
+
# Use SimpleChat for backward compatibility
|
|
417
|
+
config = ChatConfig(
|
|
418
|
+
model=model or DEFAULT_MODEL_NAME,
|
|
419
|
+
max_tokens=max_tokens,
|
|
420
|
+
system_prompt=system_prompt,
|
|
421
|
+
)
|
|
422
|
+
chat = ChatSDK(config)
|
|
423
|
+
response = chat.send(message)
|
|
424
|
+
return response.text
|
|
425
|
+
else:
|
|
426
|
+
raise ValueError("Either message or interactive mode is required")
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
if __name__ == "__main__":
|
|
430
|
+
asyncio.run(main())
|