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

@@ -18,14 +18,14 @@ class XGATaskLangFuse:
18
18
  if XGATaskLangFuse.langfuse is None:
19
19
  XGATaskLangFuse.langfuse = setup_langfuse()
20
20
 
21
- self.session_id = session_id
22
- self.task_id = task_id
23
- self.task_run_id = task_run_id
24
- self.task_no = task_no
25
- self.agent_id = agent_id
21
+ self.session_id = session_id
22
+ self.task_id = task_id
23
+ self.task_run_id = task_run_id
24
+ self.task_no = task_no
25
+ self.agent_id = agent_id
26
26
 
27
- self.trace_id = None
28
- self.root_span = None
27
+ self.trace_id = None
28
+ self.root_span = None
29
29
  self.root_span_name = None
30
30
 
31
31
 
@@ -58,8 +58,8 @@ class XGATaskLangFuse:
58
58
  generation_name = f"xga_task_engine_llm_completion[{self.task_no}]({llm_count})"
59
59
  generation_id = f"{self.task_run_id}({llm_count})"
60
60
  return LangfuseMetadata(
61
- generation_name=generation_name,
62
- generation_id=generation_id,
63
- existing_trace_id=self.trace_id,
64
- session_id=self.session_id,
61
+ generation_name = generation_name,
62
+ generation_id = generation_id,
63
+ existing_trace_id = self.trace_id,
64
+ session_id = self.session_id,
65
65
  )
@@ -137,32 +137,3 @@ def to_json_string(value: Any) -> str:
137
137
  # For all other types, convert to JSON
138
138
  return json.dumps(value)
139
139
 
140
-
141
- def format_for_yield(message_object: Dict[str, Any]) -> Dict[str, Any]:
142
- """
143
- Format a message object for yielding, ensuring content and metadata are JSON strings.
144
-
145
- This maintains backward compatibility with clients expecting JSON strings
146
- while the database now stores proper objects.
147
-
148
- Args:
149
- message_object: The message object from the database
150
-
151
- Returns:
152
- Message object with content and metadata as JSON strings
153
- """
154
- if not message_object:
155
- return message_object
156
-
157
- # Create a copy to avoid modifying the original
158
- formatted = message_object.copy()
159
-
160
- # Ensure content is a JSON string
161
- if 'content' in formatted and not isinstance(formatted['content'], str):
162
- formatted['content'] = json.dumps(formatted['content'], ensure_ascii=False, indent=2)
163
-
164
- # Ensure metadata is a JSON string
165
- if 'metadata' in formatted and not isinstance(formatted['metadata'], str):
166
- formatted['metadata'] = json.dumps(formatted['metadata'], ensure_ascii=False, indent=2)
167
-
168
- return formatted
xgae/utils/llm_client.py CHANGED
@@ -51,34 +51,34 @@ class LLMClient:
51
51
  self._init_langfuse()
52
52
 
53
53
  llm_config = llm_config or LLMConfig()
54
- self.max_retries = int(os.getenv("LLM_MAX_RETRIES", 1))
54
+ self.max_retries = int(os.getenv('LLM_MAX_RETRIES', 1))
55
55
 
56
- env_llm_model = os.getenv("LLM_MODEL", "openai/qwen3-235b-a22b")
57
- env_llm_api_key = os.getenv("LLM_API_KEY")
58
- env_llm_api_base = os.getenv("LLM_API_BASE", "https://dashscope.aliyuncs.com/compatible-mode/v1")
59
- env_llm_max_tokens = int(os.getenv("LLM_MAX_TOKENS", 16384))
60
- env_llm_temperature = float(os.getenv("LLM_TEMPERATURE", 0.7))
61
- env_llm_stream = to_bool(os.getenv("LLM_STREAM", False))
62
- env_llm_enable_thinking = to_bool(os.getenv("LLM_ENABLE_THINKING", False))
56
+ env_llm_model = os.getenv('LLM_MODEL', "openai/qwen3-235b-a22b")
57
+ env_llm_api_key = os.getenv('LLM_API_KEY')
58
+ env_llm_api_base = os.getenv('LLM_API_BASE', "https://dashscope.aliyuncs.com/compatible-mode/v1")
59
+ env_llm_max_tokens = int(os.getenv('LLM_MAX_TOKENS', 16384))
60
+ env_llm_temperature = float(os.getenv('LLM_TEMPERATURE', 0.7))
61
+ env_llm_stream = to_bool(os.getenv('LLM_STREAM', False))
62
+ env_llm_enable_thinking = to_bool(os.getenv('LLM_ENABLE_THINKING', False))
63
63
 
