memra 0.2.3__py3-none-any.whl → 0.2.4__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.
Files changed (55) hide show
  1. memra/execution.py +10 -0
  2. memra/tool_registry.py +8 -0
  3. {memra-0.2.3.dist-info → memra-0.2.4.dist-info}/METADATA +45 -1
  4. memra-0.2.4.dist-info/RECORD +58 -0
  5. memra-0.2.4.dist-info/licenses/LICENSE +0 -0
  6. memra-0.2.4.dist-info/top_level.txt +4 -0
  7. memra-ops/app.py +710 -0
  8. memra-ops/config/config.py +25 -0
  9. memra-ops/config.py +34 -0
  10. memra-ops/scripts/release.py +133 -0
  11. memra-ops/scripts/start_memra.py +334 -0
  12. memra-ops/scripts/stop_memra.py +132 -0
  13. memra-ops/server_tool_registry.py +188 -0
  14. memra-ops/tests/test_llm_text_to_sql.py +115 -0
  15. memra-ops/tests/test_llm_vs_pattern.py +130 -0
  16. memra-ops/tests/test_mcp_schema_aware.py +124 -0
  17. memra-ops/tests/test_schema_aware_sql.py +139 -0
  18. memra-ops/tests/test_schema_aware_sql_simple.py +66 -0
  19. memra-ops/tests/test_text_to_sql_demo.py +140 -0
  20. memra-ops/tools/mcp_bridge_server.py +851 -0
  21. memra-sdk/examples/accounts_payable.py +215 -0
  22. memra-sdk/examples/accounts_payable_client.py +217 -0
  23. memra-sdk/examples/accounts_payable_mcp.py +200 -0
  24. memra-sdk/examples/ask_questions.py +123 -0
  25. memra-sdk/examples/invoice_processing.py +116 -0
  26. memra-sdk/examples/propane_delivery.py +87 -0
  27. memra-sdk/examples/simple_text_to_sql.py +158 -0
  28. memra-sdk/memra/__init__.py +31 -0
  29. memra-sdk/memra/discovery.py +15 -0
  30. memra-sdk/memra/discovery_client.py +49 -0
  31. memra-sdk/memra/execution.py +481 -0
  32. memra-sdk/memra/models.py +99 -0
  33. memra-sdk/memra/tool_registry.py +343 -0
  34. memra-sdk/memra/tool_registry_client.py +106 -0
  35. memra-sdk/scripts/release.py +133 -0
  36. memra-sdk/setup.py +52 -0
  37. memra-workflows/accounts_payable/accounts_payable.py +215 -0
  38. memra-workflows/accounts_payable/accounts_payable_client.py +216 -0
  39. memra-workflows/accounts_payable/accounts_payable_mcp.py +200 -0
  40. memra-workflows/accounts_payable/accounts_payable_smart.py +221 -0
  41. memra-workflows/invoice_processing/invoice_processing.py +116 -0
  42. memra-workflows/invoice_processing/smart_invoice_processor.py +220 -0
  43. memra-workflows/logic/__init__.py +1 -0
  44. memra-workflows/logic/file_tools.py +50 -0
  45. memra-workflows/logic/invoice_tools.py +501 -0
  46. memra-workflows/logic/propane_agents.py +52 -0
  47. memra-workflows/mcp_bridge_server.py +230 -0
  48. memra-workflows/propane_delivery/propane_delivery.py +87 -0
  49. memra-workflows/text_to_sql/complete_invoice_workflow_with_queries.py +208 -0
  50. memra-workflows/text_to_sql/complete_text_to_sql_system.py +266 -0
  51. memra-workflows/text_to_sql/file_discovery_demo.py +156 -0
  52. memra-0.2.3.dist-info/RECORD +0 -12
  53. memra-0.2.3.dist-info/top_level.txt +0 -1
  54. {memra-0.2.3.dist-info → memra-0.2.4.dist-info}/WHEEL +0 -0
  55. {memra-0.2.3.dist-info → memra-0.2.4.dist-info}/entry_points.txt +0 -0
memra/execution.py CHANGED
@@ -368,6 +368,16 @@ class ExecutionEngine:
368
368
  not tool_data.get("_mock", False) # Not mock data
369
369
  )
370
370
 
371
+ elif tool_name == "SQLExecutor":
372
+ # Real work if it actually executed SQL and returned real results
373
+ return (
374
+ "query" in tool_data and
375
+ "results" in tool_data and
376
+ isinstance(tool_data["results"], list) and
377
+ "row_count" in tool_data and
378
+ not tool_data.get("_mock", False) # Not mock data
379
+ )
380
+
371
381
  # Default to mock work
372
382
  return False
373
383
 
memra/tool_registry.py CHANGED
@@ -128,24 +128,32 @@ class ToolRegistry:
128
128
  last_error = None
