xgae 0.1.18__py3-none-any.whl → 0.1.20__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.

Potentially problematic release.


This version of xgae might be problematic. Click here for more details.

xgae/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  if __name__ == "__main__":
2
- from xgae.cli_app import main
2
+ from xgae.engine_cli_app import main
3
3
 
4
4
  main()
@@ -17,8 +17,9 @@ from xgae.engine.responser.responser_base import TaskResponserContext, TaskRespo
17
17
 
18
18
  class XGATaskEngine:
19
19
  def __init__(self,
20
- session_id: Optional[str] = None,
21
20
  task_id: Optional[str] = None,
21
+ session_id: Optional[str] = None,
22
+ user_id: Optional[str] = None,
22
23
  agent_id: Optional[str] = None,
23
24
  general_tools: Optional[List[str]] = None,
24
25
  custom_tools: Optional[List[str]] = None,
@@ -27,10 +28,12 @@ class XGATaskEngine:
27
28
  tool_exec_parallel: Optional[bool] = None,
28
29
  llm_config: Optional[LLMConfig] = None,
29
30
  prompt_builder: Optional[XGAPromptBuilder] = None,
30
- tool_box: Optional[XGAToolBox] = None):
31
+ tool_box: Optional[XGAToolBox] = None
32
+ ):
31
33
  self.task_id = task_id if task_id else f"xga_task_{uuid4()}"
32
- self.agent_id = agent_id
33
34
  self.session_id = session_id
35
+ self.user_id = user_id
36
+ self.agent_id = agent_id
34
37
 
35
38
  self.llm_client = LLMClient(llm_config)
36
39
  self.model_name = self.llm_client.model_name
@@ -56,16 +59,16 @@ class XGATaskEngine:
56
59
  self.task_response_msgs: List[XGAResponseMessage] = []
57
60
 
58
61
  async def run_task_with_final_answer(self,
59
- task_message: Dict[str, Any],
62
+ task_input: Dict[str, Any],
60
63
  trace_id: Optional[str] = None) -> XGATaskResult:
61
- final_result:XGATaskResult = None
64
+ final_result: XGATaskResult = None
62
65
  try:
63
66
  await self._init_task()
64
67
 
65
- self.task_langfuse.start_root_span("run_task_with_final_answer", task_message, trace_id)
68
+ self.task_langfuse.start_root_span("run_task_with_final_answer", task_input, trace_id)
66
69
 
67
70
  chunks = []
68
- async for chunk in self.run_task(task_message=task_message, trace_id=trace_id):
71
+ async for chunk in self.run_task(task_input, trace_id):
69
72
  chunks.append(chunk)
70
73
 
71
74
  if len(chunks) > 0:
@@ -79,14 +82,14 @@ class XGATaskEngine:
79
82
 
80
83
 
81
84
  async def run_task(self,
82
- task_message: Dict[str, Any],
85
+ task_input: Dict[str, Any],
83
86
  trace_id: Optional[str] = None) -> AsyncGenerator[Dict[str, Any], None]:
84
87
  try:
85
88
  await self._init_task()
86
89
 
87
- self.task_langfuse.start_root_span("run_task", task_message, trace_id)
90
+ self.task_langfuse.start_root_span("run_task", task_input, trace_id)
88
91
 
89
- self.add_response_message(type="user", content=task_message, is_llm_message=True)
92
+ self.add_response_message(type="user", content=task_input, is_llm_message=True)
90
93
 
91
94
  async for chunk in self._run_task_auto():
92
95
  yield chunk
@@ -153,30 +156,30 @@ class XGATaskEngine:
153
156
  status_content = chunk['content']
154
157
  status_type = status_content['status_type']
155
158
  if status_type == "error":
156
- logging.error(f"TaskEngine run_task_auto: task_response error: {chunk.get('message')}")
159
+ logging.error(f"XGATaskEngine run_task_auto: task_response error: {chunk.get('message')}")
157
160
  auto_continue = False
