lionagi 0.0.305__py3-none-any.whl → 0.0.307__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. lionagi/__init__.py +2 -5
  2. lionagi/core/__init__.py +7 -4
  3. lionagi/core/agent/__init__.py +3 -0
  4. lionagi/core/agent/base_agent.py +46 -0
  5. lionagi/core/branch/__init__.py +4 -0
  6. lionagi/core/branch/base/__init__.py +0 -0
  7. lionagi/core/branch/base_branch.py +100 -78
  8. lionagi/core/branch/branch.py +22 -34
  9. lionagi/core/branch/branch_flow_mixin.py +3 -7
  10. lionagi/core/branch/executable_branch.py +192 -0
  11. lionagi/core/branch/util.py +77 -162
  12. lionagi/core/direct/__init__.py +13 -0
  13. lionagi/core/direct/parallel_predict.py +127 -0
  14. lionagi/core/direct/parallel_react.py +0 -0
  15. lionagi/core/direct/parallel_score.py +0 -0
  16. lionagi/core/direct/parallel_select.py +0 -0
  17. lionagi/core/direct/parallel_sentiment.py +0 -0
  18. lionagi/core/direct/predict.py +174 -0
  19. lionagi/core/direct/react.py +33 -0
  20. lionagi/core/direct/score.py +163 -0
  21. lionagi/core/direct/select.py +144 -0
  22. lionagi/core/direct/sentiment.py +51 -0
  23. lionagi/core/direct/utils.py +83 -0
  24. lionagi/core/flow/__init__.py +0 -3
  25. lionagi/core/flow/monoflow/{mono_react.py → ReAct.py} +52 -9
  26. lionagi/core/flow/monoflow/__init__.py +9 -0
  27. lionagi/core/flow/monoflow/{mono_chat.py → chat.py} +11 -11
  28. lionagi/core/flow/monoflow/{mono_chat_mixin.py → chat_mixin.py} +33 -27
  29. lionagi/core/flow/monoflow/{mono_followup.py → followup.py} +7 -6
  30. lionagi/core/flow/polyflow/__init__.py +1 -0
  31. lionagi/core/flow/polyflow/{polychat.py → chat.py} +15 -3
  32. lionagi/core/mail/__init__.py +8 -0
  33. lionagi/core/mail/mail_manager.py +88 -40
  34. lionagi/core/mail/schema.py +32 -6
  35. lionagi/core/messages/__init__.py +3 -0
  36. lionagi/core/messages/schema.py +56 -25
  37. lionagi/core/prompt/__init__.py +0 -0
  38. lionagi/core/prompt/prompt_template.py +0 -0
  39. lionagi/core/schema/__init__.py +7 -5
  40. lionagi/core/schema/action_node.py +29 -0
  41. lionagi/core/schema/base_mixin.py +56 -59
  42. lionagi/core/schema/base_node.py +35 -38
  43. lionagi/core/schema/condition.py +24 -0
  44. lionagi/core/schema/data_logger.py +98 -98
  45. lionagi/core/schema/data_node.py +19 -19
  46. lionagi/core/schema/prompt_template.py +0 -0
  47. lionagi/core/schema/structure.py +293 -190
  48. lionagi/core/session/__init__.py +1 -3
  49. lionagi/core/session/session.py +196 -214
  50. lionagi/core/tool/tool_manager.py +95 -103
  51. lionagi/integrations/__init__.py +1 -3
  52. lionagi/integrations/bridge/langchain_/documents.py +17 -18
  53. lionagi/integrations/bridge/langchain_/langchain_bridge.py +14 -14
  54. lionagi/integrations/bridge/llamaindex_/llama_index_bridge.py +22 -22
  55. lionagi/integrations/bridge/llamaindex_/node_parser.py +12 -12
  56. lionagi/integrations/bridge/llamaindex_/reader.py +11 -11
  57. lionagi/integrations/bridge/llamaindex_/textnode.py +7 -7
  58. lionagi/integrations/config/openrouter_configs.py +0 -1
  59. lionagi/integrations/provider/oai.py +26 -26
  60. lionagi/integrations/provider/services.py +38 -38
  61. lionagi/libs/__init__.py +34 -1
  62. lionagi/libs/ln_api.py +211 -221
  63. lionagi/libs/ln_async.py +53 -60
  64. lionagi/libs/ln_convert.py +118 -120
  65. lionagi/libs/ln_dataframe.py +32 -33
  66. lionagi/libs/ln_func_call.py +334 -342
  67. lionagi/libs/ln_nested.py +99 -107
  68. lionagi/libs/ln_parse.py +175 -158
  69. lionagi/libs/sys_util.py +52 -52
  70. lionagi/tests/test_core/test_base_branch.py +427 -427
  71. lionagi/tests/test_core/test_branch.py +292 -292
  72. lionagi/tests/test_core/test_mail_manager.py +57 -57
  73. lionagi/tests/test_core/test_session.py +254 -266
  74. lionagi/tests/test_core/test_session_base_util.py +299 -300
  75. lionagi/tests/test_core/test_tool_manager.py +70 -74
  76. lionagi/tests/test_libs/test_nested.py +2 -7
  77. lionagi/tests/test_libs/test_parse.py +2 -2
  78. lionagi/version.py +1 -1
  79. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/METADATA +4 -2
  80. lionagi-0.0.307.dist-info/RECORD +115 -0
  81. lionagi-0.0.305.dist-info/RECORD +0 -94
  82. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/LICENSE +0 -0
  83. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/WHEEL +0 -0
  84. {lionagi-0.0.305.dist-info → lionagi-0.0.307.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,6 @@ import pandas as pd
4
4
 
5
5
  from lionagi.libs import ln_convert as convert
6
6
 
7
-
8
7
  ln_DataFrame = pd.DataFrame
9
8
  ln_Series = pd.Series
10
9
 
@@ -21,13 +20,13 @@ def extend_dataframe(
21
20
  Merges two DataFrames while ensuring no duplicate entries based on a specified unique column.
22
21
 
23
22
  Args:
24
- df1: The primary DataFrame.
25
- df2: The DataFrame to merge with the primary DataFrame.
26
- unique_col: The column name to check for duplicate entries. Defaults to 'node_id'.
27
- **kwargs: Additional keyword arguments for `drop_duplicates`.
23
+ df1: The primary DataFrame.
24
+ df2: The DataFrame to merge with the primary DataFrame.
25
+ unique_col: The column name to check for duplicate entries. Defaults to 'node_id'.
26
+ **kwargs: Additional keyword arguments for `drop_duplicates`.
28
27
 
29
28
  Returns:
30
- A DataFrame combined from df1 and df2 with duplicates removed based on the unique column.
29
+ A DataFrame combined from df1 and df2 with duplicates removed based on the unique column.
31
30
  """
32
31
  try:
33
32
  if len(df2.dropna(how="all")) > 0 and len(df1.dropna(how="all")) > 0:
@@ -40,7 +39,7 @@ def extend_dataframe(
40
39
  raise ValueError("No data to extend")
41
40
 
42
41
  except Exception as e:
43
- raise ValueError(f"Error in extending messages: {e}")
42
+ raise ValueError(f"Error in extending messages: {e}") from e
44
43
 
45
44
 
46
45
  def search_keywords(
@@ -57,16 +56,16 @@ def search_keywords(
57
56
  Filters a DataFrame for rows where a specified column contains given keywords.
58
57
 
59
58
  Args:
60
- df: The DataFrame to search through.
61
- keywords: A keyword or list of keywords to search for.
62
- col: The column to perform the search in. Defaults to "content".
63
- case_sensitive: Whether the search should be case-sensitive. Defaults to False.
64
- reset_index: Whether to reset the DataFrame's index after filtering. Defaults to False.
65
- dropna: Whether to drop rows with NA values before searching. Defaults to False.
59
+ df: The DataFrame to search through.
60
+ keywords: A keyword or list of keywords to search for.
61
+ col: The column to perform the search in. Defaults to "content".
62
+ case_sensitive: Whether the search should be case-sensitive. Defaults to False.
63
+ reset_index: Whether to reset the DataFrame's index after filtering. Defaults to False.
64
+ dropna: Whether to drop rows with NA values before searching. Defaults to False.
66
65
 
67
66
  Returns:
68
- A filtered DataFrame containing only rows where the specified column contains
69
- any of the provided keywords.
67
+ A filtered DataFrame containing only rows where the specified column contains
68
+ any of the provided keywords.
70
69
  """
71
70
 
72
71
  if isinstance(keywords, list):
@@ -99,11 +98,11 @@ def replace_keyword(
99
98
  Replaces occurrences of a specified keyword with a replacement string in a DataFrame column.
100
99
 
101
100
  Args:
102
- df: The DataFrame to modify.
103
- keyword: The keyword to be replaced.
104
- replacement: The string to replace the keyword with.
105
- col: The column in which to perform the replacement.
106
- case_sensitive: If True, performs a case-sensitive replacement. Defaults to False.
101
+ df: The DataFrame to modify.
102
+ keyword: The keyword to be replaced.
103
+ replacement: The string to replace the keyword with.
104
+ col: The column in which to perform the replacement.
105
+ case_sensitive: If True, performs a case-sensitive replacement. Defaults to False.
107
106
  """
108
107
 
109
108
  df_ = df.copy(deep=False) if inplace else df.copy()
@@ -123,11 +122,11 @@ def read_csv(filepath: str, **kwargs) -> pd.DataFrame:
123
122
  Reads a CSV file into a DataFrame with optional additional pandas read_csv parameters.
124
123
 
125
124
  Args:
126
- filepath: The path to the CSV file to read.
127
- **kwargs: Additional keyword arguments to pass to pandas.read_csv function.
125
+ filepath: The path to the CSV file to read.
126
+ **kwargs: Additional keyword arguments to pass to pandas.read_csv function.
128
127
 
129
128
  Returns:
130
- A DataFrame containing the data read from the CSV file.
129
+ A DataFrame containing the data read from the CSV file.
131
130
  """
132
131
  df = pd.read_csv(filepath, **kwargs)
133
132
  return convert.to_df(df)
@@ -143,14 +142,14 @@ def remove_last_n_rows(df: pd.DataFrame, steps: int) -> pd.DataFrame:
143
142
  Removes the last 'n' rows from a DataFrame.
144
143
 
145
144
  Args:
146
- df: The DataFrame from which to remove rows.
147
- steps: The number of rows to remove from the end of the DataFrame.
145
+ df: The DataFrame from which to remove rows.
146
+ steps: The number of rows to remove from the end of the DataFrame.
148
147
 
149
148
  Returns:
150
- A DataFrame with the last 'n' rows removed.
149
+ A DataFrame with the last 'n' rows removed.
151
150
 
152
151
  Raises:
153
- ValueError: If 'steps' is negative or greater than the number of rows in the DataFrame.
152
+ ValueError: If 'steps' is negative or greater than the number of rows in the DataFrame.
154
153
  """
155
154
 
156
155
  if steps < 0 or steps > len(df):
@@ -166,17 +165,17 @@ def update_row(df: pd.DataFrame, row: str | int, column: str | int, value: Any)
166
165
  Updates a row's value for a specified column in a DataFrame.
167
166
 
168
167
  Args:
169
- df: The DataFrame to update.
170
- col: The column whose value is to be updated.
171
- old_value: The current value to search for in the specified column.
172
- new_value: The new value to replace the old value with.
168
+ df: The DataFrame to update.
169
+ col: The column whose value is to be updated.
170
+ old_value: The current value to search for in the specified column.
171
+ new_value: The new value to replace the old value with.
173
172
 
174
173
  Returns:
175
- True if the update was successful, False otherwise.
174
+ True if the update was successful, False otherwise.
176
175
  """
177
176
 
178
177
  try:
179
178
  df.loc[row, column] = value
180
179
  return True
181
- except:
180
+ except Exception:
182
181
  return False