pygeai 0.2.7b39__tar.gz → 0.2.7b40__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.
Files changed (490) hide show
  1. {pygeai-0.2.7b39/pygeai.egg-info → pygeai-0.2.7b40}/PKG-INFO +1 -1
  2. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/configuration.py +3 -5
  3. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/handlers.py +10 -1
  4. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/agents/clients.py +35 -19
  5. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/agents/mappers.py +2 -0
  6. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/managers.py +2 -0
  7. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/models.py +10 -0
  8. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/processes/clients.py +15 -14
  9. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/tools/clients.py +4 -6
  10. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_create_agent.py +1 -3
  11. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agentic_flow_example_1.py +25 -23
  12. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/create_agent.py +4 -3
  13. {pygeai-0.2.7b39 → pygeai-0.2.7b40/pygeai.egg-info}/PKG-INFO +1 -1
  14. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pyproject.toml +1 -1
  15. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/LICENSE +0 -0
  16. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/MANIFEST.in +0 -0
  17. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/README.md +0 -0
  18. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/docs/geai-proxy/README.md +0 -0
  19. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/__init__.py +0 -0
  20. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/admin/__init__.py +0 -0
  21. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/admin/clients.py +0 -0
  22. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/admin/endpoints.py +0 -0
  23. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/__init__.py +0 -0
  24. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/clients.py +0 -0
  25. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/data/__init__.py +0 -0
  26. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/data/clients.py +0 -0
  27. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/data_analyst/__init__.py +0 -0
  28. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/data_analyst/clients.py +0 -0
  29. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/data_analyst/endpoints.py +0 -0
  30. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/endpoints.py +0 -0
  31. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/managers.py +0 -0
  32. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/mappers.py +0 -0
  33. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/__init__.py +0 -0
  34. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/clients.py +0 -0
  35. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/endpoints.py +0 -0
  36. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/mappers.py +0 -0
  37. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/models.py +0 -0
  38. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/assistant/rag/responses.py +0 -0
  39. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/__init__.py +0 -0
  40. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/clients.py +0 -0
  41. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/endpoints.py +0 -0
  42. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/iris.py +0 -0
  43. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/managers.py +0 -0
  44. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/session.py +0 -0
  45. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/settings.py +0 -0
  46. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/chat/ui.py +0 -0
  47. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/__init__.py +0 -0
  48. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/__main__.py +0 -0
  49. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/__init__.py +0 -0
  50. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/admin.py +0 -0
  51. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/assistant.py +0 -0
  52. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/base.py +0 -0
  53. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/builders.py +0 -0
  54. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/chat.py +0 -0
  55. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/common.py +0 -0
  56. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/embeddings.py +0 -0
  57. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/evaluation.py +0 -0
  58. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/feedback.py +0 -0
  59. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/files.py +0 -0
  60. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/flows/__init__.py +0 -0
  61. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/gam.py +0 -0
  62. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/lab/__init__.py +0 -0
  63. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/lab/ai_lab.py +0 -0
  64. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/lab/common.py +0 -0
  65. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/lab/spec.py +0 -0
  66. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/llm.py +0 -0
  67. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/migrate.py +0 -0
  68. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/options.py +0 -0
  69. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/organization.py +0 -0
  70. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/rag.py +0 -0
  71. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/rerank.py +0 -0
  72. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/secrets.py +0 -0
  73. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/usage_limits.py +0 -0
  74. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/validators.py +0 -0
  75. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/commands/version.py +0 -0
  76. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/geai.py +0 -0
  77. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/geai_proxy.py +0 -0
  78. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/install_man.py +0 -0
  79. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/parsers.py +0 -0
  80. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/texts/__init__.py +0 -0
  81. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/cli/texts/help.py +0 -0
  82. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/__init__.py +0 -0
  83. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/__init__.py +0 -0
  84. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/clients.py +0 -0
  85. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/mappers.py +0 -0
  86. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/models.py +0 -0
  87. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/responses.py +0 -0
  88. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/base/session.py +0 -0
  89. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/common/__init__.py +0 -0
  90. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/common/config.py +0 -0
  91. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/common/decorators.py +0 -0
  92. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/common/exceptions.py +0 -0
  93. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/__init__.py +0 -0
  94. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/clients.py +0 -0
  95. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/endpoints.py +0 -0
  96. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/managers.py +0 -0
  97. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/mappers.py +0 -0
  98. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/models.py +0 -0
  99. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/embeddings/responses.py +0 -0
  100. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/feedback/__init__.py +0 -0
  101. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/feedback/clients.py +0 -0
  102. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/feedback/endpoints.py +0 -0
  103. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/feedback/models.py +0 -0
  104. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/__init__.py +0 -0
  105. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/clients.py +0 -0
  106. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/endpoints.py +0 -0
  107. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/managers.py +0 -0
  108. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/mappers.py +0 -0
  109. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/models.py +0 -0
  110. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/files/responses.py +0 -0
  111. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/llm/__init__.py +0 -0
  112. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/llm/clients.py +0 -0
  113. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/llm/endpoints.py +0 -0
  114. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/models.py +0 -0
  115. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/plugins/__init__.py +0 -0
  116. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/plugins/clients.py +0 -0
  117. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/plugins/endpoints.py +0 -0
  118. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/plugins/models.py +0 -0
  119. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/__init__.py +0 -0
  120. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/clients.py +0 -0
  121. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/endpoints.py +0 -0
  122. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/managers.py +0 -0
  123. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/mappers.py +0 -0
  124. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/rerank/models.py +0 -0
  125. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/responses.py +0 -0
  126. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/secrets/__init__.py +0 -0
  127. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/secrets/clients.py +0 -0
  128. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/secrets/endpoints.py +0 -0
  129. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/__init__.py +0 -0
  130. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/llm/__init__.py +0 -0
  131. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/llm/model.py +0 -0
  132. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/llm/providers.py +0 -0
  133. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/response.py +0 -0
  134. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/services/rest.py +0 -0
  135. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/singleton.py +0 -0
  136. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/utils/__init__.py +0 -0
  137. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/core/utils/console.py +0 -0
  138. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/dbg/__init__.py +0 -0
  139. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/dbg/debugger.py +0 -0
  140. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/__init__.py +0 -0
  141. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/clients.py +0 -0
  142. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/dataset/__init__.py +0 -0
  143. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/dataset/clients.py +0 -0
  144. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/dataset/endpoints.py +0 -0
  145. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/plan/__init__.py +0 -0
  146. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/plan/clients.py +0 -0
  147. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/plan/endpoints.py +0 -0
  148. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/result/__init__.py +0 -0
  149. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/result/clients.py +0 -0
  150. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/evaluation/result/endpoints.py +0 -0
  151. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/flows/__init__.py +0 -0
  152. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/flows/endpoints.py +0 -0
  153. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/flows/models.py +0 -0
  154. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/gam/__init__.py +0 -0
  155. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/gam/clients.py +0 -0
  156. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/gam/endpoints.py +0 -0
  157. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/health/__init__.py +0 -0
  158. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/health/clients.py +0 -0
  159. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/health/endpoints.py +0 -0
  160. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/__init__.py +0 -0
  161. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/agents/__init__.py +0 -0
  162. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/agents/endpoints.py +0 -0
  163. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/constants.py +0 -0
  164. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/processes/__init__.py +0 -0
  165. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/processes/endpoints.py +0 -0
  166. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/processes/mappers.py +0 -0
  167. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/runners.py +0 -0
  168. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/spec/__init__.py +0 -0
  169. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/spec/loader.py +0 -0
  170. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/spec/parsers.py +0 -0
  171. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/strategies/__init__.py +0 -0
  172. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/strategies/clients.py +0 -0
  173. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/strategies/endpoints.py +0 -0
  174. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/strategies/mappers.py +0 -0
  175. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/tools/__init__.py +0 -0
  176. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/tools/endpoints.py +0 -0
  177. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/lab/tools/mappers.py +0 -0
  178. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/man/__init__.py +0 -0
  179. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/man/man1/__init__.py +0 -0
  180. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/man/man1/geai-proxy.1 +0 -0
  181. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/man/man1/geai.1 +0 -0
  182. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/migration/__init__.py +0 -0
  183. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/migration/strategies.py +0 -0
  184. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/migration/tools.py +0 -0
  185. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/__init__.py +0 -0
  186. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/clients.py +0 -0
  187. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/endpoints.py +0 -0
  188. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/limits/__init__.py +0 -0
  189. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/limits/clients.py +0 -0
  190. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/limits/endpoints.py +0 -0
  191. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/limits/managers.py +0 -0
  192. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/limits/mappers.py +0 -0
  193. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/managers.py +0 -0
  194. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/mappers.py +0 -0
  195. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/organization/responses.py +0 -0
  196. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/__init__.py +0 -0
  197. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/clients.py +0 -0
  198. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/config.py +0 -0
  199. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/managers.py +0 -0
  200. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/servers.py +0 -0
  201. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/proxy/tool.py +0 -0
  202. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/__init__.py +0 -0
  203. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/admin/__init__.py +0 -0
  204. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/admin/test_clients.py +0 -0
  205. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/__init__.py +0 -0
  206. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/rag/__init__.py +0 -0
  207. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/rag/test_clients.py +0 -0
  208. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/rag/test_mappers.py +0 -0
  209. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/rag/test_models.py +0 -0
  210. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/test_clients.py +0 -0
  211. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/test_managers.py +0 -0
  212. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/assistants/test_mappers.py +0 -0
  213. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/chat/__init__.py +0 -0
  214. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/chat/test_clients.py +0 -0
  215. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/chat/test_iris.py +0 -0
  216. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/chat/test_session.py +0 -0
  217. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/chat/test_ui.py +0 -0
  218. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/__init__.py +0 -0
  219. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/__init__.py +0 -0
  220. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/lab/__init__.py +0 -0
  221. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/lab/test_ai_lab.py +0 -0
  222. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/lab/test_common.py +0 -0
  223. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/lab/test_spec.py +0 -0
  224. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_assistant.py +0 -0
  225. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_chat.py +0 -0
  226. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_common.py +0 -0
  227. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_embeddings.py +0 -0
  228. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_feedback.py +0 -0
  229. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_files.py +0 -0
  230. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_gam.py +0 -0
  231. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_llm.py +0 -0
  232. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_migrate.py +0 -0
  233. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_organization.py +0 -0
  234. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_rag.py +0 -0
  235. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_rerank.py +0 -0
  236. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_show_help.py +0 -0
  237. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_usage_limits.py +0 -0
  238. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_validators.py +0 -0
  239. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/commands/test_version.py +0 -0
  240. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/cli/test_parsers.py +0 -0
  241. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/__init__.py +0 -0
  242. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/__init__.py +0 -0
  243. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/data/__init__.py +0 -0
  244. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/data/mappers.py +0 -0
  245. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/data/models.py +0 -0
  246. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/test_mappers.py +0 -0
  247. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/base/test_models.py +0 -0
  248. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/common/__init__.py +0 -0
  249. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/common/data/__init__.py +0 -0
  250. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/common/test_config.py +0 -0
  251. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/common/test_decorators.py +0 -0
  252. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/embeddings/__init__.py +0 -0
  253. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/embeddings/test_clients.py +0 -0
  254. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/feedback/__init__.py +0 -0
  255. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/feedback/test_clients.py +0 -0
  256. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/files/__init__.py +0 -0
  257. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/files/test_clients.py +0 -0
  258. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/files/test_managers.py +0 -0
  259. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/files/test_models.py +0 -0
  260. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/files/test_responses.py +0 -0
  261. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/llm/__init__.py +0 -0
  262. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/llm/test_clients.py +0 -0
  263. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/rerank/__init__.py +0 -0
  264. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/rerank/test_clients.py +0 -0
  265. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/rerank/test_managers.py +0 -0
  266. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/rerank/test_mappers.py +0 -0
  267. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/secrets/__init__.py +0 -0
  268. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/secrets/test_clients.py +0 -0
  269. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/services/__init__.py +0 -0
  270. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/services/test_rest.py +0 -0
  271. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/test_handlers.py +0 -0
  272. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/utils/__init__.py +0 -0
  273. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/core/utils/test_console.py +0 -0
  274. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/dbg/__init__.py +0 -0
  275. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/dbg/test_debugger.py +0 -0
  276. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/gam/__init__.py +0 -0
  277. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/gam/test_clients.py +0 -0
  278. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/health/__init__.py +0 -0
  279. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/health/test_clients.py +0 -0
  280. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/__init__.py +0 -0
  281. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/__init__.py +0 -0
  282. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/__init__.py +0 -0
  283. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_agents_list.py +0 -0
  284. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_create_sharing_link.py +0 -0
  285. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_delete_agent.py +0 -0
  286. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_get_agent.py +0 -0
  287. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_publish_agent_revision.py +0 -0
  288. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/integration/lab/agents/test_update_agent.py +0 -0
  289. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/__init__.py +0 -0
  290. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/agents/__init__.py +0 -0
  291. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/agents/test_clients.py +0 -0
  292. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/agents/test_mappers.py +0 -0
  293. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/processes/__init__.py +0 -0
  294. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/processes/test_clients.py +0 -0
  295. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/processes/test_mappers.py +0 -0
  296. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/spec/__init__.py +0 -0
  297. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/spec/test_loader.py +0 -0
  298. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/spec/test_parsers.py +0 -0
  299. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/strategies/__init__.py +0 -0
  300. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/strategies/test_clients.py +0 -0
  301. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/strategies/test_mappers.py +0 -0
  302. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/test_managers.py +0 -0
  303. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/test_mappers.py +0 -0
  304. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/test_models.py +0 -0
  305. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/tools/__init__.py +0 -0
  306. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/tools/test_clients.py +0 -0
  307. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/lab/tools/test_mappers.py +0 -0
  308. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/migration/__init__.py +0 -0
  309. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/migration/test_strategies.py +0 -0
  310. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/migration/test_tools.py +0 -0
  311. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/__init__.py +0 -0
  312. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/limits/__init__.py +0 -0
  313. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/limits/test_clients.py +0 -0
  314. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/limits/test_managers.py +0 -0
  315. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/test_clients.py +0 -0
  316. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/test_managers.py +0 -0
  317. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/organization/test_mappers.py +0 -0
  318. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/__init__.py +0 -0
  319. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/__init__.py +0 -0
  320. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/create_chat_assistant.py +0 -0
  321. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/create_text_assistant.py +0 -0
  322. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/data_analyst/__init__.py +0 -0
  323. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/data_analyst/extend_and_check.py +0 -0
  324. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/data_analyst/extend_dataset.py +0 -0
  325. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/data_analyst/get_status.py +0 -0
  326. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/file_summarizer_assistant.py +0 -0
  327. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/get_assistant_data.py +0 -0
  328. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/get_assistant_list.py +0 -0
  329. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/__init__.py +0 -0
  330. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/create_rag_assistant.py +0 -0
  331. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/delete_al_documents.py +0 -0
  332. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/delete_document.py +0 -0
  333. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/delete_rag_assistant.py +0 -0
  334. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/get_document.py +0 -0
  335. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/get_documents.py +0 -0
  336. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/get_rag_assistant_data.py +0 -0
  337. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/update_rag_assistant.py +0 -0
  338. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/rag/upload_document.py +0 -0
  339. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/send_feedback.py +0 -0
  340. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/assistants/update_chat_assistant.py +0 -0
  341. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/__init__.py +0 -0
  342. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/cancel_request.py +0 -0
  343. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion.py +0 -0
  344. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion_1.py +0 -0
  345. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion_2.py +0 -0
  346. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion_3.py +0 -0
  347. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion_4.py +0 -0
  348. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/chat_completion_streaming.py +0 -0
  349. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/get_request_status.py +0 -0
  350. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/chat/send_chat_request.py +0 -0
  351. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/embeddings/__init__.py +0 -0
  352. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/embeddings/generate_embeddings.py +0 -0
  353. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/evaluation/__init__.py +0 -0
  354. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/__init__.py +0 -0
  355. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/delete_file.py +0 -0
  356. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/get_file_content.py +0 -0
  357. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/get_file_data.py +0 -0
  358. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/get_file_list.py +0 -0
  359. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/files/upload_file.py +0 -0
  360. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/gam/__init__.py +0 -0
  361. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/gam/gam_access_token.py +0 -0
  362. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/__init__.py +0 -0
  363. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agentic_flow_example_2.py +0 -0
  364. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agentic_flow_example_3.py +0 -0
  365. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agentic_flow_example_4.py +0 -0
  366. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/__init__.py +0 -0
  367. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/create_agent_2.py +0 -0
  368. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/delete_agent.py +0 -0
  369. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/get_agent.py +0 -0
  370. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/get_sharing_link.py +0 -0
  371. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/list_agents.py +0 -0
  372. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/publish_agent_revision.py +0 -0
  373. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/agents/update_agent.py +0 -0
  374. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/assistant_to_agent.py +0 -0
  375. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/crud_ui.py +0 -0
  376. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/__init__.py +0 -0
  377. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/create_process.py +0 -0
  378. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/create_task.py +0 -0
  379. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/jobs/__init__.py +0 -0
  380. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/jobs/list_jobs.py +0 -0
  381. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/kbs/__init__.py +0 -0
  382. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/kbs/create_kb.py +0 -0
  383. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/kbs/get_kb.py +0 -0
  384. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/kbs/list_kbs.py +0 -0
  385. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/kbs/try_all.py +0 -0
  386. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/processes/list_processes.py +0 -0
  387. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/runner_1.py +0 -0
  388. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/samples/__init__.py +0 -0
  389. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/samples/summarize_files.py +0 -0
  390. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/strategies/__init__.py +0 -0
  391. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/strategies/create_reasoning_strategy.py +0 -0
  392. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/strategies/get_reasoning_strategy.py +0 -0
  393. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/strategies/list_reasoning_strategies.py +0 -0
  394. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/strategies/update_reasoning_strategy.py +0 -0
  395. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/__init__.py +0 -0
  396. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/create_tool.py +0 -0
  397. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/delete_tool.py +0 -0
  398. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/get_parameter.py +0 -0
  399. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/get_tool.py +0 -0
  400. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/list_tools.py +0 -0
  401. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/publish_tool_revision.py +0 -0
  402. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/set_parameters.py +0 -0
  403. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/tools/update_tool.py +0 -0
  404. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/__init__.py +0 -0
  405. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/c_code_fixer_agent_flow.py +0 -0
  406. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/create_cli_expert.py +0 -0
  407. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/create_lab_expert.py +0 -0
  408. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/create_tool_headless_web_browser.py +0 -0
  409. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/create_web_designer.py +0 -0
  410. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/create_web_reader.py +0 -0
  411. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example.py +0 -0
  412. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/file_summarizer_example_2.py +0 -0
  413. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/update_cli_expert.py +0 -0
  414. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/update_lab_expert.py +0 -0
  415. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/update_web_designer.py +0 -0
  416. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/update_web_reader.py +0 -0
  417. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/lab/use_cases/update_web_reader_with_tool.py +0 -0
  418. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/migrate/__init__.py +0 -0
  419. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/__init__.py +0 -0
  420. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/create_project.py +0 -0
  421. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/delete_project.py +0 -0
  422. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/export_request_data.py +0 -0
  423. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/get_project_data.py +0 -0
  424. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/get_project_list.py +0 -0
  425. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/get_project_tokens.py +0 -0
  426. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/organization/update_project.py +0 -0
  427. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/rerank/__init__.py +0 -0
  428. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/rerank/rerank_chunks.py +0 -0
  429. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/secrets/__init__.py +0 -0
  430. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/__init__.py +0 -0
  431. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/delete_usage_limit.py +0 -0
  432. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/get_all_usage_limit_from_organization.py +0 -0
  433. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_organization.py +0 -0
  434. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/get_usage_limit_from_project.py +0 -0
  435. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/set_usage_limit_organization.py +0 -0
  436. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/set_usage_limit_project.py +0 -0
  437. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/update_usage_limit_organization.py +0 -0
  438. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/tests/snippets/usage_limit/update_usage_limit_project.py +0 -0
  439. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/__init__.py +0 -0
  440. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/auth/__init__.py +0 -0
  441. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/auth/user.py +0 -0
  442. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/client/__init__.py +0 -0
  443. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/client/client.py +0 -0
  444. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/client/errors.py +0 -0
  445. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/client/helpers.py +0 -0
  446. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/py.typed +0 -0
  447. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/__init__.py +0 -0
  448. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/agent_execution/__init__.py +0 -0
  449. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/agent_execution/agent_executor.py +0 -0
  450. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/agent_execution/context.py +0 -0
  451. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/agent_execution/request_context_builder.py +0 -0
  452. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/agent_execution/simple_request_context_builder.py +0 -0
  453. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/apps/__init__.py +0 -0
  454. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/apps/jsonrpc/__init__.py +0 -0
  455. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/apps/jsonrpc/fastapi_app.py +0 -0
  456. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/apps/jsonrpc/jsonrpc_app.py +0 -0
  457. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/apps/jsonrpc/starlette_app.py +0 -0
  458. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/context.py +0 -0
  459. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/events/__init__.py +0 -0
  460. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/events/event_consumer.py +0 -0
  461. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/events/event_queue.py +0 -0
  462. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/events/in_memory_queue_manager.py +0 -0
  463. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/events/queue_manager.py +0 -0
  464. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/request_handlers/__init__.py +0 -0
  465. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/request_handlers/default_request_handler.py +0 -0
  466. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/request_handlers/jsonrpc_handler.py +0 -0
  467. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/request_handlers/request_handler.py +0 -0
  468. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/request_handlers/response_helpers.py +0 -0
  469. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/__init__.py +0 -0
  470. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/inmemory_push_notifier.py +0 -0
  471. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/inmemory_task_store.py +0 -0
  472. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/push_notifier.py +0 -0
  473. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/result_aggregator.py +0 -0
  474. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/task_manager.py +0 -0
  475. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/task_store.py +0 -0
  476. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/server/tasks/task_updater.py +0 -0
  477. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/types.py +0 -0
  478. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/__init__.py +0 -0
  479. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/artifact.py +0 -0
  480. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/errors.py +0 -0
  481. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/helpers.py +0 -0
  482. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/message.py +0 -0
  483. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/task.py +0 -0
  484. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai/vendor/a2a/utils/telemetry.py +0 -0
  485. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai.egg-info/SOURCES.txt +0 -0
  486. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai.egg-info/dependency_links.txt +0 -0
  487. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai.egg-info/entry_points.txt +0 -0
  488. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai.egg-info/requires.txt +0 -0
  489. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/pygeai.egg-info/top_level.txt +0 -0
  490. {pygeai-0.2.7b39 → pygeai-0.2.7b40}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.2.7b39