158
161
  break
159
162
  elif status_type == "finish":
160
163
  finish_reason = status_content['finish_reason']
161
164
  if finish_reason == "completed":
162
- logging.info(f"TaskEngine run_task_auto: Detected finish_reason='completed', TASK_COMPLETE Success !")
165
+ logging.info(f"XGATaskEngine run_task_auto: Detected finish_reason='completed', TASK_COMPLETE Success !")
163
166
  auto_continue = False
164
167
  break
165
168
  elif finish_reason == "xml_tool_limit_reached":
166
- logging.warning(f"TaskEngine run_task_auto: Detected finish_reason='xml_tool_limit_reached', stop auto-continue")
169
+ logging.warning(f"XGATaskEngine run_task_auto: Detected finish_reason='xml_tool_limit_reached', stop auto-continue")
167
170
  auto_continue = False
168
171
  break
169
172
  elif finish_reason == "non_tool_call":
170
- logging.warning(f"TaskEngine run_task_auto: Detected finish_reason='non_tool_call', stop auto-continue")
173
+ logging.warning(f"XGATaskEngine run_task_auto: Detected finish_reason='non_tool_call', stop auto-continue")
171
174
  auto_continue = False
172
175
  break
173
176
  elif finish_reason in ["stop", "length"]: # 'length' occur on some LLM
174
177
  auto_continue_count += 1
175
178
  auto_continue = True if auto_continue_count < self.max_auto_run else False
176
179
  update_continuous_state(auto_continue_count, auto_continue)
177
- logging.info(f"TaskEngine run_task_auto: Detected finish_reason='{finish_reason}', auto-continuing ({auto_continue_count}/{self.max_auto_run})")
180
+ logging.info(f"XGATaskEngine run_task_auto: Detected finish_reason='{finish_reason}', auto-continuing ({auto_continue_count}/{self.max_auto_run})")
178
181
  except Exception as parse_error:
179
- trace = log_trace(parse_error,f"TaskEngine run_task_auto: Parse chunk error, chunk: {chunk}")
182
+ trace = log_trace(parse_error,f"XGATaskEngine run_task_auto: Parse chunk error, chunk: {chunk}")
180
183
  self.task_langfuse.root_span.event(name="engine_parse_chunk_error", level="ERROR",
181
184
  status_message=f"Task Engine parse chunk error: {parse_error}",
182
185
  metadata={"content": chunk, "trace": trace})
@@ -185,7 +188,7 @@ class XGATaskEngine:
185
188
  error_msg = self.add_response_message(type="status", content=status_content, is_llm_message=False)
186
189
  yield error_msg
187
190
  except Exception as run_error:
188
- trace = log_trace(run_error, "TaskEngine run_task_auto: Call task_run_once")
191
+ trace = log_trace(run_error, "XGATaskEngine run_task_auto: Call task_run_once")
189
192
  self.task_langfuse.root_span.event(name="engine_task_run_once_error", level="ERROR",
190
193
  status_message=f"Call task_run_once error: {run_error}",
191
194
  metadata={"trace": trace})
@@ -211,7 +214,7 @@ class XGATaskEngine:
211
214
  auto_count = continuous_state.get("auto_continue_count")
212
215
  langfuse_metadata = self.task_langfuse.create_llm_langfuse_meta(auto_count)
213
216
 
214
- llm_response = await self.llm_client.create_completion(llm_messages, langfuse_metadata)
217
+ llm_response = await self.llm_client.acompletion(llm_messages, langfuse_metadata)
215
218
  response_processor = self._create_response_processer()
216
219
 
217
220
  async for chunk in response_processor.process_response(llm_response, llm_messages, continuous_state):
@@ -271,7 +274,7 @@ class XGATaskEngine:
271
274
  logging.warning(f"❌ FINAL_RESULT: LLM Result is EMPTY, finish_reason={finish_reason}")
272
275
  final_result = XGATaskResult(type="error", content="LLM has no answer")
