amd-gaia 0.15.0__py3-none-any.whl → 0.15.2__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.2.dist-info}/METADATA +222 -223
- amd_gaia-0.15.2.dist-info/RECORD +182 -0
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.2.dist-info}/WHEEL +1 -1
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.2.dist-info}/entry_points.txt +1 -0
- {amd_gaia-0.15.0.dist-info → amd_gaia-0.15.2.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 +2132 -2177
- gaia/agents/base/api_agent.py +119 -120
- gaia/agents/base/console.py +1967 -1841
- gaia/agents/base/errors.py +237 -237
- gaia/agents/base/mcp_agent.py +86 -86
- gaia/agents/base/tools.py +88 -83
- gaia/agents/blender/__init__.py +7 -0
- gaia/agents/blender/agent.py +553 -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 +809 -835
- gaia/agents/chat/app.py +1065 -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 +1744 -1729
- gaia/agents/chat/tools/shell_tools.py +437 -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 +2034 -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 +643 -642
- gaia/agents/emr/__init__.py +8 -8
- gaia/agents/emr/agent.py +1504 -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 +1972 -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 +184 -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 +428 -430
- gaia/chat/prompts.py +522 -522
- gaia/chat/sdk.py +1228 -1225
- gaia/cli.py +5659 -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/installer/__init__.py +23 -0
- gaia/installer/init_command.py +1275 -0
- gaia/installer/lemonade_installer.py +619 -0
- gaia/llm/__init__.py +10 -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 +3421 -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 +118 -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 +183 -163
- gaia/talk/app.py +287 -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.2.dist-info}/top_level.txt +0 -0
|
@@ -1,135 +1,133 @@
|
|
|
1
|
-
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
-
# SPDX-License-Identifier: MIT
|
|
3
|
-
|
|
4
|
-
from typing import Any, Dict, Optional, Tuple
|
|
5
|
-
|
|
6
|
-
from gaia.llm
|
|
7
|
-
from gaia.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
You MUST
|
|
32
|
-
You MUST
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Example: "
|
|
36
|
-
""
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
base_url: Optional[str] = "http://localhost:8000/api/v1",
|
|
44
|
-
):
|
|
45
|
-
"""
|
|
46
|
-
Initialize the BlenderAgentSimple with LLM and MCP clients.
|
|
47
|
-
|
|
48
|
-
Args:
|
|
49
|
-
llm: An optional pre-configured LLM client, otherwise a new one will be created
|
|
50
|
-
mcp: An optional pre-configured MCP client, otherwise a new one will be created
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
"
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
f"Failed to parse LLM response: {e}. Raw response: {llm_response}"
|
|
135
|
-
)
|
|
1
|
+
# Copyright(C) 2025-2026 Advanced Micro Devices, Inc. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: MIT
|
|
3
|
+
|
|
4
|
+
from typing import Any, Dict, Optional, Tuple
|
|
5
|
+
|
|
6
|
+
from gaia.llm import create_client
|
|
7
|
+
from gaia.llm.base_client import LLMClient
|
|
8
|
+
from gaia.mcp.blender_mcp_client import MCPClient
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class BlenderAgentSimple:
|
|
12
|
+
"""Agent wrapper for the Blender Object Creator that handles LLM-driven object creation.
|
|
13
|
+
|
|
14
|
+
This is a 'simple' agent because it provides a streamlined interface between natural language
|
|
15
|
+
input and Blender operations, focusing only on basic object creation. It uses an LLM to parse
|
|
16
|
+
user requests into structured commands and the MCP client to execute those commands in Blender.
|
|
17
|
+
Unlike more complex agents, it doesn't handle advanced modeling, scene composition, or multi-step
|
|
18
|
+
operations - it's designed for single-object creation with minimal parameters (type, location, scale).
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
# Embed system prompt directly in the class
|
|
22
|
+
SYSTEM_PROMPT = """
|
|
23
|
+
You are a 3D modeling assistant. IMPORTANT: For EACH user request, respond with EXACTLY ONE LINE in this format:
|
|
24
|
+
TYPE,x,y,z,sx,sy,sz
|
|
25
|
+
|
|
26
|
+
Where:
|
|
27
|
+
- TYPE is one of: CUBE, SPHERE, CYLINDER, CONE, TORUS - no other types allowed
|
|
28
|
+
- x,y,z are the LOCATION coordinates in 3D space (must be numbers)
|
|
29
|
+
- sx,sy,sz are the SCALE factors (must be numbers)
|
|
30
|
+
|
|
31
|
+
You MUST include ALL 7 parameters separated by commas.
|
|
32
|
+
You MUST respond with ONLY ONE LINE.
|
|
33
|
+
You MUST NOT include any other text.
|
|
34
|
+
|
|
35
|
+
Example: "Create a large sphere at the origin" → SPHERE,0,0,0,2,2,2
|
|
36
|
+
Example: "Make a tall cylinder" → CYLINDER,0,0,0,1,1,3
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
llm: Optional[LLMClient] = None,
|
|
42
|
+
mcp: Optional[MCPClient] = None,
|
|
43
|
+
base_url: Optional[str] = "http://localhost:8000/api/v1",
|
|
44
|
+
):
|
|
45
|
+
"""
|
|
46
|
+
Initialize the BlenderAgentSimple with LLM and MCP clients.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
llm: An optional pre-configured LLM client, otherwise a new one will be created
|
|
50
|
+
mcp: An optional pre-configured MCP client, otherwise a new one will be created
|
|
51
|
+
base_url: Base URL for the Lemonade LLM server
|
|
52
|
+
"""
|
|
53
|
+
self.llm = (
|
|
54
|
+
llm
|
|
55
|
+
if llm
|
|
56
|
+
else create_client(
|
|
57
|
+
"lemonade", base_url=base_url, system_prompt=self.SYSTEM_PROMPT
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
self.mcp = mcp if mcp else MCPClient()
|
|
61
|
+
|
|
62
|
+
def process_query(self, user_input: str) -> Dict[str, Any]:
|
|
63
|
+
"""
|
|
64
|
+
Process a user query to create a 3D object.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
user_input: User's description of the object to create
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Dict containing the result of the operation and any relevant data
|
|
71
|
+
"""
|
|
72
|
+
try:
|
|
73
|
+
# Get object creation instruction from LLM based on user input
|
|
74
|
+
llm_response = self.llm.generate(user_input).strip()
|
|
75
|
+
|
|
76
|
+
# Parse the LLM response
|
|
77
|
+
obj_type, location, scale = self._parse_llm_response(llm_response)
|
|
78
|
+
|
|
79
|
+
# Create the object in Blender
|
|
80
|
+
result = self.mcp.create_object(
|
|
81
|
+
type=obj_type,
|
|
82
|
+
name=f"llm_generated_{obj_type.lower()}",
|
|
83
|
+
location=location,
|
|
84
|
+
scale=scale,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
"status": "success",
|
|
89
|
+
"llm_response": llm_response,
|
|
90
|
+
"object_type": obj_type,
|
|
91
|
+
"location": location,
|
|
92
|
+
"scale": scale,
|
|
93
|
+
"blender_result": result,
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
except Exception as e:
|
|
97
|
+
return {
|
|
98
|
+
"status": "error",
|
|
99
|
+
"error": str(e),
|
|
100
|
+
"llm_response": llm_response if "llm_response" in locals() else None,
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
def _parse_llm_response(
|
|
104
|
+
self, llm_response: str
|
|
105
|
+
) -> Tuple[str, Tuple[float, float, float], Tuple[float, float, float]]:
|
|
106
|
+
"""
|
|
107
|
+
Parse the LLM response into object parameters.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
llm_response: The response from the LLM in the format TYPE,x,y,z,sx,sy,sz
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Tuple containing (object_type, location_tuple, scale_tuple)
|
|
114
|
+
|
|
115
|
+
Raises:
|
|
116
|
+
ValueError: If the response format is invalid
|
|
117
|
+
"""
|
|
118
|
+
try:
|
|
119
|
+
# Simple parsing, assuming format: TYPE,x,y,z,sx,sy,sz
|
|
120
|
+
parts = llm_response.split(",")
|
|
121
|
+
if len(parts) != 7:
|
|
122
|
+
raise ValueError(f"Expected 7 parts in response, got {len(parts)}")
|
|
123
|
+
|
|
124
|
+
obj_type = parts[0].strip().upper()
|
|
125
|
+
location = (float(parts[1]), float(parts[2]), float(parts[3]))
|
|
126
|
+
scale = (float(parts[4]), float(parts[5]), float(parts[6]))
|
|
127
|
+
|
|
128
|
+
return obj_type, location, scale
|
|
129
|
+
|
|
130
|
+
except Exception as e:
|
|
131
|
+
raise ValueError(
|
|
132
|
+
f"Failed to parse LLM response: {e}. Raw response: {llm_response}"
|
|
133
|
+
)
|