uipath-langchain 0.0.142__tar.gz → 0.0.143__tar.gz

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 uipath-langchain might be problematic. Click here for more details.

Files changed (282) hide show
  1. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/PKG-INFO +2 -2
  2. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/pyproject.toml +2 -2
  3. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_debug.py +5 -2
  4. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_eval.py +5 -3
  5. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_run.py +15 -3
  6. uipath_langchain-0.0.143/src/uipath_langchain/_tracing/__init__.py +5 -0
  7. uipath_langchain-0.0.143/testcases/common/trace_assert.py +130 -0
  8. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/common/validate_output.sh +13 -9
  9. uipath_langchain-0.0.143/testcases/company-research-agent/expected_raw.json +861 -0
  10. uipath_langchain-0.0.143/testcases/company-research-agent/expected_traces.json +41 -0
  11. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/run.sh +1 -1
  12. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/src/assert.py +4 -1
  13. uipath_langchain-0.0.143/testcases/init-flow/expected_traces.json +32 -0
  14. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/init-flow/run.sh +1 -1
  15. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/init-flow/src/assert.py +5 -1
  16. uipath_langchain-0.0.143/testcases/simple-local-mcp/expected_traces.json +42 -0
  17. uipath_langchain-0.0.143/testcases/simple-local-mcp/input.json +12 -0
  18. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/run.sh +1 -1
  19. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/src/assert.py +5 -1
  20. uipath_langchain-0.0.143/testcases/ticket-classification/expected_traces.json +32 -0
  21. uipath_langchain-0.0.143/testcases/ticket-classification/raw_traces.jsonl +462 -0
  22. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/run.sh +2 -2
  23. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/src/assert.py +4 -1
  24. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/uv.lock +131 -133
  25. uipath_langchain-0.0.142/src/uipath_langchain/_tracing/__init__.py +0 -4
  26. uipath_langchain-0.0.142/src/uipath_langchain/_tracing/_oteladapter.py +0 -234
  27. uipath_langchain-0.0.142/testcases/simple-local-mcp/input.json +0 -1
  28. uipath_langchain-0.0.142/tests/tracing/test_oteladapter.py +0 -260
  29. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.cursorrules +0 -0
  30. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.editorconfig +0 -0
  31. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.gitattributes +0 -0
  32. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/cd.yml +0 -0
  33. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/ci.yml +0 -0
  34. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/commitlint.yml +0 -0
  35. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/integration_tests.yml +0 -0
  36. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/lint-custom-version.yml +0 -0
  37. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/lint.yml +0 -0
  38. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/publish-dev.yml +0 -0
  39. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/publish-docs.yml +0 -0
  40. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/publish-prior-stable-version.yml +0 -0
  41. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/slack.yml +0 -0
  42. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/test-custom-version.yml +0 -0
  43. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.github/workflows/test.yml +0 -0
  44. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.gitignore +0 -0
  45. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.pre-commit-config.yaml +0 -0
  46. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.python-version +0 -0
  47. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.vscode/extensions.json +0 -0
  48. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/.vscode/settings.json +0 -0
  49. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/CONTRIBUTING.md +0 -0
  50. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/LICENSE +0 -0
  51. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/README.md +0 -0
  52. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/chat_models.md +0 -0
  53. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/context_grounding.md +0 -0
  54. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/human_in_the_loop.md +0 -0
  55. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/quick_start.md +0 -0
  56. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/quick_start_images/cloud_env_var_dark.png +0 -0
  57. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/quick_start_images/cloud_env_var_light.png +0 -0
  58. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/quick_start_images/invoke_output_dark.png +0 -0
  59. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/quick_start_images/invoke_output_light.png +0 -0
  60. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/click-storage-bucket.png +0 -0
  61. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-index-1.png +0 -0
  62. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-index-2.png +0 -0
  63. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-process.png +0 -0
  64. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-quiz-generator.png +0 -0
  65. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-storage-bucket-1.png +0 -0
  66. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/create-storage-bucket-2.png +0 -0
  67. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/folder-path.png +0 -0
  68. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/job-info.png +0 -0
  69. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/output.png +0 -0
  70. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/process-page.png +0 -0
  71. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/researcher-1.png +0 -0
  72. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/researcher-2.png +0 -0
  73. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/run-process-1.png +0 -0
  74. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/run-process-2.png +0 -0
  75. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/RAG/storage-bucket-content.png +0 -0
  76. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/coder-agent-package-overview.png +0 -0
  77. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/coder-agent-process-configuration.png +0 -0
  78. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/planner-agent-package-overview.png +0 -0
  79. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/planner-agent-process-configuration.png +0 -0
  80. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/researcher-agent-package-overview.png +0 -0
  81. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/multi-agent-distributed/researcher-agent-process-configuration.png +0 -0
  82. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/activate-apps.png +0 -0
  83. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/activate-deployment.png +0 -0
  84. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/copy-folder-path.png +0 -0
  85. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/deploy-solution-package-wizard.png +0 -0
  86. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/deploy-solution-package.png +0 -0
  87. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/monitor-agent.png +0 -0
  88. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/navigate-to-solution-folder.png +0 -0
  89. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/resume-condition.png +0 -0
  90. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/run-agent.png +0 -0
  91. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/solution-destination-folder.png +0 -0
  92. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/start-job.png +0 -0
  93. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/docs/sample_images/ticket-classification/upload-solution-package.png +0 -0
  94. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/README.md +0 -0
  95. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/env.example +0 -0
  96. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/input.example/quiz-generator-debug-input.json +0 -0
  97. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/input.example/researcher-debug-input.json +0 -0
  98. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/langgraph.json +0 -0
  99. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/pyproject.toml +0 -0
  100. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/quiz-generator-RAG-agent.mermaid +0 -0
  101. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/researcher-RAG-agent.mermaid +0 -0
  102. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/src/agents/quiz-generator-RAG-agent.py +0 -0
  103. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/src/agents/researcher-RAG-agent.py +0 -0
  104. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/uipath.json +0 -0
  105. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/RAG-quiz-generator/uv.lock +0 -0
  106. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/README.md +0 -0
  107. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/calculator-agent/graph.py +0 -0
  108. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/calculator-agent/langgraph.json +0 -0
  109. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/calculator-agent/pyproject.toml +0 -0
  110. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/calculator-agent/uipath.json +0 -0
  111. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/calculator-agent/uv.lock +0 -0
  112. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/.env.example +0 -0
  113. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/agent.mermaid +0 -0
  114. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/graph.py +0 -0
  115. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/langgraph.json +0 -0
  116. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/pyproject.toml +0 -0
  117. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/uipath.json +0 -0
  118. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/chat-agent/uv.lock +0 -0
  119. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/.env.example +0 -0
  120. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/agent.mermaid +0 -0
  121. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/graph.py +0 -0
  122. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/langgraph.json +0 -0
  123. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/pyproject.toml +0 -0
  124. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/uipath.json +0 -0
  125. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/company-research-agent/uv.lock +0 -0
  126. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/.env.template +0 -0
  127. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/.python-version +0 -0
  128. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/.vscode/launch.json +0 -0
  129. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/README.md +0 -0
  130. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/agent.mermaid +0 -0
  131. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/input.json +0 -0
  132. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/langgraph.json +0 -0
  133. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/pyproject.toml +0 -0
  134. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/src/email_organizer/__init__.py +0 -0
  135. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/src/email_organizer/main.py +0 -0
  136. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/src/email_organizer/outlook_client.py +0 -0
  137. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/uipath.json +0 -0
  138. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/email-organizer-agent/uv.lock +0 -0
  139. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/database.py +0 -0
  140. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/main.py +0 -0
  141. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/models.py +0 -0
  142. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/pyproject.toml +0 -0
  143. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/schemas.py +0 -0
  144. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/templates/index.html +0 -0
  145. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/hitl-inbox-server/uv.lock +0 -0
  146. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/.env.example +0 -0
  147. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/README.md +0 -0
  148. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/coder.mermaid +0 -0
  149. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/langgraph.json +0 -0
  150. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/planner.mermaid +0 -0
  151. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/pyproject.toml +0 -0
  152. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/researcher.mermaid +0 -0
  153. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/coder.py +0 -0
  154. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/planner.py +0 -0
  155. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/src/multi-agent-distributed/researcher.py +0 -0
  156. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/uipath.json +0 -0
  157. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-planner-researcher-coder-distributed/uv.lock +0 -0
  158. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/.env.example +0 -0
  159. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/README.md +0 -0
  160. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/agent.mermaid +0 -0
  161. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/graph.py +0 -0
  162. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/langgraph.json +0 -0
  163. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/pyproject.toml +0 -0
  164. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/uipath.json +0 -0
  165. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/multi-agent-supervisor-researcher-coder/uv.lock +0 -0
  166. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/.env.example +0 -0
  167. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/README.md +0 -0
  168. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/input.json +0 -0
  169. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/langgraph.json +0 -0
  170. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/main.py +0 -0
  171. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/pyproject.toml +0 -0
  172. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/oauth-external-apps-agent/uv.lock +0 -0
  173. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/.env.example +0 -0
  174. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/README.md +0 -0
  175. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/main.py +0 -0
  176. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/pyproject.toml +0 -0
  177. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/uipath.json +0 -0
  178. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/retrieval-chain/uv.lock +0 -0
  179. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/.env.example +0 -0
  180. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/README.md +0 -0
  181. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/agent.mermaid +0 -0
  182. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/langgraph.json +0 -0
  183. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/pyproject.toml +0 -0
  184. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  185. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  186. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  187. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/uipath.json +0 -0
  188. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-local-mcp/uv.lock +0 -0
  189. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/.env.example +0 -0
  190. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/README.md +0 -0
  191. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/agent.mermaid +0 -0
  192. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/langgraph.json +0 -0
  193. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/main.py +0 -0
  194. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/pyproject.toml +0 -0
  195. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/uipath.json +0 -0
  196. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/simple-remote-mcp/uv.lock +0 -0
  197. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/.env.example +0 -0
  198. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/README.md +0 -0
  199. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/agent.mermaid +0 -0
  200. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/escalation_app_solution/generic-escalation-app-solution-1.0.0.zip +0 -0
  201. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/langgraph.json +0 -0
  202. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/main.py +0 -0
  203. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/pyproject.toml +0 -0
  204. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/uipath.json +0 -0
  205. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/samples/ticket-classification/uv.lock +0 -0
  206. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/__init__.py +0 -0
  207. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/__init__.py +0 -0
  208. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_context.py +0 -0
  209. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_conversation.py +0 -0
  210. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_exception.py +0 -0
  211. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_graph_resolver.py +0 -0
  212. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_input.py +0 -0
  213. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_output.py +0 -0
  214. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_runtime/_runtime.py +0 -0
  215. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_templates/langgraph.json.template +0 -0
  216. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_templates/main.py.template +0 -0
  217. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/_utils/_graph.py +0 -0
  218. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_dev.py +0 -0
  219. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_init.py +0 -0
  220. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_cli/cli_new.py +0 -0
  221. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_resources/AGENTS.md +0 -0
  222. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_resources/REQUIRED_STRUCTURE.md +0 -0
  223. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_tracing/_instrument_traceable.py +0 -0
  224. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_tracing/_utils.py +0 -0
  225. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_utils/__init__.py +0 -0
  226. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_utils/_request_mixin.py +0 -0
  227. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_utils/_settings.py +0 -0
  228. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/_utils/_sleep_policy.py +0 -0
  229. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/chat/__init__.py +0 -0
  230. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/chat/models.py +0 -0
  231. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/embeddings/__init__.py +0 -0
  232. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/embeddings/embeddings.py +0 -0
  233. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/middlewares.py +0 -0
  234. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/py.typed +0 -0
  235. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/retrievers/__init__.py +0 -0
  236. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/retrievers/context_grounding_retriever.py +0 -0
  237. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/tools/__init__.py +0 -0
  238. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/tools/preconfigured.py +0 -0
  239. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/vectorstores/__init__.py +0 -0
  240. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/src/uipath_langchain/vectorstores/context_grounding_vectorstore.py +0 -0
  241. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/input.json +0 -0
  242. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/langgraph.json +0 -0
  243. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/pyproject.toml +0 -0
  244. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/src/graph.py +0 -0
  245. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/company-research-agent/uv.lock +0 -0
  246. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/init-flow/input.json +0 -0
  247. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/init-flow/pyproject.toml +0 -0
  248. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/langgraph.json +0 -0
  249. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/pyproject.toml +0 -0
  250. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/src/simple-local-mcp/graph.py +0 -0
  251. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/src/simple-local-mcp/math_server.py +0 -0
  252. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/src/simple-local-mcp/weather_server.py +0 -0
  253. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/simple-local-mcp/uv.lock +0 -0
  254. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/input.json +0 -0
  255. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/langgraph.json +0 -0
  256. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/pyproject.toml +0 -0
  257. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/src/main.py +0 -0
  258. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/testcases/ticket-classification/uv.lock +0 -0
  259. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/__init__.py +0 -0
  260. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/conftest.py +0 -0
  261. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/mocks/langgraph.json +0 -0
  262. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/mocks/simple_agent.py +0 -0
  263. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/mocks/uipath.json +0 -0
  264. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/test_init.py +0 -0
  265. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/cli/test_run.py +0 -0
  266. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/__init__.py +0 -0
  267. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/conftest.py +0 -0
  268. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/action_trigger_hitl.py +0 -0
  269. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/api_trigger_hitl.py +0 -0
  270. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/job_trigger_hitl.py +0 -0
  271. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/langgraph.json +0 -0
  272. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/uipath-default-escalation.json +0 -0
  273. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/mocks/uipath.json +0 -0
  274. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/test_action_trigger.py +0 -0
  275. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/test_hitl_api_trigger.py +0 -0
  276. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/test_hitl_default_escalation.py +0 -0
  277. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/hitl/test_hitl_job_trigger.py +0 -0
  278. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/test_dummy.py +0 -0
  279. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/tools/__init__.py +0 -0
  280. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/tools/conftest.py +0 -0
  281. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/tools/mocks/agent_definition.json +0 -0
  282. {uipath_langchain-0.0.142 → uipath_langchain-0.0.143}/tests/tools/test_preconfigured.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: uipath-langchain