273
276
  except Exception as e:
274
- trace = log_trace(e, f"TaskEngine parse_final_result: Parse message chunk error, chunk: {chunk}")
277
+ trace = log_trace(e, f"XGATaskEngine parse_final_result: Parse message chunk error, chunk: {chunk}")
275
278
  self.task_langfuse.root_span.event(name="engine_parse_final_result_error", level="ERROR",
276
279
  status_message=f"Task Engine parse final result error: {e}",
277
280
  metadata={"content": chunk, "trace": trace})
@@ -285,11 +288,12 @@ class XGATaskEngine:
285
288
  is_llm_message: bool,
286
289
  metadata: Optional[Dict[str, Any]]=None)-> XGAResponseMessage:
287
290
  metadata = metadata or {}
288
- metadata["task_id"] = self.task_id
289
- metadata["task_run_id"] = self.task_run_id
290
- metadata["trace_id"] = self.task_langfuse.trace_id
291
- metadata["session_id"] = self.session_id
292
- metadata["agent_id"] = self.agent_id
291
+ metadata['task_id'] = self.task_id
292
+ metadata['task_run_id'] = self.task_run_id
293
+ metadata['trace_id'] = self.task_langfuse.trace_id
294
+ metadata['session_id'] = self.session_id
295
+ metadata['user_id'] = self.user_id
296
+ metadata['agent_id'] = self.agent_id
293
297
 
294
298
  message = XGAResponseMessage(
295
299
  message_id = f"xga_msg_{uuid4()}",
@@ -312,7 +316,7 @@ class XGATaskEngine:
312
316
  def get_history_llm_messages (self) -> List[Dict[str, Any]]:
313
317
  llm_messages = []
314
318
  for message in self.task_response_msgs:
315
- if message['is_llm_message']:
319
+ if message['is_llm_message'] and message['type'] != "assistant_chunk":
316
320
  llm_messages.append(message)
317
321
 
318
322
  response_llm_contents = []
@@ -359,7 +363,14 @@ class XGATaskEngine:
359
363
 
360
364
 
361
365
  def _create_task_langfuse(self)-> XGATaskLangFuse:
362
- return XGATaskLangFuse(self.session_id, self.task_id, self.task_run_id, self.task_no, self.agent_id)
366
+ return XGATaskLangFuse(
367
+ task_id = self.task_id,
368
+ task_run_id = self.task_run_id,
369
+ task_no = self.task_no,
370
+ session_id = self.session_id,
371
+ agent_id = self.agent_id,
372
+ user_id = self.user_id
373
+ )
363
374
 
364
375
 
365
376
  def _logging_reponse_chunk(self, chunk, auto_count: int)-> None:
@@ -384,11 +395,11 @@ class XGATaskEngine:
384
395
  pretty_content = json.dumps(status_content, ensure_ascii=False, indent=2)
385
396
 
386
397
  if chunk_type == "assistant_chunk":
387
- logging.debug(f"TASK_RESP_CHUNK[{auto_count}]<{chunk_type}{prefix}> content: {pretty_content}")
398
+ logging.debug(f"TASK_RESP_CHUNK[{self.task_no}]({auto_count})<{chunk_type}{prefix}> content: {pretty_content}")
388
399
  else:
389
- logging.info(f"TASK_RESP_CHUNK[{auto_count}]<{chunk_type}{prefix}> content: {pretty_content}")
400
+ logging.info(f"TASK_RESP_CHUNK[{self.task_no}]({auto_count})<{chunk_type}{prefix}> content: {pretty_content}")
390
401
  except Exception as e:
391
- logging.error(f"TaskEngine logging_reponse_chunk: Decorate chunk={chunk}, error: {e}")
402
+ logging.error(f"XGATaskEngine logging_reponse_chunk: Decorate chunk={chunk}, error: {e}")
392
403
 
393
404
 
394
405
 
@@ -410,7 +421,7 @@ if __name__ == "__main__":
410
421
  agent_id="agent_1"
411
422
  )