3
+ Version: 0.2.7b40
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
@@ -1,5 +1,3 @@
1
- import sys
2
-
3
1
  from pygeai.cli.commands import Option
4
2
  from pygeai.core.common.config import get_settings
5
3
  from pygeai.core.utils.console import Console
@@ -34,7 +32,7 @@ def configure(option_list: list[str, str] = None):
34
32
  for option_flag, option_arg in option_list:
35
33
  if option_flag.name == "list":
36
34
  list_alias = True
37
- if option_flag.name == "alias":
35
+ if option_flag.name == "profile_alias":
38
36
  alias = option_arg
39
37
  if option_flag.name == "api_key":
40
38
  api_key = option_arg
@@ -98,8 +96,8 @@ configuration_options = (
98
96
  True
99
97
  ),
100
98
  Option(
101
- "alias",
102
- ["--alias", "-a"],
99
+ "profile_alias",
100
+ ["--profile-alias", "--pa"],
103
101
  "Set alias for settings section",
104
102
  True
105
103
  ),
@@ -6,7 +6,16 @@ class ErrorHandler:
6
6
  @classmethod
7
7
  def has_errors(cls, response):
8
8
  error_found = False
9
- if "errors" in response or "error" in response:
9
+ if (
10
+ "errors" in response or
11
+ "error" in response or
12
+ (
13
+ "message" in response and
14
+ isinstance(response.get("message"), list) and
15
+ len(response.get("message")) > 0 and
16
+ response.get("message")[0].get("type") == "error"
17
+ )
18
+ ):
10
19
  error_found = True
