pygeai 0.4.0b2__tar.gz → 0.4.0b4__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 pygeai might be problematic. Click here for more details.

Files changed (507) hide show
  1. {pygeai-0.4.0b2/pygeai.egg-info → pygeai-0.4.0b4}/PKG-INFO +4 -4
  2. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/README.md +3 -3
  3. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/models.py +1 -1
  4. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/models.py +7 -3
  5. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/processes/mappers.py +2 -2
  6. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/tools/mappers.py +5 -5
  7. pygeai-0.4.0b4/pygeai/tests/integration/chat/test_generate_image.py +162 -0
  8. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_create_agent.py +9 -12
  9. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_update_agent.py +6 -14
  10. pygeai-0.4.0b4/pygeai/tests/integration/lab/tools/test_create_tool.py +293 -0
  11. pygeai-0.4.0b4/pygeai/tests/integration/lab/tools/test_delete_tool.py +87 -0
  12. pygeai-0.4.0b4/pygeai/tests/integration/lab/tools/test_get_tool.py +91 -0
  13. pygeai-0.4.0b4/pygeai/tests/integration/lab/tools/test_list_tools.py +38 -0
  14. pygeai-0.4.0b4/pygeai/tests/snippets/lab/agents/create_agent_edge_case.py +48 -0
  15. pygeai-0.4.0b4/pygeai/tests/snippets/lab/agents/create_agent_without_instructions.py +48 -0
  16. pygeai-0.4.0b4/pygeai/tests/snippets/lab/tools/create_tool_edge_case.py +50 -0
  17. pygeai-0.4.0b4/pygeai/vendor/a2a/auth/__init__.py +0 -0
  18. pygeai-0.4.0b4/pygeai/vendor/a2a/py.typed +0 -0
  19. {pygeai-0.4.0b2 → pygeai-0.4.0b4/pygeai.egg-info}/PKG-INFO +4 -4
  20. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai.egg-info/SOURCES.txt +10 -0
  21. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pyproject.toml +1 -1
  22. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/LICENSE +0 -0
  23. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/MANIFEST.in +0 -0
  24. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/docs/geai-proxy/README.md +0 -0
  25. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/__init__.py +0 -0
  26. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/admin/__init__.py +0 -0
  27. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/admin/clients.py +0 -0
  28. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/admin/endpoints.py +0 -0
  29. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/__init__.py +0 -0
  30. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/clients.py +0 -0
  31. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/data/__init__.py +0 -0
  32. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/data/clients.py +0 -0
  33. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/data_analyst/__init__.py +0 -0
  34. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/data_analyst/clients.py +0 -0
  35. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/data_analyst/endpoints.py +0 -0
  36. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/endpoints.py +0 -0
  37. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/managers.py +0 -0
  38. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/mappers.py +0 -0
  39. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/__init__.py +0 -0
  40. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/clients.py +0 -0
  41. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/endpoints.py +0 -0
  42. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/mappers.py +0 -0
  43. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/assistant/rag/responses.py +0 -0
  44. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/__init__.py +0 -0
  45. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/clients.py +0 -0
  46. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/endpoints.py +0 -0
  47. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/iris.py +0 -0
  48. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/managers.py +0 -0
  49. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/session.py +0 -0
  50. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/settings.py +0 -0
  51. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/chat/ui.py +0 -0
  52. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/__init__.py +0 -0
  53. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/__main__.py +0 -0
  54. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/__init__.py +0 -0
  55. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/admin.py +0 -0
  56. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/assistant.py +0 -0
  57. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/base.py +0 -0
  58. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/builders.py +0 -0
  59. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/chat.py +0 -0
  60. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/common.py +0 -0
  61. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/configuration.py +0 -0
  62. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/embeddings.py +0 -0
  63. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/evaluation.py +0 -0
  64. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/feedback.py +0 -0
  65. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/files.py +0 -0
  66. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/flows/__init__.py +0 -0
  67. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/gam.py +0 -0
  68. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/lab/__init__.py +0 -0
  69. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/lab/ai_lab.py +0 -0
  70. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/lab/common.py +0 -0
  71. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/lab/spec.py +0 -0
  72. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/llm.py +0 -0
  73. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/migrate.py +0 -0
  74. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/options.py +0 -0
  75. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/organization.py +0 -0
  76. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/rag.py +0 -0
  77. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/rerank.py +0 -0
  78. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/secrets.py +0 -0
  79. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/usage_limits.py +0 -0
  80. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/validators.py +0 -0
  81. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/commands/version.py +0 -0
  82. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/geai.py +0 -0
  83. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/geai_proxy.py +0 -0
  84. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/install_man.py +0 -0
  85. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/parsers.py +0 -0
  86. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/texts/__init__.py +0 -0
  87. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/cli/texts/help.py +0 -0
  88. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/__init__.py +0 -0
  89. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/__init__.py +0 -0
  90. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/clients.py +0 -0
  91. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/mappers.py +0 -0
  92. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/models.py +0 -0
  93. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/responses.py +0 -0
  94. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/base/session.py +0 -0
  95. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/common/__init__.py +0 -0
  96. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/common/config.py +0 -0
  97. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/common/decorators.py +0 -0
  98. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/common/exceptions.py +0 -0
  99. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/__init__.py +0 -0
  100. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/clients.py +0 -0
  101. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/endpoints.py +0 -0
  102. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/managers.py +0 -0
  103. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/mappers.py +0 -0
  104. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/models.py +0 -0
  105. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/embeddings/responses.py +0 -0
  106. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/feedback/__init__.py +0 -0
  107. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/feedback/clients.py +0 -0
  108. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/feedback/endpoints.py +0 -0
  109. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/feedback/models.py +0 -0
  110. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/__init__.py +0 -0
  111. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/clients.py +0 -0
  112. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/endpoints.py +0 -0
  113. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/managers.py +0 -0
  114. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/mappers.py +0 -0
  115. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/models.py +0 -0
  116. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/files/responses.py +0 -0
  117. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/handlers.py +0 -0
  118. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/llm/__init__.py +0 -0
  119. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/llm/clients.py +0 -0
  120. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/llm/endpoints.py +0 -0
  121. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/models.py +0 -0
  122. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/plugins/__init__.py +0 -0
  123. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/plugins/clients.py +0 -0
  124. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/plugins/endpoints.py +0 -0
  125. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/plugins/models.py +0 -0
  126. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/__init__.py +0 -0
  127. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/clients.py +0 -0
  128. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/endpoints.py +0 -0
  129. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/managers.py +0 -0
  130. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/mappers.py +0 -0
  131. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/rerank/models.py +0 -0
  132. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/responses.py +0 -0
  133. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/secrets/__init__.py +0 -0
  134. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/secrets/clients.py +0 -0
  135. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/secrets/endpoints.py +0 -0
  136. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/__init__.py +0 -0
  137. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/llm/__init__.py +0 -0
  138. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/llm/model.py +0 -0
  139. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/llm/providers.py +0 -0
  140. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/response.py +0 -0
  141. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/services/rest.py +0 -0
  142. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/singleton.py +0 -0
  143. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/utils/__init__.py +0 -0
  144. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/core/utils/console.py +0 -0
  145. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/dbg/__init__.py +0 -0
  146. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/dbg/debugger.py +0 -0
  147. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/__init__.py +0 -0
  148. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/clients.py +0 -0
  149. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/dataset/__init__.py +0 -0
  150. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/dataset/clients.py +0 -0
  151. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/dataset/endpoints.py +0 -0
  152. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/plan/__init__.py +0 -0
  153. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/plan/clients.py +0 -0
  154. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/plan/endpoints.py +0 -0
  155. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/result/__init__.py +0 -0
  156. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/result/clients.py +0 -0
  157. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/evaluation/result/endpoints.py +0 -0
  158. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/flows/__init__.py +0 -0
  159. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/flows/endpoints.py +0 -0
  160. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/flows/models.py +0 -0
  161. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/gam/__init__.py +0 -0
  162. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/gam/clients.py +0 -0
  163. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/gam/endpoints.py +0 -0
  164. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/health/__init__.py +0 -0
  165. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/health/clients.py +0 -0
  166. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/health/endpoints.py +0 -0
  167. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/__init__.py +0 -0
  168. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/agents/__init__.py +0 -0
  169. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/agents/clients.py +0 -0
  170. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/agents/endpoints.py +0 -0
  171. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/agents/mappers.py +0 -0
  172. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/constants.py +0 -0
  173. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/managers.py +0 -0
  174. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/processes/__init__.py +0 -0
  175. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/processes/clients.py +0 -0
  176. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/processes/endpoints.py +0 -0
  177. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/runners.py +0 -0
  178. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/spec/__init__.py +0 -0
  179. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/spec/loader.py +0 -0
  180. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/spec/parsers.py +0 -0
  181. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/strategies/__init__.py +0 -0
  182. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/strategies/clients.py +0 -0
  183. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/strategies/endpoints.py +0 -0
  184. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/strategies/mappers.py +0 -0
  185. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/tools/__init__.py +0 -0
  186. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/tools/clients.py +0 -0
  187. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/lab/tools/endpoints.py +0 -0
  188. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/man/__init__.py +0 -0
  189. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/man/man1/__init__.py +0 -0
  190. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/man/man1/geai-proxy.1 +0 -0
  191. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/man/man1/geai.1 +0 -0
  192. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/migration/__init__.py +0 -0
  193. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/migration/strategies.py +0 -0
  194. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/migration/tools.py +0 -0
  195. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/__init__.py +0 -0
  196. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/clients.py +0 -0
  197. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/endpoints.py +0 -0
  198. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/limits/__init__.py +0 -0
  199. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/limits/clients.py +0 -0
  200. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/limits/endpoints.py +0 -0
  201. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/limits/managers.py +0 -0
  202. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/limits/mappers.py +0 -0
  203. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/managers.py +0 -0
  204. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/mappers.py +0 -0
  205. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/organization/responses.py +0 -0
  206. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/__init__.py +0 -0
  207. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/clients.py +0 -0
  208. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/config.py +0 -0
  209. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/managers.py +0 -0
  210. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/servers.py +0 -0
  211. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/proxy/tool.py +0 -0
  212. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/__init__.py +0 -0
  213. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/admin/__init__.py +0 -0
  214. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/admin/test_clients.py +0 -0
  215. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/__init__.py +0 -0
  216. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/rag/__init__.py +0 -0
  217. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/rag/test_clients.py +0 -0
  218. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/rag/test_mappers.py +0 -0
  219. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/rag/test_models.py +0 -0
  220. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/test_clients.py +0 -0
  221. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/test_managers.py +0 -0
  222. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/assistants/test_mappers.py +0 -0
  223. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/chat/__init__.py +0 -0
  224. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/chat/test_clients.py +0 -0
  225. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/chat/test_iris.py +0 -0
  226. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/chat/test_session.py +0 -0
  227. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/chat/test_ui.py +0 -0
  228. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/__init__.py +0 -0
  229. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/__init__.py +0 -0
  230. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/lab/__init__.py +0 -0
  231. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/lab/test_ai_lab.py +0 -0
  232. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/lab/test_common.py +0 -0
  233. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/lab/test_spec.py +0 -0
  234. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_assistant.py +0 -0
  235. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_chat.py +0 -0
  236. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_common.py +0 -0
  237. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_embeddings.py +0 -0
  238. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_feedback.py +0 -0
  239. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_files.py +0 -0
  240. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_gam.py +0 -0
  241. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_llm.py +0 -0
  242. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_migrate.py +0 -0
  243. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_organization.py +0 -0
  244. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_rag.py +0 -0
  245. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_rerank.py +0 -0
  246. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_show_help.py +0 -0
  247. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_usage_limits.py +0 -0
  248. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_validators.py +0 -0
  249. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/commands/test_version.py +0 -0
  250. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/cli/test_parsers.py +0 -0
  251. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/__init__.py +0 -0
  252. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/__init__.py +0 -0
  253. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/data/__init__.py +0 -0
  254. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/data/mappers.py +0 -0
  255. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/data/models.py +0 -0
  256. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/test_mappers.py +0 -0
  257. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/base/test_models.py +0 -0
  258. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/common/__init__.py +0 -0
  259. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/common/data/__init__.py +0 -0
  260. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/common/test_config.py +0 -0
  261. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/common/test_decorators.py +0 -0
  262. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/embeddings/__init__.py +0 -0
  263. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/embeddings/test_clients.py +0 -0
  264. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/feedback/__init__.py +0 -0
  265. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/feedback/test_clients.py +0 -0
  266. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/files/__init__.py +0 -0
  267. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/files/test_clients.py +0 -0
  268. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/files/test_managers.py +0 -0
  269. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/files/test_models.py +0 -0
  270. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/files/test_responses.py +0 -0
  271. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/llm/__init__.py +0 -0
  272. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/llm/test_clients.py +0 -0
  273. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/rerank/__init__.py +0 -0
  274. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/rerank/test_clients.py +0 -0
  275. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/rerank/test_managers.py +0 -0
  276. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/rerank/test_mappers.py +0 -0
  277. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/secrets/__init__.py +0 -0
  278. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/secrets/test_clients.py +0 -0
  279. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/services/__init__.py +0 -0
  280. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/services/test_rest.py +0 -0
  281. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/test_handlers.py +0 -0
  282. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/utils/__init__.py +0 -0
  283. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/core/utils/test_console.py +0 -0
  284. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/dbg/__init__.py +0 -0
  285. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/dbg/test_debugger.py +0 -0
  286. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/gam/__init__.py +0 -0
  287. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/gam/test_clients.py +0 -0
  288. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/health/__init__.py +0 -0
  289. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/health/test_clients.py +0 -0
  290. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/__init__.py +0 -0
  291. {pygeai-0.4.0b2/pygeai/tests/integration/lab → pygeai-0.4.0b4/pygeai/tests/integration/chat}/__init__.py +0 -0
  292. {pygeai-0.4.0b2/pygeai/tests/integration/lab/agents → pygeai-0.4.0b4/pygeai/tests/integration/lab}/__init__.py +0 -0
  293. {pygeai-0.4.0b2/pygeai/tests/lab → pygeai-0.4.0b4/pygeai/tests/integration/lab/agents}/__init__.py +0 -0
  294. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_agents_list.py +0 -0
  295. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_create_sharing_link.py +0 -0
  296. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_delete_agent.py +0 -0
  297. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_get_agent.py +0 -0
  298. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +0 -0
  299. {pygeai-0.4.0b2/pygeai/tests/lab/agents → pygeai-0.4.0b4/pygeai/tests/integration/lab/tools}/__init__.py +0 -0
  300. {pygeai-0.4.0b2/pygeai/tests/lab/processes → pygeai-0.4.0b4/pygeai/tests/lab}/__init__.py +0 -0
  301. {pygeai-0.4.0b2/pygeai/tests/lab/spec → pygeai-0.4.0b4/pygeai/tests/lab/agents}/__init__.py +0 -0
  302. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/agents/test_clients.py +0 -0
  303. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/agents/test_mappers.py +0 -0
  304. {pygeai-0.4.0b2/pygeai/tests/lab/strategies → pygeai-0.4.0b4/pygeai/tests/lab/processes}/__init__.py +0 -0
  305. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/processes/test_clients.py +0 -0
  306. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/processes/test_mappers.py +0 -0
  307. {pygeai-0.4.0b2/pygeai/tests/lab/tools → pygeai-0.4.0b4/pygeai/tests/lab/spec}/__init__.py +0 -0
  308. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/spec/test_loader.py +0 -0
  309. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/spec/test_parsers.py +0 -0
  310. {pygeai-0.4.0b2/pygeai/tests/migration → pygeai-0.4.0b4/pygeai/tests/lab/strategies}/__init__.py +0 -0
  311. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/strategies/test_clients.py +0 -0
  312. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/strategies/test_mappers.py +0 -0
  313. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/test_managers.py +0 -0
  314. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/test_mappers.py +0 -0
  315. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/test_models.py +0 -0
  316. {pygeai-0.4.0b2/pygeai/tests/organization → pygeai-0.4.0b4/pygeai/tests/lab/tools}/__init__.py +0 -0
  317. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/tools/test_clients.py +0 -0
  318. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/lab/tools/test_mappers.py +0 -0
  319. {pygeai-0.4.0b2/pygeai/tests/organization/limits → pygeai-0.4.0b4/pygeai/tests/migration}/__init__.py +0 -0
  320. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/migration/test_strategies.py +0 -0
  321. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/migration/test_tools.py +0 -0
  322. {pygeai-0.4.0b2/pygeai/tests/snippets → pygeai-0.4.0b4/pygeai/tests/organization}/__init__.py +0 -0
  323. {pygeai-0.4.0b2/pygeai/tests/snippets/assistants → pygeai-0.4.0b4/pygeai/tests/organization/limits}/__init__.py +0 -0
  324. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/organization/limits/test_clients.py +0 -0
  325. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/organization/limits/test_managers.py +0 -0
  326. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/organization/test_clients.py +0 -0
  327. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/organization/test_managers.py +0 -0
  328. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/organization/test_mappers.py +0 -0
  329. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/__init__.py +0 -0
  330. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_clients.py +0 -0
  331. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_config.py +0 -0
  332. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_integration.py +0 -0
  333. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_managers.py +0 -0
  334. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_servers.py +0 -0
  335. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/proxy/test_tool.py +0 -0
  336. {pygeai-0.4.0b2/pygeai/tests/snippets/assistants/data_analyst → pygeai-0.4.0b4/pygeai/tests/snippets}/__init__.py +0 -0
  337. {pygeai-0.4.0b2/pygeai/tests/snippets/assistants/rag → pygeai-0.4.0b4/pygeai/tests/snippets/assistants}/__init__.py +0 -0
  338. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/create_chat_assistant.py +0 -0
  339. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/create_text_assistant.py +0 -0
  340. {pygeai-0.4.0b2/pygeai/tests/snippets/chat → pygeai-0.4.0b4/pygeai/tests/snippets/assistants/data_analyst}/__init__.py +0 -0
  341. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +0 -0
  342. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +0 -0
  343. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/data_analyst/get_status.py +0 -0
  344. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/file_summarizer_assistant.py +0 -0
  345. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/get_assistant_data.py +0 -0
  346. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/get_assistant_list.py +0 -0
  347. {pygeai-0.4.0b2/pygeai/tests/snippets/embeddings → pygeai-0.4.0b4/pygeai/tests/snippets/assistants/rag}/__init__.py +0 -0
  348. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +0 -0
  349. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/delete_al_documents.py +0 -0
  350. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/delete_document.py +0 -0
  351. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +0 -0
  352. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/get_document.py +0 -0
  353. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/get_documents.py +0 -0
  354. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +0 -0
  355. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +0 -0
  356. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/rag/upload_document.py +0 -0
  357. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/send_feedback.py +0 -0
  358. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/assistants/update_chat_assistant.py +0 -0
  359. {pygeai-0.4.0b2/pygeai/tests/snippets/evaluation → pygeai-0.4.0b4/pygeai/tests/snippets/chat}/__init__.py +0 -0
  360. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/cancel_request.py +0 -0
  361. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion.py +0 -0
  362. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion_1.py +0 -0
  363. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion_2.py +0 -0
  364. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion_3.py +0 -0
  365. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion_4.py +0 -0
  366. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/chat_completion_streaming.py +0 -0
  367. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/get_request_status.py +0 -0
  368. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/chat/send_chat_request.py +0 -0
  369. {pygeai-0.4.0b2/pygeai/tests/snippets/files → pygeai-0.4.0b4/pygeai/tests/snippets/embeddings}/__init__.py +0 -0
  370. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/embeddings/generate_embeddings.py +0 -0
  371. {pygeai-0.4.0b2/pygeai/tests/snippets/gam → pygeai-0.4.0b4/pygeai/tests/snippets/evaluation}/__init__.py +0 -0
  372. {pygeai-0.4.0b2/pygeai/tests/snippets/lab → pygeai-0.4.0b4/pygeai/tests/snippets/files}/__init__.py +0 -0
  373. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/files/delete_file.py +0 -0
  374. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/files/get_file_content.py +0 -0
  375. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/files/get_file_data.py +0 -0
  376. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/files/get_file_list.py +0 -0
  377. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/files/upload_file.py +0 -0
  378. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/agents → pygeai-0.4.0b4/pygeai/tests/snippets/gam}/__init__.py +0 -0
  379. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/gam/gam_access_token.py +0 -0
  380. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes → pygeai-0.4.0b4/pygeai/tests/snippets/lab}/__init__.py +0 -0
  381. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agentic_flow_example_1.py +0 -0
  382. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agentic_flow_example_2.py +0 -0
  383. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agentic_flow_example_3.py +0 -0
  384. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agentic_flow_example_4.py +0 -0
  385. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes/jobs → pygeai-0.4.0b4/pygeai/tests/snippets/lab/agents}/__init__.py +0 -0
  386. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/create_agent.py +0 -0
  387. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/create_agent_2.py +0 -0
  388. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/delete_agent.py +0 -0
  389. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/get_agent.py +0 -0
  390. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/get_sharing_link.py +0 -0
  391. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/list_agents.py +0 -0
  392. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/publish_agent_revision.py +0 -0
  393. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/agents/update_agent.py +0 -0
  394. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/assistant_to_agent.py +0 -0
  395. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/crud_ui.py +0 -0
  396. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/processes/kbs → pygeai-0.4.0b4/pygeai/tests/snippets/lab/processes}/__init__.py +0 -0
  397. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/create_process.py +0 -0
  398. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/create_task.py +0 -0
  399. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/samples → pygeai-0.4.0b4/pygeai/tests/snippets/lab/processes/jobs}/__init__.py +0 -0
  400. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +0 -0
  401. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/strategies → pygeai-0.4.0b4/pygeai/tests/snippets/lab/processes/kbs}/__init__.py +0 -0
  402. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/kbs/create_kb.py +0 -0
  403. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/kbs/get_kb.py +0 -0
  404. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +0 -0
  405. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/kbs/try_all.py +0 -0
  406. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/processes/list_processes.py +0 -0
  407. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/runner_1.py +0 -0
  408. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/tools → pygeai-0.4.0b4/pygeai/tests/snippets/lab/samples}/__init__.py +0 -0
  409. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/samples/summarize_files.py +0 -0
  410. {pygeai-0.4.0b2/pygeai/tests/snippets/lab/use_cases → pygeai-0.4.0b4/pygeai/tests/snippets/lab/strategies}/__init__.py +0 -0
  411. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +0 -0
  412. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +0 -0
  413. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +0 -0
  414. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +0 -0
  415. {pygeai-0.4.0b2/pygeai/tests/snippets/migrate → pygeai-0.4.0b4/pygeai/tests/snippets/lab/tools}/__init__.py +0 -0
  416. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/create_tool.py +0 -0
  417. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/delete_tool.py +0 -0
  418. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/get_parameter.py +0 -0
  419. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/get_tool.py +0 -0
  420. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/list_tools.py +0 -0
  421. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/publish_tool_revision.py +0 -0
  422. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/set_parameters.py +0 -0
  423. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/tools/update_tool.py +0 -0
  424. {pygeai-0.4.0b2/pygeai/tests/snippets/organization → pygeai-0.4.0b4/pygeai/tests/snippets/lab/use_cases}/__init__.py +0 -0
  425. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +0 -0
  426. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +0 -0
  427. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +0 -0
  428. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +0 -0
  429. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/create_web_designer.py +0 -0
  430. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/create_web_reader.py +0 -0
  431. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +0 -0
  432. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +0 -0
  433. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +0 -0
  434. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +0 -0
  435. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/update_web_designer.py +0 -0
  436. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/update_web_reader.py +0 -0
  437. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +0 -0
  438. {pygeai-0.4.0b2/pygeai/tests/snippets/rerank → pygeai-0.4.0b4/pygeai/tests/snippets/migrate}/__init__.py +0 -0
  439. {pygeai-0.4.0b2/pygeai/tests/snippets/secrets → pygeai-0.4.0b4/pygeai/tests/snippets/organization}/__init__.py +0 -0
  440. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/create_project.py +0 -0
  441. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/delete_project.py +0 -0
  442. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/export_request_data.py +0 -0
  443. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/get_project_data.py +0 -0
  444. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/get_project_list.py +0 -0
  445. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/get_project_tokens.py +0 -0
  446. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/organization/update_project.py +0 -0
  447. {pygeai-0.4.0b2/pygeai/tests/snippets/usage_limit → pygeai-0.4.0b4/pygeai/tests/snippets/rerank}/__init__.py +0 -0
  448. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/rerank/rerank_chunks.py +0 -0
  449. {pygeai-0.4.0b2/pygeai/vendor/a2a/auth → pygeai-0.4.0b4/pygeai/tests/snippets/secrets}/__init__.py +0 -0
  450. /pygeai-0.4.0b2/pygeai/vendor/a2a/py.typed → /pygeai-0.4.0b4/pygeai/tests/snippets/usage_limit/__init__.py +0 -0
  451. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/delete_usage_limit.py +0 -0
  452. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +0 -0
  453. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +0 -0
  454. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +0 -0
  455. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +0 -0
  456. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +0 -0
  457. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +0 -0
  458. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +0 -0
  459. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/__init__.py +0 -0
  460. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/auth/user.py +0 -0
  461. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/client/__init__.py +0 -0
  462. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/client/client.py +0 -0
  463. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/client/errors.py +0 -0
  464. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/client/helpers.py +0 -0
  465. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/__init__.py +0 -0
  466. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/agent_execution/__init__.py +0 -0
  467. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/agent_execution/agent_executor.py +0 -0
  468. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/agent_execution/context.py +0 -0
  469. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +0 -0
  470. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +0 -0
  471. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/apps/__init__.py +0 -0
  472. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +0 -0
  473. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +0 -0
  474. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +0 -0
  475. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +0 -0
  476. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/context.py +0 -0
  477. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/events/__init__.py +0 -0
  478. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/events/event_consumer.py +0 -0
  479. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/events/event_queue.py +0 -0
  480. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +0 -0
  481. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/events/queue_manager.py +0 -0
  482. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/request_handlers/__init__.py +0 -0
  483. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +0 -0
  484. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +0 -0
  485. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/request_handlers/request_handler.py +0 -0
  486. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/request_handlers/response_helpers.py +0 -0
  487. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/__init__.py +0 -0
  488. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +0 -0
  489. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +0 -0
  490. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/push_notifier.py +0 -0
  491. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/result_aggregator.py +0 -0
  492. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/task_manager.py +0 -0
  493. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/task_store.py +0 -0
  494. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/server/tasks/task_updater.py +0 -0
  495. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/types.py +0 -0
  496. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/__init__.py +0 -0
  497. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/artifact.py +0 -0
  498. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/errors.py +0 -0
  499. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/helpers.py +0 -0
  500. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/message.py +0 -0
  501. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/task.py +0 -0
  502. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai/vendor/a2a/utils/telemetry.py +0 -0
  503. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai.egg-info/dependency_links.txt +0 -0
  504. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai.egg-info/entry_points.txt +0 -0
  505. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai.egg-info/requires.txt +0 -0
  506. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/pygeai.egg-info/top_level.txt +0 -0
  507. {pygeai-0.4.0b2 → pygeai-0.4.0b4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.4.0b2
3
+ Version: 0.4.0b4
4
4
  Summary: Software Development Kit to interact with Globant Enterprise AI.
5
5
  Author-email: Globant <geai-sdk@globant.com>
6
6
  License-Expression: MIT
@@ -41,11 +41,11 @@ Dynamic: license-file
41
41
 
42
42
  PyGEAI is a Software Development Kit (SDK) for interacting with [Globant Enterprise AI](https://wiki.genexus.com/enterprise-ai/wiki?8,Table+of+contents%3AEnterprise+AI). It comprises libraries, tools, code samples, and documentation to simplify your experience with the platform.
43
43
 
44
- ## Repository
44
+ ## Terms and conditions
45
45
 
46
- Find the PyGEAI source code and documentation in the following GitHub repository:
46
+ By using the Python SDK to interact with Globant Enterprise AI, you agree with the following Terms and Conditions:
47
47
 
48
- [GitHub repository](https://github.com/RT-GEN029-GI/pygeai)
48
+ [Terms and Conditions](https://www.globant.com/enterprise-ai/terms-of-use)
49
49
 
50
50
  ## Compatibility
51
51
  This package is compatible with the Globant Enterprise AI release from June 2025.
@@ -2,11 +2,11 @@
2
2
 
3
3
  PyGEAI is a Software Development Kit (SDK) for interacting with [Globant Enterprise AI](https://wiki.genexus.com/enterprise-ai/wiki?8,Table+of+contents%3AEnterprise+AI). It comprises libraries, tools, code samples, and documentation to simplify your experience with the platform.
4
4
 
5
- ## Repository
5
+ ## Terms and conditions
6
6
 
7
- Find the PyGEAI source code and documentation in the following GitHub repository:
7
+ By using the Python SDK to interact with Globant Enterprise AI, you agree with the following Terms and Conditions:
8
8
 
9
- [GitHub repository](https://github.com/RT-GEN029-GI/pygeai)
9
+ [Terms and Conditions](https://www.globant.com/enterprise-ai/terms-of-use)
10
10
 
11
11
  ## Compatibility
12
12
  This package is compatible with the Globant Enterprise AI release from June 2025.
@@ -227,7 +227,7 @@ class SearchOptions(CustomBaseModel):
227
227
  "ingestion": self.ingestion.to_dict() if self.ingestion else None,
228
228
  "options": self.options,
229
229
  "rerank": self.rerank,
230
- "variables": self.variables.to_dict() if self.variables else None,
230
+ "variables": self.variables.to_list() if self.variables else None,
231
231
  "vectorStore": self.vector_store
232
232
  }
233
233
  return {k: v for k, v in result.items() if v is not None}
@@ -94,7 +94,7 @@ class Model(CustomBaseModel):
94
94
  :param llm_config: Optional[LlmConfig] - Overrides default agent LLM settings.
95
95
  :param prompt: Optional[dict] - A tailored prompt specific to this model.
96
96
  """
97
- name: str = Field(..., alias="name")
97
+ name: Optional[str] = Field(None, alias="name")
98
98
  llm_config: Optional[LlmConfig] = Field(None, alias="llmConfig")
99
99
  prompt: Optional[Dict[str, Any]] = Field(None, alias="prompt")
100
100
 
@@ -161,12 +161,13 @@ class Prompt(CustomBaseModel):
161
161
  :param context: Optional[str] - Background context for the agent # NOT IMPLEMENTED YET
162
162
  :param examples: List[PromptExample] - List of example input-output pairs.
163
163
  """
164
- instructions: str = Field(..., alias="instructions")
164
+ instructions: Optional[str] = Field(None, alias="instructions")
165
165
  inputs: Optional[List[str]] = Field(None, alias="inputs")
166
166
  outputs: Optional[List[PromptOutput]] = Field([], alias="outputs")
167
167
  context: Optional[str] = Field(None, alias="context", description="Background context for the agent")
168
168
  examples: Optional[List[PromptExample]] = Field(None, alias="examples")
169
169
 
170
+ '''
170
171
  @field_validator("instructions")
171
172
  @classmethod
172
173
  def validate_instructions(cls, value: str) -> str:
@@ -174,6 +175,7 @@ class Prompt(CustomBaseModel):
174
175
  raise ValueError("instructions cannot be blank")
175
176
 
176
177
  return value
178
+ '''
177
179
 
178
180
  @field_validator("outputs", mode="before")
179
181
  @classmethod
@@ -687,7 +689,7 @@ class Tool(CustomBaseModel):
687
689
  :param status: Optional[str] - Current status of the tool (e.g., "active"), defaults to None.
688
690
  """
689
691
  name: str = Field(..., alias="name", description="The name of the tool")
690
- description: str = Field(..., alias="description", description="Description of the tool's purpose")
692
+ description: Optional[str] = Field(None, alias="description", description="Description of the tool's purpose")
691
693
  scope: str = Field("builtin", alias="scope", description="The scope of the tool (e.g., 'builtin', 'external', 'api')")
692
694
  parameters: Optional[List[ToolParameter]] = Field(None, alias="parameters", description="List of parameters required by the tool")
693
695
  access_scope: Optional[str] = Field(None, alias="accessScope", description="The access scope of the tool ('public' or 'private')")
@@ -730,6 +732,7 @@ class Tool(CustomBaseModel):
730
732
  raise ValueError("public_name is required if access_scope is 'public'")
731
733
  return self
732
734
 
735
+ '''
733
736
  @model_validator(mode="after")
734
737
  def validate_api_tool_requirements(self):
735
738
  if self.scope == "api" and not (self.open_api or self.open_api_json):
@@ -739,6 +742,7 @@ class Tool(CustomBaseModel):
739
742
  if len(param_keys) != len(set(param_keys)):
740
743
  raise ValueError("All parameter keys must be unique within the tool")
741
744
  return self
745
+ '''
742
746
 
743
747
  @field_validator("parameters", mode="before")
744
748
  @classmethod
@@ -110,8 +110,8 @@ class AgenticProcessMapper:
110
110
  """
111
111
  return [
112
112
  Variable(
113
- key=var["key"],
114
- value=var["value"]
113
+ key=var.get("key"),
114
+ value=var.get("value")
115
115
  )
116
116
  for var in data
117
117
  ]
@@ -37,8 +37,8 @@ class ToolMapper:
37
37
  """
38
38
  return [
39
39
  ToolMessage(
40
- description=msg["description"],
41
- type=msg["type"]
40
+ description=msg.get("description"),
41
+ type=msg.get("type")
42
42
  )
43
43
  for msg in messages_data
44
44
  ]
@@ -55,9 +55,9 @@ class ToolMapper:
55
55
  """
56
56
  tool_data = data.get("tool", data)
57
57
 
58
- name = tool_data["name"]
59
- description = tool_data["description"]
60
- scope = tool_data["scope"]
58
+ name = tool_data.get("name")
59
+ description = tool_data.get("description")
60
+ scope = tool_data.get("scope")
61
61
  parameter_data = tool_data.get("parameters")
62
62
  parameters = cls._map_parameters(parameter_data) if parameter_data else None
63
63
 
@@ -0,0 +1,162 @@
1
+ from unittest import TestCase
2
+ from pygeai.chat.clients import ChatClient
3
+
4
+ chat_client: ChatClient
5
+
6
+ class TestChatGenerateImageIntegration(TestCase):
7
+
8
+ def setUp(self):
9
+ self.chat_client = ChatClient(alias="beta")
10
+ self.new_image = self.__load_image()
11
+
12
+
13
+ def __load_image(self):
14
+ return {
15
+ "model": "openai/gpt-image-1",
16
+ "prompt": "generate an image of a futuristic city skyline at sunset",
17
+ "n": 1,
18
+ "quality": "high",
19
+ "size": "1024x1536"
20
+ }
21
+
22
+
23
+ def __generate_image(self, image = None):
24
+ image = image if image is not None else self.new_image
25
+ return self.chat_client.generate_image(
26
+ model=image["model"],
27
+ prompt=image["prompt"],
28
+ n=image["n"],
29
+ quality=image["quality"],
30
+ size=image["size"],
31
+ aspect_ratio= image["aspect_ratio"] if "aspect_ratio" in image else None
32
+ )
33
+
34
+
35
+ def test_generate_image(self):
36
+ created_image = self.__generate_image()
37
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
38
+
39
+
40
+ def test_generate_image_invalid_model(self):
41
+ self.new_image["model"] = "openai/gpt-image-10",
42
+ created_image = self.__generate_image()
43
+
44
+ self.assertEqual(
45
+ created_image["error"]["code"], 400,
46
+ "Expected a 400 code for invalid model"
47
+ )
48
+ self.assertEqual(
49
+ created_image["error"]["message"],
50
+ 'Provider \'["openai\' does not exists.',
51
+ "Expected an error message when model does not exists"
52
+ )
53
+
54
+
55
+ def test_generate_image_no_model(self):
56
+ self.new_image["model"] = ""
57
+ created_image = self.__generate_image()
58
+
59
+ self.assertEqual(
60
+ created_image["error"]["code"], 400,
61
+ "Expected a 400 code for no model"
62
+ )
63
+ self.assertEqual(
64
+ created_image["error"]["message"],
65
+ "Invalid 'model' name. Must follow pattern {provider}/{modelName}",
66
+ "Expected an error message when no model is provided"
67
+ )
68
+
69
+
70
+ def test_generate_image_no_prompt(self):
71
+ self.new_image["prompt"] = ""
72
+ created_image = self.__generate_image()
73
+
74
+ self.assertEqual(
75
+ created_image["error"]["type"],
76
+ "invalid_request_error",
77
+ "Expected a 400 code for no model"
78
+ )
79
+ self.assertEqual(
80
+ created_image["error"]["param"], "prompt",
81
+ "Expected an error message when no model is provided"
82
+ )
83
+
84
+
85
+ def test_generate_image_specific_n(self):
86
+ self.new_image["n"] = 2
87
+
88
+ created_image = self.__generate_image()
89
+ self.assertEqual(len(created_image["data"]), 2, "Expected two images to be generated")
90
+
91
+
92
+ def test_generate_image_no_n(self):
93
+ self.new_image["n"] = None # default is 1
94
+
95
+ created_image = self.__generate_image()
96
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
97
+
98
+
99
+ def test_generate_image_no_supported_n(self):
100
+ self.new_image["model"] = "openai/dall-e-3"
101
+ self.new_image["n"] = 5
102
+
103
+ created_image = self.__generate_image()
104
+ self.assertIn(
105
+ "Invalid 'n': integer above maximum value",
106
+ created_image["error"]["message"],
107
+ "Expected an error message when n is not supported by the model"
108
+ )
109
+
110
+
111
+ def test_generate_image_no_quality(self):
112
+ self.new_image["quality"] = ""
113
+
114
+ created_image = self.__generate_image()
115
+ self.assertIn(
116
+ "Invalid value: ''. Supported values are: 'low', 'medium', 'high', and 'auto'",
117
+ created_image["error"]["message"],
118
+ "Expected an error message when quality is not provided"
119
+ )
120
+
121
+
122
+ def test_generate_image_no_supported_quality(self):
123
+ self.new_image["model"] = "openai/dall-e-3"
124
+
125
+ created_image = self.__generate_image()
126
+ self.assertIn(
127
+ "Invalid value: 'high'. Supported values are: 'standard' and 'hd'",
128
+ created_image["error"]["message"],
129
+ "Expected an error message when quality is not supported by the model"
130
+ )
131
+
132
+
133
+ def test_generate_image_no_size(self):
134
+ self.new_image["size"] = ""
135
+
136
+ created_image = self.__generate_image()
137
+ self.assertIn(
138
+ "Invalid value: ''. Supported values are: '1024x1024', '1024x1536', '1536x1024', and 'auto'",
139
+ created_image["error"]["message"],
140
+ "Expected an error message when no size is provided"
141
+ )
142
+
143
+
144
+ def test_generate_image_no_supported_size(self):
145
+ self.new_image["size"] = 1024
146
+ self.new_image["quality"] = None
147
+
148
+ created_image = self.__generate_image()
149
+ self.assertIn(
150
+ "Invalid type for 'size': expected one of '1024x1024', '1024x1536', '1536x1024', or 'auto', but got an integer instead",
151
+ created_image["error"]["message"],
152
+ "Expected an error message when no size is provided"
153
+ )
154
+
155
+
156
+ def test_generate_image_with_aspect_ratio(self):
157
+ self.new_image["model"] = "vertex_ai/imagen-3.0-generate-001"
158
+ self.new_image["aspect_ratio"] = "4:3"
159
+ self.new_image["quality"] = None
160
+
161
+ created_image = self.__generate_image()
162
+ self.assertEqual(len(created_image["data"]), 1, "Expected an image to be generated")
@@ -287,21 +287,18 @@ class TestAILabCreateAgentIntegration(TestCase):
287
287
  )
288
288
 
289
289
 
290
- @unittest.skip("Agent is getting created regardless of the prompt instructions being empty")
291
290
  def test_create_agent_no_prompt_instructions(self):
292
291
  self.new_agent.agent_data.prompt.instructions = ""
293
- with self.assertRaises(ValidationError) as exception:
294
- self.__create_agent()
295
- self.assertIn(
296
- "instructions",
297
- str(exception.exception),
298
- "Expected a validation error about allowed values for instructions"
299
- )
292
+ self.created_agent = self.__create_agent()
300
293
 
301
- self.assertIn(
302
- "Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]",
303
- str(exception.exception),
304
- "Expected a validation error about allowed values for instructions"
294
+ self.assertTrue(
295
+ isinstance(self.created_agent, Agent),
296
+ "Expected a created agent"
297
+ )
298
+
299
+ self.assertIsNone(
300
+ self.created_agent.agent_data.prompt.instructions,
301
+ "Expected the created agent to not have prompt instructions"
305
302
  )
306
303
 
307
304
 
@@ -207,28 +207,20 @@ class TestAILabUpdateAgentIntegration(TestCase):
207
207
  f"Expected a validation error about allowed values for instructions when autopublish is {'enabled' if auto_publish else 'disabled'}"
208
208
  )
209
209
 
210
-
210
+ # TODO: Change validation when API behavior is fixed
211
211
  def test_update_agent_no_model(self):
212
212
  test_params = [ True, False ]
213
213
  self.agent_to_update.agent_data.models[0].name = ""
214
214
 
215
215
  for auto_publish in test_params:
216
216
  with self.subTest(input=auto_publish):
217
- if auto_publish == False:
218
- with self.assertRaises(ValidationError) as exception:
219
- self.__update_agent(automatic_publish=auto_publish)
217
+
218
+ # If the agent is not published, the API returns a warning message for invalid model name. However, the sdk mapping is not returning it.
219
+ if auto_publish == False:
220
+ updated_agent = self.__update_agent(automatic_publish=auto_publish)
220
221
  error_msg = str(exception.exception)
221
222
 
222
- self.assertIn(
223
- "name",
224
- error_msg,
225
- "Expected a validation error about empty model name"
226
- )
227
- self.assertIn(
228
- "Input should be a valid string [type=string_type, input_value=None, input_type=NoneType]",
229
- error_msg,
230
- "Expected a validation error about empty model name"
231
- )
223
+ self.assertTrue(self.isInstance(updated_agent), Agent)
232
224
  else:
233
225
  with self.assertRaises(APIError) as exception:
234
226
  self.__update_agent(automatic_publish=auto_publish)
@@ -0,0 +1,293 @@
1
+ from unittest import TestCase
2
+ import unittest
3
+ import uuid
4
+ from pygeai.lab.managers import AILabManager
5
+ from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Tool, ToolParameter,Sampling, PromptExample, PromptOutput
6
+ from pydantic import ValidationError
7
+ from pygeai.core.common.exceptions import APIError, InvalidAPIResponseException
8
+
9
+
10
+ class TestAILabCreateToolIntegration(TestCase):
11
+ def setUp(self):
12
+ """
13
+ Set up the test environment.
14
+ """
15
+ self.ai_lab_manager = AILabManager(alias="beta")
16
+ self.new_tool = self.__load_tool()
17
+ self.created_tool: Agent = None
18
+
19
+
20
+ def tearDown(self):
21
+ """
22
+ Clean up after each test if necessary.
23
+ This can be used to delete the created tool
24
+ """
25
+ if isinstance(self.created_tool, Tool):
26
+
27
+ self.ai_lab_manager.delete_tool(self.created_tool.id)
28
+
29
+
30
+ def __load_tool(self):
31
+ return Tool(
32
+ name=str(uuid.uuid4()),
33
+ description="Tool created for sdk testing purposes",
34
+ scope="builtin",
35
+ openApi="https://raw.usercontent.com//openapi.json",
36
+ openApiJson={"openapi": "3.0.0","info": {"title": "Simple API overview","version": "2.0.0"}},
37
+ accessScope="private",
38
+ reportEvents="None",
39
+ parameters=[{"key": "param", "description": "param description", "type":"app", "value":"param value", "data_type": "String", "isRequired": False}],
40
+ )
41
+
42
+
43
+ def __create_tool(self, tool=None, automatic_publish=False):
44
+ """
45
+ Helper to create a tool using ai_lab_manager.
46
+ """
47
+ return self.ai_lab_manager.create_tool(
48
+ tool=self.new_tool if tool is None else tool,
49
+ automatic_publish=automatic_publish
50
+ )
51
+
52
+
53
+ def test_create_tool_full_data(self):
54
+ self.created_tool = self.__create_tool()
55
+ created_tool = self.created_tool
56
+ tool = self.new_tool
57
+ self.assertTrue(isinstance(created_tool, Tool), "Expected a created tool")
58
+
59
+ # Assert the main fields of the created tool
60
+ self.assertIsNotNone(created_tool.id)
61
+ self.assertEqual(created_tool.name, tool.name)
62
+ self.assertEqual(created_tool.description, tool.description)
63
+ self.assertEqual(created_tool.scope, tool.scope)
64
+ self.assertEqual(created_tool.access_scope, tool.access_scope)
65
+ self.assertEqual(created_tool.open_api, tool.open_api)
66
+ self.assertEqual(created_tool.status, "active")
67
+
68
+ # Assert agentData fields
69
+ tool_param = created_tool.parameters[0]
70
+ self.assertTrue(isinstance(tool_param, ToolParameter), "Expected parameters to be of type ToolParameter")
71
+ self.assertEqual(tool_param.key, tool.parameters[0].key)
72
+ self.assertEqual(tool_param.data_type, tool.parameters[0].data_type)
73
+ self.assertEqual(tool_param.description, tool.parameters[0].description)
74
+ self.assertEqual(tool_param.is_required, tool.parameters[0].is_required)
75
+ self.assertEqual(tool_param.type, tool.parameters[0].type)
76
+ self.assertEqual(tool_param.value, tool.parameters[0].value)
77
+
78
+
79
+ def test_create_tool_minimum_required_data(self):
80
+ self.new_tool = Tool(
81
+ name=str(uuid.uuid4()),
82
+ description="Tool created for sdk testing purposes",
83
+ scope="builtin"
84
+ )
85
+ self.created_tool = self.__create_tool()
86
+ tool = self.new_tool
87
+
88
+ self.assertIsNotNone(self.created_tool.id)
89
+ self.assertEqual(self.created_tool.name, tool.name)
90
+ self.assertEqual(self.created_tool.description, tool.description)
91
+
92
+
93
+ def test_create_tool_without_required_data(self):
94
+ test_params = [ True, False ]
95
+
96
+ for auto_publish in test_params:
97
+
98
+ with self.subTest(input=auto_publish):
99
+ with self.assertRaises(ValidationError) as context:
100
+ self.new_tool = Tool(
101
+ name=str(uuid.uuid4())
102
+ )
103
+ self.__create_tool(automatic_publish=auto_publish)
104
+
105
+ self.assertIn("description", str(context.exception))
106
+ self.assertIn("Field required", str(context.exception))
107
+
108
+
109
+ def test_create_tool_no_name(self):
110
+ test_params = [ True, False ]
111
+
112
+ for auto_publish in test_params:
113
+ with self.subTest(input=auto_publish):
114
+ self.new_tool.name = ""
115
+ with self.assertRaises(APIError) as exception:
116
+ self.__create_tool(automatic_publish=auto_publish)
117
+
118
+ self.assertIn(
119
+ "Tool name cannot be empty.",
120
+ str(exception.exception),
121
+ f"Expected an error about the missing tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
122
+ )
123
+
124
+
125
+ def test_create_tool_duplicated_name(self):
126
+ test_params = [ True, False ]
127
+
128
+ for auto_publish in test_params:
129
+
130
+ with self.subTest(input=auto_publish):
131
+ self.new_tool.name = "sdk_project_gemini_tool"
132
+ with self.assertRaises(APIError) as exception:
133
+ self.__create_tool(automatic_publish=auto_publish)
134
+ self.assertIn(
135
+ "Tool already exists [name=sdk_project_gemini_tool]..",
136
+ str(exception.exception),
137
+ f"Expected an error about duplicated tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
138
+ )
139
+
140
+
141
+ def test_create_tool_invalid_name(self):
142
+ test_params = [ True, False ]
143
+
144
+ for auto_publish in test_params:
145
+ with self.subTest(input=auto_publish):
146
+ new_tool = self.__load_tool()
147
+ new_tool2 = self.__load_tool()
148
+
149
+ with self.assertRaises(APIError) as exception:
150
+ new_tool.name = f"{new_tool.name}:invalid"
151
+ self.__create_tool(tool=new_tool, automatic_publish=auto_publish)
152
+ self.assertIn(
153
+ "Invalid character in name (: is not allowed).",
154
+ str(exception.exception),
155
+ f"Expected an error about invalid character (:) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
156
+ )
157
+
158
+ with self.assertRaises(APIError) as exception:
159
+ new_tool2.name = f"{new_tool2.name}/invalid"
160
+ self.__create_tool(tool=new_tool2, automatic_publish=auto_publish)
161
+ self.assertIn(
162
+ "Invalid character in name (/ is not allowed).",
163
+ str(exception.exception),
164
+ f"Expected an error about invalid character (/) in tool name with autopublish {'enabled' if auto_publish else 'disabled'}"
165
+ )
166
+
167
+
168
+ def test_create_tool_invalid_access_scope(self):
169
+ self.new_tool.access_scope = "project"
170
+ with self.assertRaises(ValueError) as exc:
171
+ self.__create_tool()
172
+ self.assertEqual(
173
+ str(exc.exception),
174
+ "Access scope must be one of public, private.",
175
+ "Expected a ValueError exception for invalid access scope"
176
+ )
177
+
178
+
179
+ def test_create_tool_default_scope(self):
180
+ self.new_tool.access_scope = None
181
+ self.created_tool = self.__create_tool()
182
+
183
+ self.assertEqual(self.created_tool.access_scope, "private", "Expected the default access scope to be 'private' when not specified")
184
+
185
+
186
+ def test_create_tool_no_public_name(self):
187
+ test_params = [ True, False ]
188
+
189
+ for auto_publish in test_params:
190
+
191
+ with self.subTest(input=auto_publish):
192
+ self.new_tool.access_scope = "public"
193
+ self.new_tool.public_name = None
194
+ with self.assertRaises(APIError) as exception:
195
+ self.__create_tool(automatic_publish=auto_publish)
196
+ self.assertIn(
197
+ "Tool publicName is required for tools with accessScope=public.",
198
+ str(exception.exception),
199
+ f"Expected an error about missing publicName for public access scope with autopublish {'enabled' if auto_publish else 'disabled'}"
200
+ )
201
+
202
+
203
+ def test_create_tool_invalid_public_name(self):
204
+ test_params = [ True, False ]
205
+
206
+ for auto_publish in test_params:
207
+ with self.subTest(input=auto_publish):
208
+ self.new_tool.access_scope = "public"
209
+ self.new_tool.public_name = "com.sdk.testing#" # Add invalid character to public name
210
+ with self.assertRaises(APIError) as exception:
211
+ self.__create_tool(automatic_publish=auto_publish)
212
+
213
+ self.assertIn(
214
+ "Invalid public name, it can only contain lowercase letters, numbers, periods (.), dashes (-), and underscores (_). Please remove any other characters.",
215
+ str(exception.exception),
216
+ f"The expected error about invalid publicName was not returned when autopublish is {'enabled' if auto_publish else 'disabled'}"
217
+ )
218
+
219
+
220
+ def test_create_tool_duplicated_public_name(self):
221
+ test_params = [ True, False ]
222
+
223
+ # Set the scope as public and assign a public name
224
+ self.new_tool.access_scope = "public"
225
+ self.new_tool.public_name=f"public_{self.new_tool.name}"
226
+ self.created_tool = self.__create_tool()
227
+
228
+ for auto_publish in test_params:
229
+ with self.subTest(input=auto_publish):
230
+
231
+ # Create a new with the same public name of created_tool
232
+ duplicated_pn_tool = self.__load_tool()
233
+ duplicated_pn_tool.access_scope = "public"
234
+ duplicated_pn_tool.public_name = self.created_tool.public_name
235
+
236
+ with self.assertRaises(APIError) as exception:
237
+ self.__create_tool(tool=duplicated_pn_tool, automatic_publish=auto_publish)
238
+ self.assertIn(
239
+ f"Tool already exists [publicName={self.created_tool.public_name}].",
240
+ str(exception.exception),
241
+ f"Expected an error about the duplicated public name when autopublish is {'enabled' if auto_publish else 'disabled'}"
242
+ )
243
+
244
+
245
+ def test_create_tool_api_scope_with_no_open_api(self):
246
+ self.new_tool.scope = "api"
247
+ with self.assertRaises(ValueError) as exception:
248
+ self.new_tool.openApi = ""
249
+ self.assertIn(
250
+ '"Tool" object has no field "openApi"',
251
+ str(exception.exception),
252
+ "Expected a validation error when openApi is not provided for api scope"
253
+ )
254
+
255
+
256
+ def test_create_tool_api_scope_with_no_open_api_json(self):
257
+ self.new_tool.scope = "api"
258
+ with self.assertRaises(ValueError) as exception:
259
+ self.new_tool.openApiJson = ""
260
+
261
+ self.assertIn(
262
+ '"Tool" object has no field "openApiJson"',
263
+ str(exception.exception),
264
+ "Expected a validation error when openApiJson is not provided for api scope"
265
+ )
266
+
267
+
268
+ def test_create_tool_invalid_scope(self):
269
+ test_params = [ True, False ]
270
+
271
+ for auto_publish in test_params:
272
+ with self.subTest(input=auto_publish):
273
+
274
+ with self.assertRaises(ValueError) as exception:
275
+ self.new_tool.scope = "source"
276
+ self.__create_tool()
277
+ self.assertIn(
278
+ 'Scope must be one of builtin, external, api, proxied',
279
+ str(exception.exception),
280
+ "Expected a validation error about allowed values for instructions"
281
+ )
282
+
283
+
284
+ def test_create_tool_autopublish(self):
285
+ self.created_tool = self.__create_tool(automatic_publish=True)
286
+ self.assertFalse(self.created_tool.is_draft, "Expected the tool to be published automatically")
287
+
288
+
289
+ def test_create_tool_autopublish_private_scope(self):
290
+ self.new_tool.access_scope = "private"
291
+
292
+ self.created_tool = self.__create_tool(automatic_publish=True)
293
+ self.assertFalse(self.created_tool.is_draft, "Expected the tool to be published automatically even with private scope")