3
- Version: 0.0.142
3
+ Version: 0.0.143
4
4
  Summary: UiPath Langchain
5
5
  Project-URL: Homepage, https://uipath.com
6
6
  Project-URL: Repository, https://github.com/UiPath/uipath-langchain-python
@@ -26,7 +26,7 @@ Requires-Dist: openai>=1.65.5
26
26
  Requires-Dist: openinference-instrumentation-langchain>=0.1.50
27
27
  Requires-Dist: pydantic-settings>=2.6.0
28
28
  Requires-Dist: python-dotenv>=1.0.1
29
- Requires-Dist: uipath<2.2.0,>=2.1.101
29
+ Requires-Dist: uipath<2.2.0,>=2.1.103
30
30
  Provides-Extra: langchain
31
31
  Description-Content-Type: text/markdown
32
32
 
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "uipath-langchain"
3
- version = "0.0.142"
3
+ version = "0.0.143"
4
4
  description = "UiPath Langchain"
5
5
  readme = { file = "README.md", content-type = "text/markdown" }
6
6
  requires-python = ">=3.10"
7
7
  dependencies = [
8
- "uipath>=2.1.101, <2.2.0",
8
+ "uipath>=2.1.103, <2.2.0",
9
9
  "langgraph>=0.5.0, <0.7.0",
10
10
  "langchain-core>=0.3.34",
11
11
  "langgraph-checkpoint-sqlite>=2.0.3",
@@ -12,8 +12,9 @@ from uipath._cli._runtime._contracts import (
12
12
  UiPathRuntimeFactory,
13
13
  )
14
14
  from uipath._cli.middlewares import MiddlewareResult
15
+ from uipath.tracing import LlmOpsHttpExporter
15
16
 
16
- from .._tracing import LangChainExporter, _instrument_traceable_attributes
17
+ from .._tracing import _instrument_traceable_attributes
17
18
  from ._runtime._exception import LangGraphRuntimeError
18
19
  from ._runtime._runtime import ( # type: ignore[attr-defined]
19
20
  LangGraphRuntimeContext,
@@ -61,7 +62,9 @@ def langgraph_debug_middleware(
61
62
  )
62
63
 
63
64
  if context.job_id:
64
- runtime_factory.add_span_exporter(LangChainExporter())
65
+ runtime_factory.add_span_exporter(
66
+ LlmOpsHttpExporter(extra_process_spans=True)
67
+ )
65
68
 
66
69
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
67
70
 
@@ -15,12 +15,12 @@ from uipath._cli._utils._eval_set import EvalHelpers
15
15
  from uipath._cli.middlewares import MiddlewareResult
16
16
  from uipath._events._event_bus import EventBus
17
17
  from uipath.eval._helpers import auto_discover_entrypoint
18
+ from uipath.tracing import LlmOpsHttpExporter
18
19
 
19
20
  from uipath_langchain._cli._runtime._context import LangGraphRuntimeContext
20
21
  from uipath_langchain._cli._runtime._runtime import LangGraphScriptRuntime
21
22
  from uipath_langchain._cli._utils._graph import LangGraphConfig
22
23
  from uipath_langchain._tracing import (
23
- LangChainExporter,
24
24
  _instrument_traceable_attributes,
25
25
  )
26
26
 
@@ -41,7 +41,7 @@ def langgraph_eval_middleware(
41
41
 
42
42
  if kwargs.get("register_progress_reporter", False):
43
43
  progress_reporter = StudioWebProgressReporter(
44
- spans_exporter=LangChainExporter()
44
+ spans_exporter=LlmOpsHttpExporter(extra_process_spans=True)
45
45
  )
46
46
  asyncio.run(progress_reporter.subscribe_to_eval_runtime_events(event_bus))
47
47
  console_reporter = ConsoleProgressReporter()
@@ -76,7 +76,9 @@ def langgraph_eval_middleware(
76
76
  )
77
77
 
78
78
  if eval_context.job_id:
79
- runtime_factory.add_span_exporter(LangChainExporter())
79
+ runtime_factory.add_span_exporter(
80
+ LlmOpsHttpExporter(extra_process_spans=True)
81
+ )
80
82
 
81
83
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
82
84
 
@@ -13,8 +13,11 @@ from uipath._cli._runtime._contracts import (
13
13
  )
14
14
  from uipath._cli.middlewares import MiddlewareResult
15
15
  from uipath._events._events import UiPathAgentStateEvent
16
+ from uipath.tracing import JsonLinesFileExporter, LlmOpsHttpExporter
16
17
 
17
- from .._tracing import LangChainExporter, _instrument_traceable_attributes
18
+ from .._tracing import (
19
+ _instrument_traceable_attributes,
20
+ )
18
21
  from ._runtime._exception import LangGraphRuntimeError
19
22
  from ._runtime._runtime import ( # type: ignore[attr-defined]
20
23
  LangGraphRuntimeContext,
@@ -24,7 +27,11 @@ from ._utils._graph import LangGraphConfig
24
27
 
25
28
 
26
29
  def langgraph_run_middleware(
27
- entrypoint: Optional[str], input: Optional[str], resume: bool, **kwargs
30
+ entrypoint: Optional[str],
31
+ input: Optional[str],
32
+ resume: bool,
33
+ trace_file: Optional[str] = None,
34
+ **kwargs,
28
35
  ) -> MiddlewareResult:
29
36
  """Middleware to handle LangGraph execution"""
30
37
  config = LangGraphConfig()
@@ -61,8 +68,13 @@ def langgraph_run_middleware(
61
68
 
62
69
  runtime_factory.add_instrumentor(LangChainInstrumentor, get_current_span)
63
70
 
71
+ if trace_file:
72
+ runtime_factory.add_span_exporter(JsonLinesFileExporter(trace_file))
73
+
64
74
  if context.job_id:
65
- runtime_factory.add_span_exporter(LangChainExporter())
75
+ runtime_factory.add_span_exporter(
76
+ LlmOpsHttpExporter(extra_process_spans=True)
77
+ )
66
78
  await runtime_factory.execute(context)
67
79
  else:
68
80
  debug_bridge: UiPathDebugBridge = ConsoleDebugBridge()
@@ -0,0 +1,5 @@
1
+ from ._instrument_traceable import _instrument_traceable_attributes
2
+
3
+ __all__ = [
4
+ "_instrument_traceable_attributes",
5
+ ]
@@ -0,0 +1,130 @@
1
+ """
2
+ Simple trace assertion - just check that expected spans exist with required attributes.
3
+ Much simpler than the tree-based approach.
4
+ """
5
+
6
+ import json
7
+ from typing import List, Dict, Any
8
+
9
+
10
+ def load_traces(traces_file: str) -> List[Dict[str, Any]]:
11
+ """Load traces from a JSONL file."""
12
+ traces = []
13
+ with open(traces_file, 'r', encoding='utf-8') as f:
14
+ for line in f:
15
+ if line.strip():
16
+ traces.append(json.loads(line))
17
+ return traces
18
+
19
+
20
+ def load_expected_traces(expected_file: str) -> List[Dict[str, Any]]:
21
+ """Load expected trace definitions from a JSON file."""
22
+ with open(expected_file, 'r', encoding='utf-8') as f:
23
+ data = json.load(f)
24
+ return data.get('required_spans', [])
25
+
26
+
27
+ def get_attributes(span: Dict[str, Any]) -> Dict[str, Any]:
28
+ """Parse attributes from a span."""
29
+ attributes_str = span.get('Attributes', '{}')
30
+ try:
31
+ return json.loads(attributes_str)
32
+ except json.JSONDecodeError:
33
+ return {}
34
+
35
+
36
+ def matches_value(expected_value: Any, actual_value: Any) -> bool:
37
+ """
38
+ Check if an actual value matches the expected value.
39
+
40
+ Supports:
41
+ - List of possible values: ["value1", "value2"]
42
+ - Wildcard: "*" (any value accepted)
43
+ - Exact match: "value"
44
+ """
45
+ # Wildcard - accept any value
46
+ if expected_value == "*":
47
+ return True
48
+
49
+ # List of possible values
50
+ if isinstance(expected_value, list):
51
+ return actual_value in expected_value
52
+
53
+ # Exact match
54
+ return expected_value == actual_value
55
+
56
+
57
+ def matches_expected(span: Dict[str, Any], expected: Dict[str, Any]) -> bool:
58
+ """Check if a span matches the expected definition."""
59
+ # Check name - can be a string or list of possible names
60
+ expected_name = expected.get('name')
61
+ actual_name = span.get('Name')
62
+
63
+ if isinstance(expected_name, list):
64
+ if actual_name not in expected_name:
65
+ return False
66
+ elif expected_name != actual_name:
67
+ return False
68
+
69
+ # Check span type if specified
70
+ if 'span_type' in expected:
71
+ if span.get('SpanType') != expected['span_type']:
72
+ return False
73
+
74
+ # Check attributes if specified
75
+ if 'attributes' in expected:
76
+ actual_attrs = get_attributes(span)
77
+ for key, expected_value in expected['attributes'].items():
78
+ if key not in actual_attrs:
79
+ return False
80
+ # Use flexible value matching
81
+ if not matches_value(expected_value, actual_attrs[key]):
82
+ return False
83
+
84
+ return True
85
+
86
+
87
+ def assert_traces(traces_file: str, expected_file: str) -> None:
88
+ """
89
+ Assert that all expected traces exist in the traces file.
90
+
91
+ Args:
92
+ traces_file: Path to the traces.jsonl file
93
+ expected_file: Path to the expected_traces.json file
94
+
95
+ Raises:
96
+ AssertionError: If any expected trace is not found
97
+ """
98
+ traces = load_traces(traces_file)
99
+ expected_spans = load_expected_traces(expected_file)
100
+
101
+ print(f"Loaded {len(traces)} traces from {traces_file}")
102
+ print(f"Checking {len(expected_spans)} expected spans...")
103
+
104
+ missing_spans = []
105
+
106
+ for expected in expected_spans:
107
+ # Find a matching span
108
+ found = False
109
+ for span in traces:
110
+ if matches_expected(span, expected):
111
+ found = True
112
+ print(f"✓ Found span: {expected['name']}")
113
+ break
114
+
115
+ if not found:
116
+ missing_spans.append(expected['name'])
117
+ print(f"✗ Missing span: {expected['name']}")
118
+
119
+ if missing_spans:
120
+ raise AssertionError(
121
+ f"Missing expected spans: {', '.join(missing_spans)}\n"
122
+ f"Expected {len(expected_spans)} spans, found {len(expected_spans) - len(missing_spans)}"
123
+ )
124
+
125
+ print(f"\n✓ All {len(expected_spans)} expected spans found!")
126
+
127
+
128
+ if __name__ == "__main__":
129
+ # Example usage
130
+ assert_traces(".uipath/traces.jsonl", "expected_traces.json")
@@ -22,14 +22,18 @@ debug_print_uipath_output() {
22
22
  fi
23
23
  }
24
24
 
25
- validate_output() {
26
- echo "Printing output file for validation..."
27
- debug_print_uipath_output
28
-
29
- echo "Validating output..."
30
- python src/assert.py || { echo "Validation failed!"; exit 1; }
31
-
32
- echo "Testcase completed successfully."
25
+ # Run assertions from the testcase's src directory
26
+ run_assertions() {
27
+ echo "Running assertions..."
28
+ if [ -f "src/assert.py" ]; then
29
+ # Use the Python from the virtual environment
30
+ # Prepend the common directory to the python path so it can be resolved
31
+ PYTHONPATH="../common:$PYTHONPATH" python src/assert.py
32
+ else
33
+ echo "assert.py not found in src directory!"
34
+ exit 1
35
+ fi
33
36
  }
34
37
 
35
- validate_output
38
+ debug_print_uipath_output
39
+ run_assertions