11
20
 
12
21
  return error_found
@@ -73,6 +73,7 @@ class AgentClient(BaseClient):
73
73
  description: str,
74
74
  agent_data_prompt: dict,
75
75
  agent_data_llm_config: dict,
76
+ agent_data_strategy_name: str,
76
77
  agent_data_models: list,
77
78
  agent_data_resource_pools: Optional[List[Dict]] = None,
78
79
  automatic_publish: bool = False
@@ -89,6 +90,7 @@ class AgentClient(BaseClient):
89
90
  :param description: str - Detailed description of the agent’s purpose (optional).
90
91
  :param agent_data_prompt: dict - Prompt configuration, including 'context', 'instructions', and optional 'examples' (e.g., {'context': str, 'instructions': str, 'examples': [{'inputData': str, 'output': str}]}).
91
92
  :param agent_data_llm_config: dict - LLM configuration (e.g., {'maxTokens': int, 'timeout': int, 'sampling': {'temperature': float}}).
93
+ :param agent_data_strategy_name: str - Strategy name to be used.
92
94
  :param agent_data_models: list - List of models the agent can use (e.g., [{'name': 'gpt-4o', 'llmConfig': dict}]).
93
95
  :param agent_data_resource_pools: Optional[List[Dict]] - Resource pools for tools and helper agents (e.g., [{'name': str, 'tools': [{'name': str, 'revision': int}], 'agents': [{'name': str, 'revision': int}]}]).