129
129
  for endpoint in endpoints_to_try:
130
130
  try:
131
+ logger.info(f"Trying endpoint: {endpoint}")
131
132
  with httpx.Client(timeout=60.0) as client:
132
133
  response = client.post(endpoint, json=payload, headers=headers)
133
134
 
135
+ logger.info(f"Response status for {endpoint}: {response.status_code}")
136
+
134
137
  if response.status_code == 200:
135
138
  result = response.json()
136
139
  logger.info(f"MCP tool {tool_name} executed successfully via {endpoint}")
137
140
  return result
138
141
  elif response.status_code == 404:
142
+ logger.info(f"Endpoint {endpoint} returned 404, trying next...")
139
143
  continue # Try next endpoint
140
144
  else:
145
+ logger.error(f"Endpoint {endpoint} returned {response.status_code}: {response.text}")
141
146
  response.raise_for_status()
142
147
 
143
148
  except httpx.HTTPStatusError as e:
144
149
  if e.response.status_code == 404:
150
+ logger.info(f"Endpoint {endpoint} returned 404, trying next...")
145
151
  continue # Try next endpoint
152
+ logger.error(f"HTTP error for {endpoint}: {e.response.status_code} - {e.response.text}")
146
153
  last_error = e
147
154
  continue
148
155
  except Exception as e:
156
+ logger.error(f"Exception for {endpoint}: {str(e)}")
149
157
  last_error = e
150
158
  continue
151
159
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memra
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: Declarative framework for enterprise workflows with MCP integration - Client SDK
5
5
  Home-page: https://github.com/memra/memra-sdk
6
6
  Author: Memra
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
+ License-File: LICENSE
22
23
  Requires-Dist: pydantic>=1.8.0
23
24
  Requires-Dist: httpx>=0.24.0
24
25
  Requires-Dist: typing-extensions>=4.0.0
@@ -33,6 +34,7 @@ Provides-Extra: mcp
33
34
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "mcp"
34
35
  Dynamic: author
35
36
  Dynamic: home-page
37
+ Dynamic: license-file
36
38
  Dynamic: requires-python
37
39
 
38
40
  # Memra SDK
@@ -96,6 +98,48 @@ See the `examples/` directory for basic usage examples:
96
98
 