412
423
  user_input = "locate 10.0.0.1 fault and solution"
413
- final_result = await engine.run_task_with_final_answer(task_message={'role': "user", 'content': user_input})
424
+ final_result = await engine.run_task_with_final_answer(task_input={'role': "user", 'content': user_input})
414
425
  print(f"FINAL RESULT:{final_result}")
415
426
 
416
427
 
@@ -1,4 +1,4 @@
1
-
1
+ import logging
2
2
  from typing import Any, Dict, Optional
3
3
  from langfuse import Langfuse
4
4
 
@@ -10,10 +10,11 @@ class XGATaskLangFuse:
10
10
  langfuse: Langfuse = None
11
11
 
12
12
  def __init__(self,
13
- session_id: str,
14
13
  task_id:str,
15
14
  task_run_id: str,
16
15
  task_no: int,
16
+ session_id: str,
17
+ user_id: str,
17
18
  agent_id: str) -> None:
18
19
  if XGATaskLangFuse.langfuse is None:
19
20
  XGATaskLangFuse.langfuse = setup_langfuse()
@@ -22,6 +23,7 @@ class XGATaskLangFuse:
22
23
  self.task_id = task_id
23
24
  self.task_run_id = task_run_id
24
25
  self.task_no = task_no
26
+ self.user_id = user_id
25
27
  self.agent_id = agent_id
26
28
 
27
29
  self.trace_id = None
@@ -31,7 +33,7 @@ class XGATaskLangFuse:
31
33
 
32
34
  def start_root_span(self,
33
35
  root_span_name: str,
34
- task_message: Dict[str, Any],
36
+ task_input: Dict[str, Any],
35
37
  trace_id: Optional[str] = None):
36
38
  if self.root_span is None:
37
39
  trace = None
@@ -39,13 +41,25 @@ class XGATaskLangFuse:
39
41
  self.trace_id = trace_id
40
42
  trace = XGATaskLangFuse.langfuse.trace(id=trace_id)
41
43
  else:
42
- trace = XGATaskLangFuse.langfuse.trace(name="xga_task_engine")
44
+ trace = XGATaskLangFuse.langfuse.trace(name="xga_task_engine", session_id=self.session_id)
43
45
  self.trace_id = trace.id
44
46
 
45
- metadata = {'task_id': self.task_id, 'session_id': self.session_id, 'agent_id': self.agent_id}
46
- self.root_span = trace.span(id=self.task_run_id, name=root_span_name, input=task_message,metadata=metadata)
47
+ metadata = {
48
+ 'task_id' : self.task_id,
49
+ 'session_id' : self.session_id,
50
+ 'user_id' : self.user_id,
51
+ 'agent_id' : self.agent_id
52
+ }
53
+
54
+ self.root_span = trace.span(
55
+ id = self.task_run_id,
56
+ name = f"{root_span_name}[{self.task_no}]",
57
+ input = task_input,
58
+ metadata = metadata
59
+ )
47
60
  self.root_span_name = root_span_name
48
61
 
62
+ logging.info(f"{root_span_name} TASK_INPUT: {task_input}")
49
63
 
50
64
  def end_root_span(self, root_span_name:str, output: Optional[XGATaskResult]=None):
51
65
  if self.root_span and self.root_span_name == root_span_name:
@@ -55,7 +69,7 @@ class XGATaskLangFuse:
55
69
 
56
70
 
57
71
  def create_llm_langfuse_meta(self, llm_count:int)-> LangfuseMetadata:
58
- generation_name = f"xga_task_engine_llm_completion[{self.task_no}]({llm_count})"
72
+ generation_name = f"xga_engine_llm_completion[{self.task_no}]({llm_count})"
59
73
  generation_id = f"{self.task_run_id}({llm_count})"