94
96
  :param automatic_publish: bool - Automatically publish the agent after creation (default: False).
@@ -107,17 +109,23 @@ class AgentClient(BaseClient):
107
109
  "jobDescription": job_description,
108
110
  "avatarImage": avatar_image,
109
111
  "description": description,
110
- "agentData": {
111
- "prompt": agent_data_prompt,
112
- "llmConfig": agent_data_llm_config,
113
- "models": agent_data_models
114
- }
115
112
  }
116
113
  }
117
-
114
+ if (
115
+ agent_data_prompt or agent_data_strategy_name or agent_data_prompt or agent_data_resource_pools or
116
+ agent_data_llm_config or agent_data_models
117
+ ):
118
+ data["agentDefinition"]["agentData"] = {}
118
119
  if agent_data_resource_pools is not None:
119
120
  data["agentDefinition"]["agentData"]["resourcePools"] = agent_data_resource_pools
120
-
121
+ if agent_data_prompt is not None:
122
+ data["agentDefinition"]["agentData"]["prompt"] = agent_data_prompt
123
+ if agent_data_llm_config is not None:
124
+ data["agentDefinition"]["agentData"]["llmConfig"] = agent_data_llm_config
125
+ if agent_data_strategy_name is not None:
126
+ data["agentDefinition"]["agentData"]["strategyName"] = agent_data_strategy_name
127
+ if agent_data_models is not None:
128
+ data["agentDefinition"]["agentData"]["models"] = agent_data_models
121
129
  logger.debug(f"Creating agent with data: {data}")
