alita-sdk 0.3.419__py3-none-any.whl → 0.3.420__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.
@@ -138,6 +138,7 @@ def create_state(data: Optional[dict] = None):
138
138
  for key, value in data.items():
139
139
  # support of old & new UI
140
140
  value = value['type'] if isinstance(value, dict) else value
141
+ value = 'str' if value == 'string' else value # normalize string type (old state support)
141
142
  if key == 'messages':
142
143
  state_dict[key] = Annotated[list[AnyMessage], add_messages]
143
144
  elif value in ['str', 'int', 'float', 'bool', 'list', 'dict', 'number', 'dict']:
@@ -184,7 +185,7 @@ def propagate_the_input_mapping(input_mapping: dict[str, dict], input_variables:
184
185
  logger.error(f"KeyError in fstring formatting for key '{key}'. Attempt to find proper data in state.\n{e}")
185
186
  try:
186
187
  # search for variables in state if not found in var_dict
187
- input_data[key] = value['value'].format(**state)
188
+ input_data[key] = safe_format(value['value'], state)
188
189
  except KeyError as no_var_exception:
189
190
  logger.error(f"KeyError in fstring formatting for key '{key}' with state data.\n{no_var_exception}")
190
191
  # leave value as is if still not found (could be a constant string marked as fstring by mistake)
@@ -195,6 +196,13 @@ def propagate_the_input_mapping(input_mapping: dict[str, dict], input_variables:
195
196
  input_data[key] = source.get(value['value'], "")
196
197
  return input_data
197
198
 
199
+ def safe_format(template, mapping):
200
+ """Format a template string using a mapping, leaving placeholders unchanged if keys are missing."""
201
+
202
+ def replacer(match):
203
+ key = match.group(1)
204
+ return str(mapping.get(key, f'{{{key}}}'))
205
+ return re.sub(r'\{(\w+)\}', replacer, template)
198
206
 
199
207
  def create_pydantic_model(model_name: str, variables: dict[str, dict]):
200
208
  fields = {}
@@ -91,6 +91,10 @@ class LLMNode(BaseTool):
91
91
  f"Actual params: {func_args}")
92
92
  # cast to str in case user passes variable different from str
93
93
  messages = [SystemMessage(content=str(func_args.get('system'))), *func_args.get('chat_history', []), HumanMessage(content=str(func_args.get('task')))]
94
+ # Remove pre-last item if last two messages are same type and content
95
+ if len(messages) >= 2 and type(messages[-1]) == type(messages[-2]) and messages[-1].content == messages[
96
+ -2].content:
97
+ messages.pop(-2)
94
98
  else:
95
99
  # Flow for chat-based LLM node w/o prompt/task from pipeline but with messages in state
96
100
  # verify messages structure
@@ -474,9 +474,10 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
474
474
  "index_configuration": index_configuration,
475
475
  "created_on": created_on,
476
476
  "updated_on": created_on,
477
- "history": "[]",
478
477
  "task_id": None,
478
+ "conversation_id": None,
479
479
  }
480
+ metadata["history"] = json.dumps([metadata])
480
481
  index_meta_doc = Document(page_content=f"{IndexerKeywords.INDEX_META_TYPE.value}_{index_name}", metadata=metadata)
481
482
  add_documents(vectorstore=self.vectorstore, documents=[index_meta_doc])
482
483
 
@@ -489,6 +490,20 @@ class BaseIndexerToolkit(VectorStoreWrapperBase):
489
490
  metadata["indexed"] = result
490
491
  metadata["state"] = state
491
492
  metadata["updated_on"] = time.time()
493
+ #
494
+ history_raw = metadata.pop("history", "[]")
495
+ try:
496
+ history = json.loads(history_raw) if history_raw.strip() else []
497
+ # replace the last history item with updated metadata
498
+ if history and isinstance(history, list):
499
+ history[-1] = metadata
500
+ else:
501
+ history = [metadata]
502
+ except (json.JSONDecodeError, TypeError):
503
+ logger.warning(f"Failed to load index history: {history_raw}. Create new with only current item.")
504
+ history = [metadata]
505
+ #
506
+ metadata["history"] = json.dumps(history)
492
507
  index_meta_doc = Document(page_content=index_meta_raw.get("content", ""), metadata=metadata)
493
508
  add_documents(vectorstore=self.vectorstore, documents=[index_meta_doc], ids=[index_meta_raw.get("id")])
494
509
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.419
3
+ Version: 0.3.420
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedj27@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -49,7 +49,7 @@ alita_sdk/runtime/langchain/langraph_agent.py,sha256=9ezh0iDTQwyE4PBH96k9g31Mz2Y
49
49
  alita_sdk/runtime/langchain/mixedAgentParser.py,sha256=M256lvtsL3YtYflBCEp-rWKrKtcY1dJIyRGVv7KW9ME,2611
50
50
  alita_sdk/runtime/langchain/mixedAgentRenderes.py,sha256=asBtKqm88QhZRILditjYICwFVKF5KfO38hu2O-WrSWE,5964
51
51
  alita_sdk/runtime/langchain/store_manager.py,sha256=i8Fl11IXJhrBXq1F1ukEVln57B1IBe-tqSUvfUmBV4A,2218
