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/agents/blender/app.py
CHANGED
|
@@ -1,211 +1,211 @@
|
|
|
1
|
-
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
"""
|
|
4
|
-
Main application entry point for the Blender Agent.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import argparse
|
|
8
|
-
import os
|
|
9
|
-
|
|
10
|
-
from gaia.agents.blender.agent import BlenderAgent
|
|
11
|
-
from gaia.llm.lemonade_client import DEFAULT_MODEL_NAME
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def wait_for_user():
|
|
15
|
-
"""Wait for user to press Enter before continuing."""
|
|
16
|
-
input("Press Enter to continue to the next example...")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def run_examples(agent, selected_example=None, print_result=True):
|
|
20
|
-
"""
|
|
21
|
-
Run the example demonstrations.
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
agent: The BlenderAgent instance
|
|
25
|
-
selected_example: Optional example number to run specifically
|
|
26
|
-
print_result: Whether to print the result
|
|
27
|
-
"""
|
|
28
|
-
console = agent.console
|
|
29
|
-
|
|
30
|
-
examples = {
|
|
31
|
-
1: {
|
|
32
|
-
"name": "Clearing the scene",
|
|
33
|
-
"description": "This example demonstrates how to clear all objects from a scene.",
|
|
34
|
-
"query": "Clear the scene to start fresh",
|
|
35
|
-
},
|
|
36
|
-
2: {
|
|
37
|
-
"name": "Creating a basic cube",
|
|
38
|
-
"description": "This example creates a red cube at the center of the scene.",
|
|
39
|
-
"query": "Create a red cube at the center of the scene and make sure it has a red material",
|
|
40
|
-
},
|
|
41
|
-
3: {
|
|
42
|
-
"name": "Creating a sphere with specific properties",
|
|
43
|
-
"description": "This example creates a blue sphere with specific parameters.",
|
|
44
|
-
"query": "Create a blue sphere at position (3, 0, 0) and set its scale to (2, 2, 2)",
|
|
45
|
-
},
|
|
46
|
-
4: {
|
|
47
|
-
"name": "Creating multiple objects",
|
|
48
|
-
"description": "This example creates multiple objects with specific arrangements.",
|
|
49
|
-
"query": "Create a green cube at (0, 0, 0) and a red sphere 3 units above it",
|
|
50
|
-
},
|
|
51
|
-
5: {
|
|
52
|
-
"name": "Creating and modifying objects",
|
|
53
|
-
"description": "This example creates objects and then modifies them.",
|
|
54
|
-
"query": "Create a blue cylinder, then make it taller and move it up 2 units",
|
|
55
|
-
},
|
|
56
|
-
# FIXME: Currently not working.
|
|
57
|
-
# 6: {
|
|
58
|
-
# "name": "Creating a more complex scene",
|
|
59
|
-
# "description": "This example creates a more complex scene with multiple objects and relationships.",
|
|
60
|
-
# "query": "Create a simple desk with a computer, lamp, and coffee mug on it.",
|
|
61
|
-
# "use_interactive_scene": True,
|
|
62
|
-
# },
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# If a specific example is requested, run only that one
|
|
66
|
-
if selected_example and selected_example in examples:
|
|
67
|
-
example = examples[selected_example]
|
|
68
|
-
console.print_header(f"=== Example {selected_example}: {example['name']} ===")
|
|
69
|
-
console.print_header(example["description"])
|
|
70
|
-
|
|
71
|
-
if example.get("use_interactive_scene", False):
|
|
72
|
-
agent.create_interactive_scene(example["query"])
|
|
73
|
-
else:
|
|
74
|
-
agent.process_query(example["query"])
|
|
75
|
-
|
|
76
|
-
agent.display_result(print_result=print_result)
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
# Run all examples in sequence
|
|
80
|
-
for idx, example in examples.items():
|
|
81
|
-
console.print_header(f"=== Example {idx}: {example['name']} ===")
|
|
82
|
-
console.print_header(example["description"])
|
|
83
|
-
|
|
84
|
-
if example.get("use_interactive_scene", False):
|
|
85
|
-
agent.create_interactive_scene(example["query"])
|
|
86
|
-
else:
|
|
87
|
-
agent.process_query(example["query"], trace=True)
|
|
88
|
-
|
|
89
|
-
agent.display_result(print_result=print_result)
|
|
90
|
-
|
|
91
|
-
# Wait for user input between examples, except the last one
|
|
92
|
-
if idx < len(examples):
|
|
93
|
-
wait_for_user()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def run_interactive_mode(agent, print_result=True):
|
|
97
|
-
"""
|
|
98
|
-
Run the Blender Agent in interactive mode where the user can continuously input queries.
|
|
99
|
-
|
|
100
|
-
Args:
|
|
101
|
-
agent: The BlenderAgent instance
|
|
102
|
-
print_result: Whether to print the result
|
|
103
|
-
"""
|
|
104
|
-
console = agent.console
|
|
105
|
-
console.print_header("=== Interactive Mode ===")
|
|
106
|
-
console.print_header("Enter your queries. Type 'exit', 'quit', or 'q' to exit.")
|
|
107
|
-
|
|
108
|
-
while True:
|
|
109
|
-
try:
|
|
110
|
-
query = input("\nEnter query: ")
|
|
111
|
-
if query.lower() in ["exit", "quit", "q"]:
|
|
112
|
-
console.print_header("Exiting interactive mode.")
|
|
113
|
-
break
|
|
114
|
-
|
|
115
|
-
if query.strip(): # Process only non-empty queries
|
|
116
|
-
agent.process_query(query)
|
|
117
|
-
agent.display_result(print_result=print_result)
|
|
118
|
-
|
|
119
|
-
except KeyboardInterrupt:
|
|
120
|
-
console.print_header("\nInteractive mode interrupted. Exiting.")
|
|
121
|
-
break
|
|
122
|
-
except Exception as e:
|
|
123
|
-
console.print_error(f"Error processing query: {e}")
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
def main():
|
|
127
|
-
"""Main entry point for the Blender Agent application."""
|
|
128
|
-
parser = argparse.ArgumentParser(description="Run the BlenderAgent")
|
|
129
|
-
parser.add_argument(
|
|
130
|
-
"--model",
|
|
131
|
-
default=DEFAULT_MODEL_NAME,
|
|
132
|
-
help=f"Model ID to use (default: {DEFAULT_MODEL_NAME})",
|
|
133
|
-
)
|
|
134
|
-
parser.add_argument(
|
|
135
|
-
"--example",
|
|
136
|
-
type=int,
|
|
137
|
-
choices=range(1, 7),
|
|
138
|
-
help="Run a specific example (1-6), if not specified run all examples",
|
|
139
|
-
)
|
|
140
|
-
parser.add_argument(
|
|
141
|
-
"--steps", type=int, default=5, help="Maximum number of steps per query"
|
|
142
|
-
)
|
|
143
|
-
parser.add_argument(
|
|
144
|
-
"--output-dir",
|
|
145
|
-
type=str,
|
|
146
|
-
default="output",
|
|
147
|
-
help="Directory to save output files",
|
|
148
|
-
)
|
|
149
|
-
parser.add_argument(
|
|
150
|
-
"--stream", action="store_true", help="Enable streaming mode for LLM responses"
|
|
151
|
-
)
|
|
152
|
-
parser.add_argument(
|
|
153
|
-
"--stats",
|
|
154
|
-
action="store_true",
|
|
155
|
-
default=True,
|
|
156
|
-
help="Display performance statistics",
|
|
157
|
-
)
|
|
158
|
-
parser.add_argument(
|
|
159
|
-
"--query", type=str, help="Custom query to run instead of examples"
|
|
160
|
-
)
|
|
161
|
-
parser.add_argument(
|
|
162
|
-
"--interactive",
|
|
163
|
-
action="store_true",
|
|
164
|
-
help="Enable interactive mode to continuously input queries",
|
|
165
|
-
)
|
|
166
|
-
parser.add_argument(
|
|
167
|
-
"--debug-prompts",
|
|
168
|
-
action="store_true",
|
|
169
|
-
default=False,
|
|
170
|
-
help="Enable debug prompts",
|
|
171
|
-
)
|
|
172
|
-
parser.add_argument(
|
|
173
|
-
"--print-result",
|
|
174
|
-
action="store_true",
|
|
175
|
-
default=False,
|
|
176
|
-
help="Print results to console",
|
|
177
|
-
)
|
|
178
|
-
args = parser.parse_args()
|
|
179
|
-
|
|
180
|
-
# Create output directory if specified
|
|
181
|
-
output_dir = args.output_dir
|
|
182
|
-
if output_dir:
|
|
183
|
-
os.makedirs(output_dir, exist_ok=True)
|
|
184
|
-
|
|
185
|
-
# Create the BlenderAgent
|
|
186
|
-
agent = BlenderAgent(
|
|
187
|
-
model_id=args.model,
|
|
188
|
-
max_steps=args.steps,
|
|
189
|
-
output_dir=output_dir,
|
|
190
|
-
streaming=args.stream,
|
|
191
|
-
show_stats=args.stats,
|
|
192
|
-
debug_prompts=args.debug_prompts,
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
# Run in interactive mode if specified
|
|
196
|
-
if args.interactive:
|
|
197
|
-
run_interactive_mode(agent, print_result=args.print_result)
|
|
198
|
-
# Process a custom query if provided
|
|
199
|
-
elif args.query:
|
|
200
|
-
agent.console.print_header(f"Processing custom query: '{args.query}'")
|
|
201
|
-
agent.process_query(args.query)
|
|
202
|
-
agent.display_result(print_result=args.print_result)
|
|
203
|
-
else:
|
|
204
|
-
# Run specific example if provided, otherwise run all examples
|
|
205
|
-
run_examples(
|
|
206
|
-
agent, selected_example=args.example, print_result=args.print_result
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if __name__ == "__main__":
|
|
211
|
-
main()
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
"""
|
|
4
|
+
Main application entry point for the Blender Agent.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
from gaia.agents.blender.agent import BlenderAgent
|
|
11
|
+
from gaia.llm.lemonade_client import DEFAULT_MODEL_NAME
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def wait_for_user():
|
|
15
|
+
"""Wait for user to press Enter before continuing."""
|
|
16
|
+
input("Press Enter to continue to the next example...")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def run_examples(agent, selected_example=None, print_result=True):
|
|
20
|
+
"""
|
|
21
|
+
Run the example demonstrations.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
agent: The BlenderAgent instance
|
|
25
|
+
selected_example: Optional example number to run specifically
|
|
26
|
+
print_result: Whether to print the result
|
|
27
|
+
"""
|
|
28
|
+
console = agent.console
|
|
29
|
+
|
|
30
|
+
examples = {
|
|
31
|
+
1: {
|
|
32
|
+
"name": "Clearing the scene",
|
|
33
|
+
"description": "This example demonstrates how to clear all objects from a scene.",
|
|
34
|
+
"query": "Clear the scene to start fresh",
|
|
35
|
+
},
|
|
36
|
+
2: {
|
|
37
|
+
"name": "Creating a basic cube",
|
|
38
|
+
"description": "This example creates a red cube at the center of the scene.",
|
|
39
|
+
"query": "Create a red cube at the center of the scene and make sure it has a red material",
|
|
40
|
+
},
|
|
41
|
+
3: {
|
|
42
|
+
"name": "Creating a sphere with specific properties",
|
|
43
|
+
"description": "This example creates a blue sphere with specific parameters.",
|
|
44
|
+
"query": "Create a blue sphere at position (3, 0, 0) and set its scale to (2, 2, 2)",
|
|
45
|
+
},
|
|
46
|
+
4: {
|
|
47
|
+
"name": "Creating multiple objects",
|
|
48
|
+
"description": "This example creates multiple objects with specific arrangements.",
|
|
49
|
+
"query": "Create a green cube at (0, 0, 0) and a red sphere 3 units above it",
|
|
50
|
+
},
|
|
51
|
+
5: {
|
|
52
|
+
"name": "Creating and modifying objects",
|
|
53
|
+
"description": "This example creates objects and then modifies them.",
|
|
54
|
+
"query": "Create a blue cylinder, then make it taller and move it up 2 units",
|
|
55
|
+
},
|
|
56
|
+
# FIXME: Currently not working.
|
|
57
|
+
# 6: {
|
|
58
|
+
# "name": "Creating a more complex scene",
|
|
59
|
+
# "description": "This example creates a more complex scene with multiple objects and relationships.",
|
|
60
|
+
# "query": "Create a simple desk with a computer, lamp, and coffee mug on it.",
|
|
61
|
+
# "use_interactive_scene": True,
|
|
62
|
+
# },
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# If a specific example is requested, run only that one
|
|
66
|
+
if selected_example and selected_example in examples:
|
|
67
|
+
example = examples[selected_example]
|
|
68
|
+
console.print_header(f"=== Example {selected_example}: {example['name']} ===")
|
|
69
|
+
console.print_header(example["description"])
|
|
70
|
+
|
|
71
|
+
if example.get("use_interactive_scene", False):
|
|
72
|
+
agent.create_interactive_scene(example["query"])
|
|
73
|
+
else:
|
|
74
|
+
agent.process_query(example["query"])
|
|
75
|
+
|
|
76
|
+
agent.display_result(print_result=print_result)
|
|
77
|
+
return
|
|
78
|
+
|
|
79
|
+
# Run all examples in sequence
|
|
80
|
+
for idx, example in examples.items():
|
|
81
|
+
console.print_header(f"=== Example {idx}: {example['name']} ===")
|
|
82
|
+
console.print_header(example["description"])
|
|
83
|
+
|
|
84
|
+
if example.get("use_interactive_scene", False):
|
|
85
|
+
agent.create_interactive_scene(example["query"])
|
|
86
|
+
else:
|
|
87
|
+
agent.process_query(example["query"], trace=True)
|
|
88
|
+
|
|
89
|
+
agent.display_result(print_result=print_result)
|
|
90
|
+
|
|
91
|
+
# Wait for user input between examples, except the last one
|
|
92
|
+
if idx < len(examples):
|
|
93
|
+
wait_for_user()
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def run_interactive_mode(agent, print_result=True):
|
|
97
|
+
"""
|
|
98
|
+
Run the Blender Agent in interactive mode where the user can continuously input queries.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
agent: The BlenderAgent instance
|
|
102
|
+
print_result: Whether to print the result
|
|
103
|
+
"""
|
|
104
|
+
console = agent.console
|
|
105
|
+
console.print_header("=== Interactive Mode ===")
|
|
106
|
+
console.print_header("Enter your queries. Type 'exit', 'quit', or 'q' to exit.")
|
|
107
|
+
|
|
108
|
+
while True:
|
|
109
|
+
try:
|
|
110
|
+
query = input("\nEnter query: ")
|
|
111
|
+
if query.lower() in ["exit", "quit", "q"]:
|
|
112
|
+
console.print_header("Exiting interactive mode.")
|
|
113
|
+
break
|
|
114
|
+
|
|
115
|
+
if query.strip(): # Process only non-empty queries
|
|
116
|
+
agent.process_query(query)
|
|
117
|
+
agent.display_result(print_result=print_result)
|
|
118
|
+
|
|
119
|
+
except KeyboardInterrupt:
|
|
120
|
+
console.print_header("\nInteractive mode interrupted. Exiting.")
|
|
121
|
+
break
|
|
122
|
+
except Exception as e:
|
|
123
|
+
console.print_error(f"Error processing query: {e}")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def main():
|
|
127
|
+
"""Main entry point for the Blender Agent application."""
|
|
128
|
+
parser = argparse.ArgumentParser(description="Run the BlenderAgent")
|
|
129
|
+
parser.add_argument(
|
|
130
|
+
"--model",
|
|
131
|
+
default=DEFAULT_MODEL_NAME,
|
|
132
|
+
help=f"Model ID to use (default: {DEFAULT_MODEL_NAME})",
|
|
133
|
+
)
|
|
134
|
+
parser.add_argument(
|
|
135
|
+
"--example",
|
|
136
|
+
type=int,
|
|
137
|
+
choices=range(1, 7),
|
|
138
|
+
help="Run a specific example (1-6), if not specified run all examples",
|
|
139
|
+
)
|
|
140
|
+
parser.add_argument(
|
|
141
|
+
"--steps", type=int, default=5, help="Maximum number of steps per query"
|
|
142
|
+
)
|
|
143
|
+
parser.add_argument(
|
|
144
|
+
"--output-dir",
|
|
145
|
+
type=str,
|
|
146
|
+
default="output",
|
|
147
|
+
help="Directory to save output files",
|
|
148
|
+
)
|
|
149
|
+
parser.add_argument(
|
|
150
|
+
"--stream", action="store_true", help="Enable streaming mode for LLM responses"
|
|
151
|
+
)
|
|
152
|
+
parser.add_argument(
|
|
153
|
+
"--stats",
|
|
154
|
+
action="store_true",
|
|
155
|
+
default=True,
|
|
156
|
+
help="Display performance statistics",
|
|
157
|
+
)
|
|
158
|
+
parser.add_argument(
|
|
159
|
+
"--query", type=str, help="Custom query to run instead of examples"
|
|
160
|
+
)
|
|
161
|
+
parser.add_argument(
|
|
162
|
+
"--interactive",
|
|
163
|
+
action="store_true",
|
|
164
|
+
help="Enable interactive mode to continuously input queries",
|
|
165
|
+
)
|
|
166
|
+
parser.add_argument(
|
|
167
|
+
"--debug-prompts",
|
|
168
|
+
action="store_true",
|
|
169
|
+
default=False,
|
|
170
|
+
help="Enable debug prompts",
|
|
171
|
+
)
|
|
172
|
+
parser.add_argument(
|
|
173
|
+
"--print-result",
|
|
174
|
+
action="store_true",
|
|
175
|
+
default=False,
|
|
176
|
+
help="Print results to console",
|
|
177
|
+
)
|
|
178
|
+
args = parser.parse_args()
|
|
179
|
+
|
|
180
|
+
# Create output directory if specified
|
|
181
|
+
output_dir = args.output_dir
|
|
182
|
+
if output_dir:
|
|
183
|
+
os.makedirs(output_dir, exist_ok=True)
|
|
184
|
+
|
|
185
|
+
# Create the BlenderAgent
|
|
186
|
+
agent = BlenderAgent(
|
|
187
|
+
model_id=args.model,
|
|
188
|
+
max_steps=args.steps,
|
|
189
|
+
output_dir=output_dir,
|
|
190
|
+
streaming=args.stream,
|
|
191
|
+
show_stats=args.stats,
|
|
192
|
+
debug_prompts=args.debug_prompts,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# Run in interactive mode if specified
|
|
196
|
+
if args.interactive:
|
|
197
|
+
run_interactive_mode(agent, print_result=args.print_result)
|
|
198
|
+
# Process a custom query if provided
|
|
199
|
+
elif args.query:
|
|
200
|
+
agent.console.print_header(f"Processing custom query: '{args.query}'")
|
|
201
|
+
agent.process_query(args.query)
|
|
202
|
+
agent.display_result(print_result=args.print_result)
|
|
203
|
+
else:
|
|
204
|
+
# Run specific example if provided, otherwise run all examples
|
|
205
|
+
run_examples(
|
|
206
|
+
agent, selected_example=args.example, print_result=args.print_result
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
if __name__ == "__main__":
|
|
211
|
+
main()
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
|
|
4
|
-
from gaia.agents.blender.agent_simple import BlenderAgentSimple
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def main():
|
|
8
|
-
# Initialize the agent
|
|
9
|
-
agent = BlenderAgentSimple()
|
|
10
|
-
|
|
11
|
-
print("\nBlender Object Creator")
|
|
12
|
-
print("Enter 'q' at any prompt to quit")
|
|
13
|
-
|
|
14
|
-
while True:
|
|
15
|
-
# Get user input interactively
|
|
16
|
-
print(
|
|
17
|
-
"\nDescribe the 3D object you want to create (e.g., 'Create a large cube at the origin'): "
|
|
18
|
-
)
|
|
19
|
-
user_input = input("> ")
|
|
20
|
-
|
|
21
|
-
# Check if user wants to quit
|
|
22
|
-
if user_input.lower() == "q":
|
|
23
|
-
print("Exiting Blender Object Creator. Goodbye!")
|
|
24
|
-
break
|
|
25
|
-
|
|
26
|
-
# Process the query using the agent
|
|
27
|
-
result = agent.process_query(user_input)
|
|
28
|
-
|
|
29
|
-
if result["status"] == "success":
|
|
30
|
-
print(f"\n\nLLM response:\n{result['llm_response']}")
|
|
31
|
-
print(
|
|
32
|
-
f"Successfully created object: {result['blender_result'].get('data', {}).get('name')}"
|
|
33
|
-
)
|
|
34
|
-
else:
|
|
35
|
-
print(f"Error: {result['error']}")
|
|
36
|
-
if result["llm_response"]:
|
|
37
|
-
print(f"Raw LLM response: {result['llm_response']}")
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if __name__ == "__main__":
|
|
41
|
-
main()
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
from gaia.agents.blender.agent_simple import BlenderAgentSimple
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def main():
|
|
8
|
+
# Initialize the agent
|
|
9
|
+
agent = BlenderAgentSimple()
|
|
10
|
+
|
|
11
|
+
print("\nBlender Object Creator")
|
|
12
|
+
print("Enter 'q' at any prompt to quit")
|
|
13
|
+
|
|
14
|
+
while True:
|
|
15
|
+
# Get user input interactively
|
|
16
|
+
print(
|
|
17
|
+
"\nDescribe the 3D object you want to create (e.g., 'Create a large cube at the origin'): "
|
|
18
|
+
)
|
|
19
|
+
user_input = input("> ")
|
|
20
|
+
|
|
21
|
+
# Check if user wants to quit
|
|
22
|
+
if user_input.lower() == "q":
|
|
23
|
+
print("Exiting Blender Object Creator. Goodbye!")
|
|
24
|
+
break
|
|
25
|
+
|
|
26
|
+
# Process the query using the agent
|
|
27
|
+
result = agent.process_query(user_input)
|
|
28
|
+
|
|
29
|
+
if result["status"] == "success":
|
|
30
|
+
print(f"\n\nLLM response:\n{result['llm_response']}")
|
|
31
|
+
print(
|
|
32
|
+
f"Successfully created object: {result['blender_result'].get('data', {}).get('name')}"
|
|
33
|
+
)
|
|
34
|
+
else:
|
|
35
|
+
print(f"Error: {result['error']}")
|
|
36
|
+
if result["llm_response"]:
|
|
37
|
+
print(f"Raw LLM response: {result['llm_response']}")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
main()
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
|
|
4
|
-
from .materials import MaterialManager
|
|
5
|
-
from .objects import ObjectManager
|
|
6
|
-
from .rendering import RenderManager
|
|
7
|
-
from .scene import SceneManager
|
|
8
|
-
from .view import ViewManager
|
|
9
|
-
|
|
10
|
-
__all__ = [
|
|
11
|
-
"SceneManager",
|
|
12
|
-
"MaterialManager",
|
|
13
|
-
"RenderManager",
|
|
14
|
-
"ObjectManager",
|
|
15
|
-
"ViewManager",
|
|
16
|
-
]
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
from .materials import MaterialManager
|
|
5
|
+
from .objects import ObjectManager
|
|
6
|
+
from .rendering import RenderManager
|
|
7
|
+
from .scene import SceneManager
|
|
8
|
+
from .view import ViewManager
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"SceneManager",
|
|
12
|
+
"MaterialManager",
|
|
13
|
+
"RenderManager",
|
|
14
|
+
"ObjectManager",
|
|
15
|
+
"ViewManager",
|
|
16
|
+
]
|