97
99
  For detailed documentation, visit [docs.memra.co](https://docs.memra.co)
98
100
 
101
+ Documentation is also available locally in the `examples/` directory.
102
+
103
+ ## Example: Propane Delivery Workflow
104
+
105
+ See the `examples/propane_delivery.py` file for a complete example of how to use Memra to orchestrate a propane delivery workflow.
106
+
107
+ ## 🔍 Smart File Discovery
108
+
109
+ Memra includes intelligent file discovery and management capabilities:
110
+
111
+ ### File Discovery Tools
112
+ - **FileDiscovery**: Automatically scan directories for files matching patterns
113
+ - **FileCopy**: Copy files from external locations to standard processing directories
114
+ - **Smart Routing**: Automatically handle file paths and directory management
115
+
116
+ ### Example: Smart Invoice Processing
117
+ ```python
118
+ from memra import Agent
119
+
120
+ # Smart agent that discovers and processes files automatically
121
+ smart_parser = Agent(
122
+ role="Smart Invoice Parser",
123
+ job="Discover and process invoice files intelligently",
124
+ tools=[
125
+ {"name": "FileDiscovery", "hosted_by": "memra"},
126
+ {"name": "FileCopy", "hosted_by": "memra"},
127
+ {"name": "InvoiceExtractionWorkflow", "hosted_by": "memra"}
128
+ ]
129
+ )
130
+
131
+ # Three modes of operation:
132
+ # 1. Auto-discovery: Scan invoices/ directory
133
+ # 2. External file: Copy from Downloads to invoices/
134
+ # 3. Specific file: Process exact file path
135
+ ```
136
+
137
+ See `examples/accounts_payable_smart.py` for a complete implementation.
138
+
139
+ ## Contributing
140
+
141
+ We welcome contributions! Please see our [contributing guide](CONTRIBUTING.md) for details.
142
+
99
143
  ## License
100
144
 
101
145
  MIT License - see LICENSE file for details.
@@ -0,0 +1,58 @@
1
+ memra/__init__.py,sha256=zVO29fnEDclBI9x9SFVzF9uJYAKhPDTNrMFMWuw6JC8,787
2
+ memra/discovery.py,sha256=yJIQnrDQu1nyzKykCIuzG_5SW5dIXHCEBLLKRWacIoY,480
3
+ memra/discovery_client.py,sha256=AbnKn6qhyrf7vmOvknEeDzH4tiGHsqPHtDaein_qaW0,1271
4
+ memra/execution.py,sha256=oA66YKds6-8YXQJ7ppCj39C09xuXG1z8GWfF9Tm8Ml0,23861
5
+ memra/models.py,sha256=sXMPRnMB_mUVtJdBFyd0ElCf_uh1yqx7iLssIYNm0vI,3333
6
+ memra/tool_registry.py,sha256=PDuWtiX_LX-vhKnx4JeL_ndUwG-oJ6bdhGe6iQeCDBw,15361
7
+ memra/tool_registry_client.py,sha256=uzMQ4COvRams9vuPLcqcdljUpDlAYU_tyFxrRhrA0Lc,4009
8
+ memra-0.2.4.dist-info/licenses/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ memra-ops/app.py,sha256=eyswUTeTvKdPSVy5RHMDW9ijUXdBfYB1qDtwCdkDGDM,26057
10
+ memra-ops/config.py,sha256=6mBbS_stoEIhJDBqdJOalryAnyWeHbDy81mU1j08ids,969
11
+ memra-ops/server_tool_registry.py,sha256=LYiLUL08M72Poaqt_rWt11BGMFlZKSSWjbW9SnfynEI,8212
12
+ memra-ops/config/config.py,sha256=7dcT9W5b_nWrVAylbdeOaA60_NJlhv2YLyEILTcNKtI,600
13
+ memra-ops/scripts/release.py,sha256=riQ-jz7-vnd1cSfQdU1eUZmVDyuWym1nmZW65lGetiI,4218
14
+ memra-ops/scripts/start_memra.py,sha256=VR7WESQXgvPuzZEFMhtmABSR7IzYixsnpgtoPcECLK0,11987
15
+ memra-ops/scripts/stop_memra.py,sha256=yyTu4jxjUbxTrvobQ-UhpNk-eWB8bCFjcBPGW1scIJg,4591
16
+ memra-ops/tests/test_llm_text_to_sql.py,sha256=IDL7FEzlm2Dr9pRCcJQ6SGddF9VBDfHonwztrDpxBGU,4099
17
+ memra-ops/tests/test_llm_vs_pattern.py,sha256=ZATV1fS7C6Jn-N4-UB5LzuRjbiO1ctZq3gNoIud2RWc,4880
18
+ memra-ops/tests/test_mcp_schema_aware.py,sha256=H5NmGxS3LWo9xoodqVeliJyHco7ZjGOtHg80ep1SHzw,4537
19
+ memra-ops/tests/test_schema_aware_sql.py,sha256=b_XPtv7eldR2ARBVlriTHMA1nwqYUcMgthL8mHpewuM,4645
20
+ memra-ops/tests/test_schema_aware_sql_simple.py,sha256=8f8zijkTwvIqVHM3B5oVviRfFS-U6bfC43fk9hcWsoE,2309
21
+ memra-ops/tests/test_text_to_sql_demo.py,sha256=5mmpSwXZ8r8sj3J9iCYkFx0SgwyXPe-7Prie1hL6cis,5092
22
+ memra-ops/tools/mcp_bridge_server.py,sha256=IKUNusZovPdR0_6Bv_XejmAk27lnHrM1uOE8xPVnM8s,35051
23
+ memra-sdk/setup.py,sha256=ZeDcO25CHXm1rHoDZbWI2BE6B7s7LUa9XvFmUu_YEtk,1513
24
+ memra-sdk/examples/accounts_payable.py,sha256=PfpXKrGOUu6NpkNcHy6cN6TtsXfnsJZhUv-KGlOvDqY,7990
25
+ memra-sdk/examples/accounts_payable_client.py,sha256=tLHHCydEpasLHTHd4YULhSxFy6zs81X5PZHav0dlQ2I,7816
26
+ memra-sdk/examples/accounts_payable_mcp.py,sha256=lOgwDfMVKxifQi70GmeXQnpZiIFrZnNj5_JSZ9qsdBw,7344
27
+ memra-sdk/examples/ask_questions.py,sha256=jek7EVXXZ_vODlMy_hQGQCkN9vYBfaW7SOWsIQRV2GY,3830
28
+ memra-sdk/examples/invoice_processing.py,sha256=STe3ri65WH_Ss84qiRWuGZTpDZke5GoJf8LEqOAc5ys,3980
29
+ memra-sdk/examples/propane_delivery.py,sha256=ryvIxDjM9GJY9T6fFIqJgHOcX2PEMkfF_t_3E5CyZW4,2539
30
+ memra-sdk/examples/simple_text_to_sql.py,sha256=NnpKo9nFpmPQ089zcSx4wwG6_tSHTmGJSS7LPs55NA0,5314
31
+ memra-sdk/memra/__init__.py,sha256=zVO29fnEDclBI9x9SFVzF9uJYAKhPDTNrMFMWuw6JC8,787
32
+ memra-sdk/memra/discovery.py,sha256=yJIQnrDQu1nyzKykCIuzG_5SW5dIXHCEBLLKRWacIoY,480
33
+ memra-sdk/memra/discovery_client.py,sha256=AbnKn6qhyrf7vmOvknEeDzH4tiGHsqPHtDaein_qaW0,1271
34
+ memra-sdk/memra/execution.py,sha256=P7tAur0SEMtX6uLlfxTfCZBgMLIRj6Wl3dsv2EA9fHc,23443
35
+ memra-sdk/memra/models.py,sha256=sXMPRnMB_mUVtJdBFyd0ElCf_uh1yqx7iLssIYNm0vI,3333
36
+ memra-sdk/memra/tool_registry.py,sha256=P2TafpiqV19yzi0jVrQQrXFGBpQkbmePbRfEW_ai24M,14700
37
+ memra-sdk/memra/tool_registry_client.py,sha256=uzMQ4COvRams9vuPLcqcdljUpDlAYU_tyFxrRhrA0Lc,4009
38
+ memra-sdk/scripts/release.py,sha256=riQ-jz7-vnd1cSfQdU1eUZmVDyuWym1nmZW65lGetiI,4218
39
+ memra-workflows/mcp_bridge_server.py,sha256=6K9fedZiwNpkT7wGAS6IW-HgMYBUC94zu8ppUgftqDg,8528
40
+ memra-workflows/accounts_payable/accounts_payable.py,sha256=rRpviqKZ-g0KPEnI98GbXy-KnyTrN1dLkj0HP9PKlYs,8012
41
+ memra-workflows/accounts_payable/accounts_payable_client.py,sha256=kNu2EQ8d6T6qcKn68FznnMGBeoqtXFbN4PHDVDImapk,7813
42
+ memra-workflows/accounts_payable/accounts_payable_mcp.py,sha256=kySt7PKyIgLbG1Q3jPY1kFPQK8o_3aAmL9vJG2Qcnxc,7366
43
+ memra-workflows/accounts_payable/accounts_payable_smart.py,sha256=g_V6-1qPsLiIOFw-eLT4w-RoljjErF65SuKRzkEeSck,8004
44
+ memra-workflows/invoice_processing/invoice_processing.py,sha256=STe3ri65WH_Ss84qiRWuGZTpDZke5GoJf8LEqOAc5ys,3980
45
+ memra-workflows/invoice_processing/smart_invoice_processor.py,sha256=Ct3ZjNujK4VTlCDgwMWXn6Y7b1dg0a_eIbRP-xm-p3g,7203
46
+ memra-workflows/logic/__init__.py,sha256=kLTdniFpBqOusmRng8W2LSIAmgj-jfM3Agjl_vXYTl8,76
47
+ memra-workflows/logic/file_tools.py,sha256=n6uDwInPZcr74zAJJbA9iZajWgRcKoHYtEKX_lbzsik,1586
48
+ memra-workflows/logic/invoice_tools.py,sha256=wLTI0JqkMYMlFv1z_DPwliIvKbpFBcYh5SnEnhU13Co,20366
49
+ memra-workflows/logic/propane_agents.py,sha256=ZF1RSccn73a5XZVa-1nxgjvubcYzf62g9lr9PoTbGl4,1804
50
+ memra-workflows/propane_delivery/propane_delivery.py,sha256=ryvIxDjM9GJY9T6fFIqJgHOcX2PEMkfF_t_3E5CyZW4,2539
51
+ memra-workflows/text_to_sql/complete_invoice_workflow_with_queries.py,sha256=x4wq3o_ogFnnrI6MQwEhqIiNH-NNwS5SXQUoKd_br7U,7428
52
+ memra-workflows/text_to_sql/complete_text_to_sql_system.py,sha256=Izj4ucXDXTWFY29SWr2YrEf3ZyXH4QCDEljNk4jlpI0,8991
53
+ memra-workflows/text_to_sql/file_discovery_demo.py,sha256=4R_QN0Y6OtHmnX6CvtwDXen122XCDrk-MRBOzxb_x_k,5306
54
+ memra-0.2.4.dist-info/METADATA,sha256=YDEg2IxnhDLka_MA0Ge_cKx_yO2HMFphcGNxnH85t84,4203
55
+ memra-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
+ memra-0.2.4.dist-info/entry_points.txt,sha256=LBVjwWoxWJRzNLgeByPn6xUvWFIRnqnemvAZgIoSt08,41
57
+ memra-0.2.4.dist-info/top_level.txt,sha256=IviXF9qSQY_BidRYund9zFaV-q1VMl6CuizwTAggQks,42
58
+ memra-0.2.4.dist-info/RECORD,,
File without changes
@@ -0,0 +1,4 @@
1
+ memra
2
+ memra-ops
3
+ memra-sdk
4
+ memra-workflows