64
64
  llm_config_params = {
65
- "model": llm_config.get("model", env_llm_model),
66
- "model_name": llm_config.get("model_name", env_llm_model),
67
- "model_id": llm_config.get("model_id", None),
68
- "api_key": llm_config.get("api_key", env_llm_api_key),
69
- "api_base": llm_config.get("api_base", env_llm_api_base),
70
- "temperature": llm_config.get("temperature", env_llm_temperature),
71
- "max_tokens": llm_config.get("max_tokens", env_llm_max_tokens),
72
- "stream": llm_config.get("stream", env_llm_stream),
73
- "enable_thinking": llm_config.get("enable_thinking", env_llm_enable_thinking),
74
- "reasoning_effort": llm_config.get("reasoning_effort", 'low'),
75
- "response_format": llm_config.get("response_format", None),
76
- "top_p": llm_config.get("top_p", None),
77
- "tools": None,
78
- "tool_choice": "none",
65
+ 'model': llm_config.get('model', env_llm_model),
66
+ 'model_name': llm_config.get('model_name', env_llm_model),
67
+ 'model_id': llm_config.get('model_id', None),
68
+ 'api_key': llm_config.get('api_key', env_llm_api_key),
69
+ 'api_base': llm_config.get('api_base', env_llm_api_base),
70
+ 'temperature': llm_config.get('temperature', env_llm_temperature),
71
+ 'max_tokens': llm_config.get('max_tokens', env_llm_max_tokens),
72
+ 'stream': llm_config.get('stream', env_llm_stream),
73
+ 'enable_thinking': llm_config.get('enable_thinking', env_llm_enable_thinking),
74
+ 'reasoning_effort': llm_config.get('reasoning_effort', "low"),
75
+ 'response_format': llm_config.get('response_format', None),
76
+ 'top_p': llm_config.get('top_p', None),
77
+ 'tools': None,
78
+ 'tool_choice': 'none',
79
79
  }
80
80
 
81
- self.model_name = llm_config_params["model_name"]
81
+ self.model_name = llm_config_params['model_name']
82
82
  self.is_stream = llm_config_params['stream']
83
83
 
84
84
  self.lite_llm_params = self._prepare_llm_params(llm_config_params)
@@ -95,8 +95,8 @@ class XMLToolParser:
95
95
  """Parse a single invoke block into an XMLToolCall."""
96
96
  parameters = {}
97
97
  parsing_details = {
98
- "function_name": function_name,
99
- "raw_parameters": {}
98
+ 'function_name': function_name,
99
+ 'raw_parameters': {}
100
100
  }
101
101
 
102
102
  param_matches = self.PARAMETER_PATTERN.findall(invoke_content)
@@ -104,7 +104,7 @@ class XMLToolParser:
104
104
  param_value = param_value.strip()
105
105
  parsed_value = self._parse_parameter_value(param_value)
106
106
  parameters[param_name] = parsed_value
107
- parsing_details["raw_parameters"][param_name] = param_value
107
+ parsing_details['raw_parameters'][param_name] = param_value
108
108
 
109
109
  # Extract the raw XML for this specific invoke