60
74
  return LangfuseMetadata(
61
75
  generation_name = generation_name,
@@ -14,7 +14,7 @@ langfuse = setup_langfuse()
14
14
  def get_user_message(question)-> str:
15
15
  while True:
16
16
  user_message = input(f"\n💬 {question}: ")
17
- if user_message.lower() == 'exit':
17
+ if user_message.lower() == 'exit' or user_message.lower() == 'quit':
18
18
  print("\n====== Extreme General Agent Engine CLI EXIT ======")
19
19
  sys.exit()
20
20
 
@@ -44,7 +44,7 @@ async def cli() -> None:
44
44
  general_tools = ["*"]
45
45
 
46
46
  while True:
47
- user_message = get_user_message("Enter your message (or 'exit' to quit)")
47
+ user_message = get_user_message("Enter your task input message (or 'exit' to quit)")
48
48
 
49
49
  print("\n🔄 Running XGA Engine ...\n")
50
50
  engine = XGATaskEngine(tool_box=tool_box,
@@ -54,27 +54,24 @@ async def cli() -> None:
54
54
 
55
55
  # Two task run in same langfuse trace
56
56
  trace_id = langfuse.trace(name="xgae_cli").trace_id
57
-
58
- final_result = await engine.run_task_with_final_answer(
59
- task_message={'role': "user", 'content': user_message},
60
- trace_id=trace_id
61
- )
62
-
63
- if final_result["type"] == "ask":
64
- await asyncio.sleep(1)
65
- print(f"\n📌 ASK INFO: {final_result['content']}")
66
- user_message = get_user_message("Enter ASK information (or 'exit' to quit)")
57
+ auto_continue = True
58
+ while auto_continue:
59
+ auto_continue = False
67
60
  final_result = await engine.run_task_with_final_answer(
68
- task_message={'role': "user", 'content': user_message},
61
+ task_input={'role': "user", 'content': user_message},
69
62
  trace_id=trace_id
70
63
  )
71
64
 
72
- await asyncio.sleep(1)
73
- result_prefix = "✅" if final_result["type"] == "answer" else "❌"
74
- if final_result["type"] == "ask":
75
- print("\n *** IMPORTANT: XGA CLI only support showing ONE TURN ASK !")
76
- result_prefix = "⚠️"
77
- print(f"\n {result_prefix} FINAL RESULT: {final_result['content']}")
65
+ if final_result["type"] == "ask":
66
+ await asyncio.sleep(1)
67
+ print(f"\n📌 ASK INFO: {final_result['content']}")
68
+ user_message = get_user_message("Enter ASK information (or 'exit' to quit)")
69
+ auto_continue = True
70
+ continue
71
+
72
+ await asyncio.sleep(1)
73
+ result_prefix = "✅" if final_result["type"] == "answer" else "❌"
74
+ print(f"\n {result_prefix} FINAL RESULT: {final_result['content']}")
78
75
 
79
76
 
80
77
  def main():
xgae/utils/llm_client.py CHANGED
@@ -226,7 +226,10 @@ class LLMClient:
226
226
  logging.debug(f"LLMClient: Waiting {delay} seconds before retry llm completion...")
227
227
  await asyncio.sleep(delay)
228
228
 
229
- async def create_completion(self, messages: List[Dict[str, Any]], langfuse_metadata: Optional[LangfuseMetadata]=None) -> Union[ModelResponse, CustomStreamWrapper]:
229
+ async def acompletion(self,
230
+ messages: List[Dict[str, Any]],
231
+ langfuse_metadata: Optional[LangfuseMetadata]=None
232
+ ) -> Union[ModelResponse, CustomStreamWrapper]:
230
233
  complete_params = self._prepare_complete_params(messages)
231
234
  if LLMClient.langfuse_enabled and langfuse_metadata:
232
235
  complete_params["metadata"] = langfuse_metadata
@@ -234,19 +237,38 @@ class LLMClient:
234
237
  last_error = None
235
238
  for attempt in range(self.max_retries):
236
239
  try:
237
- logging.info(f"*** LLMClient create_completion: LLM '{self.model_name}' completion attempt {attempt + 1}/{self.max_retries}")
240
+ logging.info(f"*** LLMClient acompletion: LLM '{self.model_name}' completion attempt {attempt + 1}/{self.max_retries}")
238
241
  response = await litellm.acompletion(**complete_params)
239
242
  return response
240
243
  except (litellm.exceptions.RateLimitError, OpenAIError, json.JSONDecodeError) as e:
241
244
  last_error = e
242
245
  await self._handle_llm_error(e, attempt)
243
246
  except Exception as e:
244
- logging.error(f"LLMClient create_completion: Unexpected error during LLM completion: {str(e)}", exc_info=True)
247
+ logging.error(f"LLMClient acompletion: Unexpected error during LLM completion: {str(e)}", exc_info=True)
245
248
  raise LLMError(f"LLMClient create completion failed: {e}")
246
249
 
247
- logging.error(f"LLMClient create_completion: LLM completion failed after {self.max_retries} attempts: {last_error}", exc_info=True)
250
+ logging.error(f"LLMClient acompletion: LLM completion failed after {self.max_retries} attempts: {last_error}", exc_info=True)
248
251
  raise LLMError(f"LLMClient create completion failed after {self.max_retries} attempts !")
249
252
 
253
+
254
+ async def get_response_result(self, response: Union[ModelResponse, CustomStreamWrapper]) -> str:
255
+ response_text: str = ""
256
+
257
+ if self.is_stream:
258
+ async for chunk in response:
259
+ choices = chunk.get("choices", [{}])
260
+ if not choices:
261
+ continue
262
+ delta = choices[0].get("delta", {})
263
+ content = delta.get("content", "")
264
+ if content:
265
+ response_text += content
266
+ else:
267
+ response_text = response.choices[0].message.content
268
+
269
+ return response_text
270
+
271
+
250
272
  if __name__ == "__main__":
251
273
  from xgae.utils.setup_env import setup_logging
252
274
 
@@ -267,7 +289,7 @@ if __name__ == "__main__":
267
289
  session_id="session_0",
268
290
  )
269
291
 
270
- response = await llm_client.create_completion(messages, meta)
292
+ response = await llm_client.acompletion(messages, meta)
271
293
  if llm_client.is_stream:
272
294
  async for chunk in response:
273
295
  choices = chunk.get("choices", [{}])
@@ -1,10 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xgae
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Summary: Extreme General Agent Engine
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: colorlog==6.9.0
7
7
  Requires-Dist: langchain-mcp-adapters==0.1.9
8
+ Requires-Dist: langchain==0.3.27
8
9
  Requires-Dist: langfuse==2.60.9
9
10
  Requires-Dist: langgraph==0.6.5
10
11
  Requires-Dist: litellm==1.74.15
@@ -1,21 +1,21 @@
1
- xgae/__init__.py,sha256=OEUd9y9AoGBd3xYerdTTpz9xl4NWkmXeq1a2eil7Qro,72
2
- xgae/cli_app.py,sha256=ieTaS0b532P_8g9Mz2xda8TOZwYD2hKGnNZiarADAM0,3000
1
+ xgae/__init__.py,sha256=oBX_YzTliM-343BAlR-sD7BUZmsCJ7PY2oYrGBhsdLM,79
2
+ xgae/engine_cli_app.py,sha256=FdmIpq8KDsgyZNfwCDgNX7FEZFeRFyGOt_H1oZF8aKs,2890
3
3
  xgae/engine/engine_base.py,sha256=RR1em2wHiM2jP-peHt77SKdHWjnYOjdIIzN93zT61cA,1715
4
4
  xgae/engine/mcp_tool_box.py,sha256=G4hKIMguwg1cO4Us2NMfdloYim8kuikVyVTIPucJr7o,10903
5
5
  xgae/engine/prompt_builder.py,sha256=6I5rjgvNJ27QJ8DDuBTplutoPZdGs9LYFv3TSgT7zmc,5045
6
- xgae/engine/task_engine.py,sha256=_GfIpWGBd83jf2xnS0vDvgyQR0mqQSb6ZrGoBFFrMt4,21249
7
- xgae/engine/task_langfuse.py,sha256=n2bajsHq2Zt3jetel8cSlN2lo42mZgTmbR4Zbx9JvsM,2416
6
+ xgae/engine/task_engine.py,sha256=l0wOIIkyVUtyf95wSi4oXTHZjv15m9XB68pTk24baig,21641
7
+ xgae/engine/task_langfuse.py,sha256=ifkGrPBv2daLTKE-fCfEtOoI0n4Pd-lCwhyRRL0h308,2850
8
8
  xgae/engine/responser/non_stream_responser.py,sha256=zEJjqCgZVe2B8gkHYRFU7tmBV834f7w2a4Ws25P1N-c,5289
9
9
  xgae/engine/responser/responser_base.py,sha256=jhl1Bdz1Fs3KofGEymThNXlQuCORFTTkTAR_U47krds,24403
10
10
  xgae/engine/responser/stream_responser.py,sha256=cv4UGcxj8OksEogW7DUGTCvSJabu-DF6GceFyUwaXI4,7627
11
11
  xgae/tools/without_general_tools_app.py,sha256=KqsdhxD3hvTpiygaGUVHysRFjvv_1A8zOwMKN1J0J0U,3821
12
12
  xgae/utils/__init__.py,sha256=ElaGS-zdeZeu6is41u3Ny7lkvhg7BDSK-jMNg9j6K5A,499
13
13
  xgae/utils/json_helpers.py,sha256=WD4G5U9Dh8N6J9O0L5wGyqj-NHi09kcXHGdLD_26nlc,3607
14
- xgae/utils/llm_client.py,sha256=mWRtvtSMk_8NuzFReT9x52ayHlCNVZMZAltD6TQ-xZ8,14404
14
+ xgae/utils/llm_client.py,sha256=AphZ57n9VvaQBq6xu2_cRQE6DtIGN2PfQ2h7D50cATw,15056
15
15
  xgae/utils/misc.py,sha256=aMWOvJ9VW52q-L9Lkjl1hvXqLwpJAmyxA-Z8jzqFG0U,907
16
16
  xgae/utils/setup_env.py,sha256=MqNG0c2QQBDFU1kI8frxr9kB5d08Mmi3QZ1OoorgIa0,2662
17
17
  xgae/utils/xml_tool_parser.py,sha256=Mb0d8kBrfyAEvUwW1Nqir-3BgxZRr0ZX3WymQouuFSo,4859
18
- xgae-0.1.18.dist-info/METADATA,sha256=zMbJrDIxmWY79uRRluq-HuNOtxdE7jOQELEcRvVB57w,310
19
- xgae-0.1.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- xgae-0.1.18.dist-info/entry_points.txt,sha256=KdL6b_heFPyb1XIq5_L8Rgydpn64VDExFZafU_Qd9ow,222
21
- xgae-0.1.18.dist-info/RECORD,,
18
+ xgae-0.1.20.dist-info/METADATA,sha256=H8uCaLYabJqLy0BCBC_tP8B0Ti-dKiefMWqkZ_d3ySs,343
19
+ xgae-0.1.20.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
+ xgae-0.1.20.dist-info/entry_points.txt,sha256=wmvgtMQbtzTbDPETS-tbQJD7jVlcs4hp0w6wOB0ooCc,229
21
+ xgae-0.1.20.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  [console_scripts]
2
2
  example-a2a-tools = examples.tools.simu_a2a_tools_app:main
3
3
  example-fault-tools = examples.tools.custom_fault_tools_app:main
4
- xgae = xgae.cli_app:main
4
+ xgae = xgae.engine_cli_app:main
5
5
  xgae-tools = xgae.tools.without_general_tools_app:main
File without changes