122
130
 
123
131
  endpoint = CREATE_AGENT_V2
@@ -300,13 +308,11 @@ class AgentClient(BaseClient):
300
308
  headers=headers,
301
309
  data={}
302
310
  )
303
- try:
304
- result = response.json()
305
- except JSONDecodeError as e:
306
- logger.error(f"Unable to delete agent {agent_id} from project {project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
311
+ if response.status_code != 204:
312
+ logger.error(f"Unable to delete agent {agent_id} from project {project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
307
313
  raise InvalidAPIResponseException(f"Unable to delete agent {agent_id} from project {project_id}: {response.text}")
308
-
309
- return result
314
+ else:
315
+ return {}
310
316
 
311
317
  def update_agent(
312
318
  self,
@@ -320,6 +326,7 @@ class AgentClient(BaseClient):
320
326
  description: str,
321
327
  agent_data_prompt: dict,
322
328
  agent_data_llm_config: dict,
329
+ agent_data_strategy_name: dict,
323
330
  agent_data_models: list,
324
331
  agent_data_resource_pools: Optional[List[Dict]] = None,
325
332
  automatic_publish: bool = False,
@@ -338,6 +345,7 @@ class AgentClient(BaseClient):
338
345
  :param description: str - Updated purpose description (optional).
339
346
  :param agent_data_prompt: dict - Updated prompt configuration (e.g., {'context': str, 'instructions': str, 'examples': [{'inputData': str, 'output': str}]}).
340
347
  :param agent_data_llm_config: dict - Updated LLM configuration (e.g., {'maxTokens': int, 'timeout': int, 'sampling': {'temperature': float}}).
348
+ :param agent_data_strategy_name: str - Updated StrategyName configuration.
341
349
  :param agent_data_models: list - Updated model list (e.g., [{'name': 'gpt-4o', 'llmConfig': dict}]).
342
350
  :param agent_data_resource_pools: Optional[List[Dict]] - Updated resource pools (e.g., [{'name': str, 'tools': [{'name': str, 'revision': int}], 'agents': [{'name': str, 'revision': int}]}]).
343
351
  :param automatic_publish: bool - Automatically publish the agent after updating (default: False).
@@ -357,15 +365,23 @@ class AgentClient(BaseClient):
357
365
  "jobDescription": job_description,
358
366
  "avatarImage": avatar_image,
359
367
  "description": description,
360
- "agentData": {
361
- "prompt": agent_data_prompt,
362
- "llmConfig": agent_data_llm_config,
363
- "models": agent_data_models
364
- }
365
368
  }
366
369
  }
370
+ if (
371
+ agent_data_prompt or agent_data_strategy_name or agent_data_prompt or agent_data_resource_pools or
372
+ agent_data_llm_config or agent_data_models
373
+ ):
374
+ data["agentDefinition"]["agentData"] = {}
367
375
  if agent_data_resource_pools is not None:
368
376
  data["agentDefinition"]["agentData"]["resourcePools"] = agent_data_resource_pools
377
+ if agent_data_prompt is not None:
378
+ data["agentDefinition"]["agentData"]["prompt"] = agent_data_prompt
379
+ if agent_data_llm_config is not None:
380
+ data["agentDefinition"]["agentData"]["llmConfig"] = agent_data_llm_config
381
+ if agent_data_strategy_name is not None:
382
+ data["agentDefinition"]["agentData"]["strategyName"] = agent_data_strategy_name
383
+ if agent_data_models is not None:
384
+ data["agentDefinition"]["agentData"]["models"] = agent_data_models
369
385
 
370
386
  logger.debug(f"Updating agent with ID {agent_id} with data: {data}")
371
387
 
@@ -392,4 +408,4 @@ class AgentClient(BaseClient):
392
408
  logger.error(f"Unable to update agent {agent_id} in project {project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
393
409
  raise InvalidAPIResponseException(f"Unable to update agent {agent_id} in project {project_id}: {response.text}")
394
410
 
395
- return result
411
+ return result
@@ -65,10 +65,12 @@ class AgentMapper:
65
65
  prompt_data = data.get("prompt")
66
66
  llm_config_data = data.get("llmConfig")
67
67
  models_list = data.get("models")
68
+ strategy_name = data.get("strategyName")
68
69
  resource_pool_list = data.get("resourcePools")
69
70
  return AgentData(
70
71
  prompt=cls._map_to_prompt(prompt_data) if prompt_data else None,
71
72
  llm_config=cls._map_to_llm_config(llm_config_data) if llm_config_data else None,
73
+ strategy_name=strategy_name,
72
74
  models=cls._map_to_model_list(models_list) if models_list else None,
73
75
  resource_pools=cls._map_to_resource_pool_list(resource_pool_list) if resource_pool_list else None
74
76
  )
@@ -101,6 +101,7 @@ class AILabManager:
101
101
  avatar_image=agent.avatar_image,
102
102
  description=agent.description,
103
103
  agent_data_prompt=agent.agent_data.prompt.to_dict() if agent.agent_data is not None else None,
104
+ agent_data_strategy_name=agent.agent_data.strategy_name if agent.agent_data is not None else None,
104
105
  agent_data_llm_config=agent.agent_data.llm_config.to_dict() if agent.agent_data is not None else None,
105
106
  agent_data_models=agent.agent_data.models.to_dict() if agent.agent_data is not None else None,
106
107
  agent_data_resource_pools=agent.agent_data.resource_pools.to_dict() if agent.agent_data and agent.agent_data.resource_pools else None,
@@ -149,6 +150,7 @@ class AILabManager:
149
150
  description=agent.description,
150
151
  agent_data_prompt=agent.agent_data.prompt.to_dict() if agent.agent_data is not None else None,
151
152
  agent_data_llm_config=agent.agent_data.llm_config.to_dict() if agent.agent_data is not None else None,
153
+ agent_data_strategy_name=agent.agent_data.strategy_name if agent.agent_data is not None else None,
152
154
  agent_data_models=agent.agent_data.models.to_dict() if agent.agent_data is not None else None,
153
155
  automatic_publish=automatic_publish,
154
156
  upsert=upsert
@@ -166,6 +166,14 @@ class Prompt(CustomBaseModel):
166
166
  context: Optional[str] = Field(None, alias="context", description="Background context for the agent")
167
167
  examples: Optional[List[PromptExample]] = Field(None, alias="examples")
168
168
 
169
+ @field_validator("instructions")
170
+ @classmethod
171
+ def validate_instructions(cls, value: str) -> str:
172
+ if not value.strip():
173
+ raise ValueError("instructions cannot be blank")
174
+
175
+ return value
176
+
169
177
  @field_validator("outputs", mode="before")
170
178
  @classmethod
171
179
  def normalize_outputs(cls, value):
@@ -380,11 +388,13 @@ class AgentData(CustomBaseModel):
380
388
 
381
389
  :param prompt: dict - Prompt instructions, inputs, outputs, and examples for the agent.
382
390
  :param llm_config: dict - Configuration parameters for the LLM (e.g., max tokens, timeout, temperature).
391
+ :param strategy_name: str - Strategy name used for the agent (e.g., Dynamic Prompting, Chain of Thought, Question Refinement, etc)
383
392
  :param models: ModelList - List of models available for the agent.
384
393
  :param resource_pools: Optional[List[ResourcePool]] - List of resource pools organizing tools and helper agents.
385
394
  """
386
395
  prompt: Prompt = Field(..., alias="prompt")
387
396
  llm_config: LlmConfig = Field(..., alias="llmConfig")
397
+ strategy_name: Optional[str] = Field("Dynamic Prompting", alias="strategyName")
388
398
  models: Optional[Union[ModelList, List[Model]]] = Field(None, alias="models")
389
399
  resource_pools: Optional[ResourcePoolList] = Field(None, alias="resourcePools", description="List of resource pools organizing tools and helper agents")
390
400
 
@@ -399,13 +399,12 @@ class AgenticProcessClient(BaseClient):
399
399
  endpoint=endpoint,
400
400
  headers=headers
401
401
  )
402
- try:
403
- result = response.json()
404
- except JSONDecodeError as e:
405
- logger.error(f"Unable to delete process {process_id or process_name} from project {project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
406
- raise InvalidAPIResponseException(f"Unable to delete process {process_id or process_name} from project {project_id}: {response.text}")
407
402
 
408
- return result
403
+ if response.status_code != 204:
404
+ logger.error(f"Unable to delete process {process_id or process_name} from project {project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
405
+ raise InvalidAPIResponseException(f"Unable to delete process {process_id or process_name} from project {project_id}: {response.text}")
406
+ else:
407
+ return {}
409
408
 
410
409
  def publish_process_revision(
411
410
  self,
@@ -699,11 +698,12 @@ class AgenticProcessClient(BaseClient):
699
698
  logger.debug(f"Deleting task with name {task_name}")
700
699
 
701
700
  response = self.api_service.delete(endpoint=endpoint, headers=headers)
702
- try:
703
- return response.json()
704
- except JSONDecodeError as e:
705
- logger.error(f"Unable to delete task {task_id or task_name} from project {project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
701
+
702
+ if response.status_code != 204:
703
+ logger.error(f"Unable to delete task {task_id or task_name} from project {project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
706
704
  raise InvalidAPIResponseException(f"Unable to delete task {task_id or task_name} from project {project_id}: {response.text}")
705
+ else:
706
+ return {}
707
707
 
708
708
  def publish_task_revision(
709
709
  self,
@@ -1121,11 +1121,12 @@ class AgenticProcessClient(BaseClient):
1121
1121
  logger.debug(f"Deleting KB with name {kb_name}")
1122
1122
 
1123
1123
  response = self.api_service.delete(endpoint=endpoint, headers=headers)
1124
- try:
1125
- return response.json()
1126
- except JSONDecodeError as e:
1127
- logger.error(f"Unable to delete knowledge base {kb_id or kb_name} from project {project_id}: JSONDecodeError parsing error (status {response.status_code}): {e}. Response: {response.text}")
1124
+
1125
+ if response.status_code != 204:
1126
+ logger.error(f"Unable to delete knowledge base {kb_id or kb_name} from project {project_id}: JSONDecodeError parsing error (status {response.status_code}). Response: {response.text}")
1128
1127
  raise InvalidAPIResponseException(f"Unable to delete knowledge base {kb_id or kb_name} from project {project_id}: {response.text}")
1128
+ else:
1129
+ return {}
1129
1130
 
1130
1131
  def list_jobs(
1131
1132
  self,
@@ -256,13 +256,11 @@ class ToolClient(BaseClient):
256
256
  headers=headers
257
257
  )
258
258
 
259
- try:
260
- result = response.json()
261
- except JSONDecodeError as e:
262
- logger.error(f"Unable to delete tool {tool_id or tool_name} from project {project_id}: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
259
+ if response.status_code != 204:
260
+ logger.error(f"Unable to delete tool {tool_id or tool_name} from project {project_id}: JSON parsing error (status {response.status_code}). Response: {response.text}")
263
261
  raise InvalidAPIResponseException(f"Unable to delete tool {tool_id or tool_name} from project {project_id}: {response.text}")
264
-
265
- return result
262
+ else:
263
+ return {}
266
264
 
267
265
  def update_tool(
268
266
  self,
@@ -13,7 +13,6 @@ class TestAILabCreateAgentIntegration(TestCase):
13
13
  Set up the test environment.
14
14
  """
15
15
  self.ai_lab_manager = AILabManager(alias="beta")
16
- self.project_id = "be4889df-cacc-4e6f-b3bb-153c4ac0d168"
17
16
  self.new_agent = self.__load_agent()
18
17
  self.created_agent: Agent = None
19
18
 
@@ -26,7 +25,7 @@ class TestAILabCreateAgentIntegration(TestCase):
26
25
  if isinstance(self.created_agent, Agent):
27
26
  #TODO: Remove exception catch when delete_agent stop returning an unexpected error
28
27
  with self.assertRaises(InvalidAPIResponseException) as e:
29
- self.ai_lab_manager.delete_agent(self.project_id, self.created_agent.id)
28
+ self.ai_lab_manager.delete_agent(self.created_agent.id)
30
29
 
31
30
 
32
31
  def __load_agent(self):
@@ -66,7 +65,6 @@ class TestAILabCreateAgentIntegration(TestCase):
66
65
  If automatic_publish is None, do not pass it (useful for tests that omit it).
67
66
  """
68
67
  return self.ai_lab_manager.create_agent(
69
- project_id=self.project_id,
70
68
  agent=self.new_agent if agent is None else agent,
71
69
  automatic_publish=automatic_publish
72
70
  )
@@ -24,23 +24,23 @@ def rollback():
24
24
  print("\n=== Initiating Rollback ===")
25
25
  if created_entities["instance_id"]:
26
26
  print(f"Deleting instance {created_entities['instance_id']}...")
27
- result = manager.abort_instance(project_id=project_id, instance_id=created_entities["instance_id"])
27
+ result = manager.abort_instance(instance_id=created_entities["instance_id"])
28
28
  print(f"Rollback: {result}")
29
29
  if created_entities["process_id"]:
30
30
  print(f"Deleting process {created_entities['process_id']}...")
31
- result = manager.delete_process(project_id=project_id, process_id=created_entities["process_id"])
31
+ result = manager.delete_process(process_id=created_entities["process_id"])
32
32
  print(f"Rollback: {result}")
33
33
  if created_entities["task_id"]:
34
34
  print(f"Deleting task {created_entities['task_id']}...")
35
- result = manager.delete_task(project_id=project_id, task_id=created_entities["task_id"])
35
+ result = manager.delete_task(task_id=created_entities["task_id"])
36
36
  print(f"Rollback: {result}")
37
37
  if created_entities["tool_id"]:
38
38
  print(f"Deleting tool {created_entities['tool_id']}...")
39
- result = manager.delete_tool(project_id=project_id, tool_id=created_entities["tool_id"])
39
+ result = manager.delete_tool(tool_id=created_entities["tool_id"])
40
40
  print(f"Rollback: {result}")
41
41
  if created_entities["agent_id"]:
42
42
  print(f"Deleting agent {created_entities['agent_id']}...")
43
- result = manager.delete_agent(project_id=project_id, agent_id=created_entities["agent_id"])
43
+ result = manager.delete_agent(agent_id=created_entities["agent_id"])
44
44
  print(f"Rollback: {result}")
45
45
  print("Rollback complete.")
46
46
 
@@ -67,13 +67,14 @@ def main():
67
67
  timeout=30,
68
68
  sampling=Sampling(temperature=0.7, top_k=40, top_p=0.9)
69
69
  ),
70
+ strategy_name="Dynamic Prompting",
70
71
  models=ModelList(models=[
71
72
  Model(name="gpt-4"),
72
73
  Model(name="gpt-3.5-turbo")
73
74
  ])
74
75
  )
75
76
  )
76
- create_agent_result = manager.create_agent(project_id=project_id, agent=agent, automatic_publish=False)
77
+ create_agent_result = manager.create_agent(agent=agent, automatic_publish=False)
77
78
  if isinstance(create_agent_result, Agent):
78
79
  print(f"Success: Created Agent: {create_agent_result.name}, ID: {create_agent_result.id}")
79
80
  created_entities["agent_id"] = create_agent_result.id
@@ -84,7 +85,7 @@ def main():
84
85
 
85
86
  print("Updating agent description...")
86
87
  agent.description = "Updated agent for testing workflows with enhanced capabilities"
87
- update_agent_result = manager.update_agent(project_id=project_id, agent=agent, automatic_publish=False)
88
+ update_agent_result = manager.update_agent(agent=agent, automatic_publish=False)
88
89
  if isinstance(update_agent_result, Agent):
89
90
  print(f"Success: Updated Agent: {update_agent_result.description}")
90
91
  else:
@@ -93,7 +94,7 @@ def main():
93
94
  exit()
94
95
 
95
96
  print("Publishing agent revision '1'...")
96
- publish_agent_result = manager.publish_agent_revision(project_id=project_id, agent_id=created_entities["agent_id"], revision="1")
97
+ publish_agent_result = manager.publish_agent_revision(agent_id=created_entities["agent_id"], revision="1")
97
98
  if isinstance(publish_agent_result, Agent):
98
99
  print(f"Success: Published Agent Revision: {publish_agent_result.name}")
99
100
  else:
@@ -102,7 +103,7 @@ def main():
102
103
  exit()
103
104
 
104
105
  print("Retrieving latest agent version...")
105
- latest_agent = manager.get_agent(project_id=project_id, agent_id=created_entities["agent_id"])
106
+ latest_agent = manager.get_agent(agent_id=created_entities["agent_id"])
106
107
  if isinstance(latest_agent, Agent):
107
108
  print(f"Success: Latest Agent: {latest_agent.name}, Description: {latest_agent.description}")
108
109
  else:
@@ -121,7 +122,7 @@ def main():
121
122
  ToolParameter(key="max_length", data_type="Integer", description="Maximum length of output", is_required=False, value="100")
122
123
  ]
123
124
  )
124
- create_tool_result = manager.create_tool(project_id=project_id, tool=tool, automatic_publish=False)
125
+ create_tool_result = manager.create_tool(tool=tool, automatic_publish=False)
125
126
  if isinstance(create_tool_result, Tool):
126
127
  print(f"Success: Created Tool: {create_tool_result.name}, ID: {create_tool_result.id}")
127
128
  created_entities["tool_id"] = create_tool_result.id
@@ -132,7 +133,7 @@ def main():
132
133
 
133
134
  print("Updating tool description...")
134
135
  tool.description = "Updated tool for enhanced text processing"
135
- update_tool_result = manager.update_tool(project_id=project_id, tool=tool, automatic_publish=False)
136
+ update_tool_result = manager.update_tool(tool=tool, automatic_publish=False)
136
137
  if isinstance(update_tool_result, Tool):
137
138
  print(f"Success: Updated Tool: {update_tool_result.description}")
138
139
  else:
@@ -141,7 +142,7 @@ def main():
141
142
  exit()
142
143
 
143
144
  print("Publishing tool revision '1'...")
144
- publish_tool_result = manager.publish_tool_revision(project_id=project_id, tool_id=created_entities["tool_id"], revision="1")
145
+ publish_tool_result = manager.publish_tool_revision(tool_id=created_entities["tool_id"], revision="1")
145
146
  if isinstance(publish_tool_result, Tool):
146
147
  print(f"Success: Published Tool Revision: {publish_tool_result.name}")
147
148
  else:
@@ -150,7 +151,7 @@ def main():
150
151
  exit()
151
152
 
152
153
  print("Retrieving latest tool version...")
153
- latest_tool = manager.get_tool(project_id=project_id, tool_id=created_entities["tool_id"])
154
+ latest_tool = manager.get_tool(tool_id=created_entities["tool_id"])
154
155
  if isinstance(latest_tool, Tool):
155
156
  print(f"Success: Latest Tool: {latest_tool.name}, Description: {latest_tool.description}")
156
157
  else:
@@ -166,7 +167,7 @@ def main():
166
167
  description="Processes text data using an agent",
167
168
  title_template="Text Processing Task #{{id}}"
168
169
  )
169
- create_task_result = manager.create_task(project_id=project_id, task=task, automatic_publish=False)
170
+ create_task_result = manager.create_task(task=task, automatic_publish=False)
170
171
  if isinstance(create_task_result, Task):
171
172
  print(f"Success: Created Task: {create_task_result.name}, ID: {create_task_result.id}")
172
173
  created_entities["task_id"] = create_task_result.id
@@ -180,7 +181,7 @@ def main():
180
181
 
181
182
  print("Updating task description...")
182
183
  task.description = "Updated task for text processing with agent collaboration"
183
- update_task_result = manager.update_task(project_id=project_id, task=task, automatic_publish=False)
184
+ update_task_result = manager.update_task(task=task, automatic_publish=False)
184
185
  if isinstance(update_task_result, Task):
185
186
  print(f"Success: Updated Task: {update_task_result.description}")
186
187
  else:
@@ -189,7 +190,7 @@ def main():
189
190
  exit()
190
191
 
191
192
  print("Publishing task revision '1'...")
192
- publish_task_result = manager.publish_task_revision(project_id=project_id, task_id=created_entities["task_id"], revision="1")
193
+ publish_task_result = manager.publish_task_revision(task_id=created_entities["task_id"], revision="1")
193
194
  if isinstance(publish_task_result, Task):
194
195
  print(f"Success: Published Task Revision: {publish_task_result.name}")
195
196
  else:
@@ -198,7 +199,7 @@ def main():
198
199
  exit()
199
200
 
200
201
  print("Retrieving latest task version...")
201
- latest_task = manager.get_task(project_id=project_id, task_id=created_entities["task_id"])
202
+ latest_task = manager.get_task(task_id=created_entities["task_id"])
202
203
  if isinstance(latest_task, Task):
203
204
  print(f"Success: Latest Task: {latest_task.name}, Description: {latest_task.description}")
204
205
  else:
@@ -238,7 +239,7 @@ def main():
238
239
  SequenceFlow(key="flow4", source_key="analysis_complete", target_key="end")
239
240
  ]
240
241
  )
241
- create_process_result = manager.create_process(project_id=project_id, process=process, automatic_publish=False)
242
+ create_process_result = manager.create_process(process=process, automatic_publish=False)
242
243
  if isinstance(create_process_result, AgenticProcess):
243
244
  print(f"Success: Created Process: {create_process_result.name}, ID: {create_process_result.id}")
244
245
  created_entities["process_id"] = create_process_result.id
@@ -249,7 +250,7 @@ def main():
249
250
 
250
251
  print("Updating process description...")
251
252
  process.description = "Updated process for advanced text analysis"
252
- update_process_result = manager.update_process(project_id=project_id, process=process, automatic_publish=False)
253
+ update_process_result = manager.update_process(process=process, automatic_publish=False)
253
254
  if isinstance(update_process_result, AgenticProcess):
254
255
  print(f"Success: Updated Process: {update_process_result.description}")
255
256
  else:
@@ -258,7 +259,7 @@ def main():
258
259
  exit()
259
260
 
260
261
  print("Publishing process revision '1'...")
261
- publish_process_result = manager.publish_process_revision(project_id=project_id, process_id=created_entities["process_id"], revision="1")
262
+ publish_process_result = manager.publish_process_revision(process_id=created_entities["process_id"], revision="1")
262
263
  if isinstance(publish_process_result, AgenticProcess):
263
264
  print(f"Success: Published Process Revision: {publish_process_result.name}")
264
265
  else:
@@ -267,7 +268,7 @@ def main():
267
268
  exit()
268
269
 
269
270
  print("Retrieving latest process version...")
270
- latest_process = manager.get_process(project_id=project_id, process_id=created_entities["process_id"])
271
+ latest_process = manager.get_process(process_id=created_entities["process_id"])
271
272
  if isinstance(latest_process, AgenticProcess):
272
273
  print(f"Success: Latest Process: {latest_process.name}, Description: {latest_process.description}")
273
274
  else:
@@ -296,7 +297,7 @@ def main():
296
297
  exit()
297
298
 
298
299
  print("Retrieving instance information...")
299
- instance_info = manager.get_instance(project_id=project_id, instance_id=created_entities["instance_id"])
300
+ instance_info = manager.get_instance(instance_id=created_entities["instance_id"])
300
301
  if isinstance(instance_info, ProcessInstance):
301
302
  print(f"Success: Instance Info: Process: {instance_info.process.name}, Subject: {instance_info.subject}")
302
303
  else:
@@ -305,7 +306,7 @@ def main():
305
306
  exit()
306
307
 
307
308
  print("Retrieving instance history...")
308
- history = manager.get_instance_history(project_id=project_id, instance_id=created_entities["instance_id"])
309
+ history = manager.get_instance_history(instance_id=created_entities["instance_id"])
309
310
  if isinstance(history, dict):
310
311
  print(f"Success: Instance History: {history}")
311
312
  else:
@@ -320,5 +321,6 @@ if __name__ == "__main__":
320
321
  try:
321
322
  main()
322
323
  except Exception as e:
324
+ breakpoint()
323
325
  rollback()
324
326
  print(f"\n# Critical error: {e}")
@@ -3,9 +3,9 @@ from pygeai.lab.models import Agent, AgentData, Prompt, LlmConfig, Model, Sampli
3
3
 
4
4
  agent = Agent(
5
5
  status="active",
6
- name="Public Translator V24",
7
- access_scope="public",
8
- public_name="com.genexus.geai.public_translator_24",
6
+ name="Private Translator V6",
7
+ access_scope="private",
8
+ # public_name="com.genexus.geai.public_translator_24",
9
9
  job_description="Translates",
10
10
  avatar_image="https://www.shareicon.net/data/128x128/2016/11/09/851442_logo_512x512.png",
11
11
  description="Agent that translates from any language to english.",
@@ -26,6 +26,7 @@ agent = Agent(
26
26
  PromptExample(input_data="esto es una prueba pincheguey [keep-slang]", output='{"translated_text":"this is a test pal","summary":"prueba"}')
27
27
  ]
28
28
  ),
29
+ strategy_name="Dynamic Prompting",
29
30
  llm_config=LlmConfig(
30
31
  max_tokens=5000,
31
32
  timeout=0,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.2.7b39
3
+ Version: 0.2.7b40
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pygeai"
7
- version = "0.2.7b39"
7
+ version = "0.2.7b40"
8
8
  description = "Software Development Kit to interact with Globant Enterprise AI."
9
9
  license = "MIT"
10
10
  requires-python = ">=3.10"
File without changes
File without changes
File without changes
File without changes
File without changes