52
- alita_sdk/runtime/langchain/utils.py,sha256=GxqG1xhdUd6BC01ZZFkdc_0Q27LNgc-mr6t_1LD7GRU,7579
52
+ alita_sdk/runtime/langchain/utils.py,sha256=GnHC3TzOrrrPtrSO2d_4WIevUXbd06hrHZ3l9ckvhQc,7980
53
53
  alita_sdk/runtime/langchain/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
54
  alita_sdk/runtime/langchain/agents/xml_chat.py,sha256=Mx7PK5T97_GrFCwHHZ3JZP42S7MwtUzV0W-_8j6Amt8,6212
55
55
  alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py,sha256=4kFU1ijrM1Jw7cywQv8mUiBHlE6w-uqfzSZP4hUV5P4,3771
@@ -114,7 +114,7 @@ alita_sdk/runtime/tools/function.py,sha256=VOgcCjsDfyH2kBbX4k3DtwpsW7aX0JETahC26
114
114
  alita_sdk/runtime/tools/graph.py,sha256=7jImBBSEdP5Mjnn2keOiyUwdGDFhEXLUrgUiugO3mgA,3503
115
115
  alita_sdk/runtime/tools/image_generation.py,sha256=Kls9D_ke_SK7xmVr7I9SlQcAEBJc86gf66haN0qIj9k,7469
116
116
  alita_sdk/runtime/tools/indexer_tool.py,sha256=whSLPevB4WD6dhh2JDXEivDmTvbjiMV1MrPl9cz5eLA,4375
117
- alita_sdk/runtime/tools/llm.py,sha256=Oq0IH1mVEgtkw-8p5y-_xTCz-OcWtfvtR5xl19Anrhc,15875
117
+ alita_sdk/runtime/tools/llm.py,sha256=iRG_wU4T01LRsjEMPZe5Uah7LiMqDc-vspwkMuQtltk,16136
118
118
  alita_sdk/runtime/tools/loop.py,sha256=uds0WhZvwMxDVFI6MZHrcmMle637cQfBNg682iLxoJA,8335
119
119
  alita_sdk/runtime/tools/loop_output.py,sha256=U4hO9PCQgWlXwOq6jdmCGbegtAxGAPXObSxZQ3z38uk,8069
120
120
  alita_sdk/runtime/tools/mcp_server_tool.py,sha256=MhLxZJ44LYrB_0GrojmkyqKoDRaqIHkEQAsg718ipog,4277
@@ -136,7 +136,7 @@ alita_sdk/runtime/utils/toolkit_runtime.py,sha256=MU63Fpxj0b5_r1IUUc0Q3-PN9VwL7r
136
136
  alita_sdk/runtime/utils/toolkit_utils.py,sha256=I9QFqnaqfVgN26LUr6s3XlBlG6y0CoHURnCzG7XcwVs,5311
137
137
  alita_sdk/runtime/utils/utils.py,sha256=PJK8A-JVIzY1IowOjGG8DIqsIiEFe65qDKvFcjJCKWA,1041
138
138
  alita_sdk/tools/__init__.py,sha256=wrcSP0AN6HukZHPXpObCKI58cY0lVpHyzbpq609CMhE,10726
139
- alita_sdk/tools/base_indexer_toolkit.py,sha256=7UTcrmvGvmIBF3WGKrsEp7zJL-XB1JIgaRkbE1ZSS9A,26439
139
+ alita_sdk/tools/base_indexer_toolkit.py,sha256=hK1Q2dvNctZCw2K1-khlQrR1Q0JDQviZjqDUiqpnazg,27180
140
140
  alita_sdk/tools/code_indexer_toolkit.py,sha256=2VkOC8JfBDc25_jp-NWyMYqpaYRETIzTJFLrIYrfBpE,7814
141
141
  alita_sdk/tools/elitea_base.py,sha256=34fmVdYgd2YXifU5LFNjMQysr4OOIZ6AOZjq4GxLgSw,34417
142
142
  alita_sdk/tools/non_code_indexer_toolkit.py,sha256=6Lrqor1VeSLbPLDHAfg_7UAUqKFy1r_n6bdsc4-ak98,1315
@@ -353,8 +353,8 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=kT0TbmMvuKhDUZc0i7KO18O38JM9S
353
353
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=0ne8XLJEQSLOWfzd2HdnqOYmQlUliKHbBED5kW_Vias,2895
354
354
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
355
355
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
356
- alita_sdk-0.3.419.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
- alita_sdk-0.3.419.dist-info/METADATA,sha256=Uqn7Qo3w7QK8Jntv7H1pTLRf3ZHjndnY1NADGUnPlV4,19071
358
- alita_sdk-0.3.419.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
- alita_sdk-0.3.419.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
- alita_sdk-0.3.419.dist-info/RECORD,,
356
+ alita_sdk-0.3.420.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
357
+ alita_sdk-0.3.420.dist-info/METADATA,sha256=AeXKBZovWOgn_XGXStvfBGyzRJ7_vubjwyKN57hf9P8,19071
358
+ alita_sdk-0.3.420.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
359
+ alita_sdk-0.3.420.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
360
+ alita_sdk-0.3.420.dist-info/RECORD,,