110
110
  invoke_pattern = re.compile(
@@ -115,10 +115,10 @@ class XMLToolParser:
115
115
  raw_xml = raw_xml_match.group(0) if raw_xml_match else f"<invoke name=\"{function_name}\">...</invoke>"
116
116
 
117
117
  return XMLToolCall(
118
- function_name=function_name,
119
- parameters=parameters,
120
- raw_xml=raw_xml,
121
- parsing_details=parsing_details
118
+ function_name = function_name,
119
+ parameters = parameters,
120
+ raw_xml = raw_xml,
121
+ parsing_details = parsing_details
122
122
  )
123
123
 
124
124
  def _parse_parameter_value(self, value: str) -> Any:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xgae
3
- Version: 0.1.14
3
+ Version: 0.1.15
4
4
  Summary: Extreme General Agent Engine
5
5
  Requires-Python: >=3.13
6
6
  Requires-Dist: colorlog==6.9.0
@@ -0,0 +1,21 @@
1
+ xgae/__init__.py,sha256=OEUd9y9AoGBd3xYerdTTpz9xl4NWkmXeq1a2eil7Qro,72
2
+ xgae/cli_app.py,sha256=vKuCIJw0gwXdtkT-QNCZKt2dE53thvTFwQr7nTgvaPY,3000
3
+ xgae/engine/engine_base.py,sha256=-QZqLRbQdwRUfbY4l3i7dFfMB-BL267a-wGZR9bMPLc,1662
4
+ xgae/engine/mcp_tool_box.py,sha256=ohlSN8NLoZR-tQyldoE3gX3cPoAUhmp5-ih0vSk4haM,10415
5
+ xgae/engine/prompt_builder.py,sha256=nw9BEROI6IbmNMLgggUTegfqN8FjbSO2lixTbpho3I4,4365
6
+ xgae/engine/task_engine.py,sha256=6YsibsPkZI526YzqGzRkAT0NoRZBU_NzUXjKZFAm-Ww,20999
7
+ xgae/engine/task_langfuse.py,sha256=86KRHpLs1cVh2b9PfcHzYGGmfxLZ37URI1cMZxKiGis,2416
8
+ xgae/engine/responser/non_stream_responser.py,sha256=5K1FwhlX4-21Z-BJKTqvZo-RdHaG0zqcpgC7t_5_ibI,5442
9
+ xgae/engine/responser/responser_base.py,sha256=UPXFOCT1HWBlyGeRMRE0yBwQgmd67OwIJYMUPZB7lBg,24782
10
+ xgae/engine/responser/stream_responser.py,sha256=1IpOkGWYKSb-RU_tJlxE_RkzOcH_M41qK_WwyuDubdw,15367
11
+ xgae/tools/without_general_tools_app.py,sha256=FGMV6njcOKwwfitc0j_nUov0RC-eWlhO1IP8_KHz1tQ,3788
12
+ xgae/utils/__init__.py,sha256=ElaGS-zdeZeu6is41u3Ny7lkvhg7BDSK-jMNg9j6K5A,499
13
+ xgae/utils/json_helpers.py,sha256=WD4G5U9Dh8N6J9O0L5wGyqj-NHi09kcXHGdLD_26nlc,3607
14
+ xgae/utils/llm_client.py,sha256=mWRtvtSMk_8NuzFReT9x52ayHlCNVZMZAltD6TQ-xZ8,14404
15
+ xgae/utils/misc.py,sha256=aMWOvJ9VW52q-L9Lkjl1hvXqLwpJAmyxA-Z8jzqFG0U,907
16
+ xgae/utils/setup_env.py,sha256=MqNG0c2QQBDFU1kI8frxr9kB5d08Mmi3QZ1OoorgIa0,2662
17
+ xgae/utils/xml_tool_parser.py,sha256=wWtmir64xPq39oGF_fe9JRJuhFocSJ0xyG-gMuflKOc,4805
18
+ xgae-0.1.15.dist-info/METADATA,sha256=KiVg_6tDTUNlymMa-ZgyqE6XjADFm8MbwOU_cLCepxE,310
19
+ xgae-0.1.15.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
+ xgae-0.1.15.dist-info/entry_points.txt,sha256=SWN01JNAncV0oApEvFzpH0wsXfnFlB1adCH4IrAJxGc,163
21
+ xgae-0.1.15.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- xgae/__init__.py,sha256=OEUd9y9AoGBd3xYerdTTpz9xl4NWkmXeq1a2eil7Qro,72
2
- xgae/cli_app.py,sha256=vKuCIJw0gwXdtkT-QNCZKt2dE53thvTFwQr7nTgvaPY,3000
3
- xgae/engine/engine_base.py,sha256=-QZqLRbQdwRUfbY4l3i7dFfMB-BL267a-wGZR9bMPLc,1662
4
- xgae/engine/mcp_tool_box.py,sha256=ot1lpMw77e6VLe4UPCJw3TxcjIXBqzg_qphdmHmW2XQ,10414
5
- xgae/engine/prompt_builder.py,sha256=X9bS7YIms6LYplCpNHeUmi74xFP5MwFXmXNqOt1Xz-Q,4356
6
- xgae/engine/task_engine.py,sha256=ayv4DTwDArMRQ_CPBxt8tdk7E7JPB0Osb5jxlikMsxM,21052
7
- xgae/engine/task_langfuse.py,sha256=b0aJ_Di-WDcYzi0TFCvcKWxkBz7PYP2jx3N52OptQMs,2349
8
- xgae/engine/responser/non_stream_responser.py,sha256=_DkyBZ50N1Tm8K0W16MD5vgx2Eu_amt2LgfN_7Ej1Us,5542
9
- xgae/engine/responser/responser_base.py,sha256=mgioPh1atCd5PueumyxAN7eB87SB7wOSB_mLTI-6lIg,25250
10
- xgae/engine/responser/stream_responser.py,sha256=AVEs0pkLZNPzXcp5A1iFNjDb-aUy7_NWRqThCZqmIyQ,14852
11
- xgae/tools/without_general_tools_app.py,sha256=FGMV6njcOKwwfitc0j_nUov0RC-eWlhO1IP8_KHz1tQ,3788
12
- xgae/utils/__init__.py,sha256=ElaGS-zdeZeu6is41u3Ny7lkvhg7BDSK-jMNg9j6K5A,499
13
- xgae/utils/json_helpers.py,sha256=ubp-dOCeROnZv7JHARRdmDIO5Npdwzrt8AWo3SMv0kI,4705
14
- xgae/utils/llm_client.py,sha256=6e3kzx73QN6z2SYMQQFmrmODj2Rk-GPJYIxBcFZhMQE,14361
15
- xgae/utils/misc.py,sha256=aMWOvJ9VW52q-L9Lkjl1hvXqLwpJAmyxA-Z8jzqFG0U,907
16
- xgae/utils/setup_env.py,sha256=MqNG0c2QQBDFU1kI8frxr9kB5d08Mmi3QZ1OoorgIa0,2662
17
- xgae/utils/xml_tool_parser.py,sha256=I9xAZC_ElwBY19PNUq-WLXe9FSIJMeAv2Xs-VlajI7Y,4782
18
- xgae-0.1.14.dist-info/METADATA,sha256=WGVnO2sWvP3EM98tObwlafmkfIRHl2oSTUn5rBsZ3HM,310
19
- xgae-0.1.14.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- xgae-0.1.14.dist-info/entry_points.txt,sha256=SWN01JNAncV0oApEvFzpH0wsXfnFlB1adCH4IrAJxGc,163
21
- xgae-0.1.14.dist-info/RECORD,,
File without changes