pygeai 0.6.0b6__py3-none-any.whl → 0.6.0b10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. pygeai/_docs/source/conf.py +78 -6
  2. pygeai/_docs/source/content/api_reference/admin.rst +161 -0
  3. pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
  4. pygeai/_docs/source/content/api_reference/auth.rst +379 -0
  5. pygeai/_docs/source/content/api_reference/embeddings.rst +31 -1
  6. pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
  7. pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
  8. pygeai/_docs/source/content/api_reference/files.rst +592 -0
  9. pygeai/_docs/source/content/api_reference/gam.rst +401 -0
  10. pygeai/_docs/source/content/api_reference/health.rst +58 -0
  11. pygeai/_docs/source/content/api_reference/project.rst +20 -18
  12. pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
  13. pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
  14. pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
  15. pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
  16. pygeai/_docs/source/content/api_reference.rst +13 -1
  17. pygeai/_docs/source/content/debugger.rst +376 -83
  18. pygeai/_docs/source/content/migration.rst +528 -0
  19. pygeai/_docs/source/content/modules.rst +1 -1
  20. pygeai/_docs/source/index.rst +59 -7
  21. pygeai/_docs/source/pygeai.auth.rst +29 -0
  22. pygeai/_docs/source/pygeai.cli.commands.rst +16 -0
  23. pygeai/_docs/source/pygeai.cli.rst +8 -0
  24. pygeai/_docs/source/pygeai.core.utils.rst +16 -0
  25. pygeai/_docs/source/pygeai.rst +1 -0
  26. pygeai/_docs/source/pygeai.tests.auth.rst +21 -0
  27. pygeai/_docs/source/pygeai.tests.cli.commands.rst +16 -0
  28. pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
  29. pygeai/_docs/source/pygeai.tests.core.base.rst +8 -0
  30. pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
  31. pygeai/_docs/source/pygeai.tests.core.files.rst +8 -0
  32. pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
  33. pygeai/_docs/source/pygeai.tests.core.rst +1 -0
  34. pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
  35. pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
  36. pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
  37. pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
  38. pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +8 -0
  39. pygeai/_docs/source/pygeai.tests.organization.rst +8 -0
  40. pygeai/_docs/source/pygeai.tests.rst +2 -0
  41. pygeai/_docs/source/pygeai.tests.snippets.auth.rst +10 -0
  42. pygeai/_docs/source/pygeai.tests.snippets.chat.rst +40 -0
  43. pygeai/_docs/source/pygeai.tests.snippets.dbg.rst +45 -0
  44. pygeai/_docs/source/pygeai.tests.snippets.embeddings.rst +40 -0
  45. pygeai/_docs/source/pygeai.tests.snippets.evaluation.dataset.rst +197 -0
  46. pygeai/_docs/source/pygeai.tests.snippets.evaluation.plan.rst +133 -0
  47. pygeai/_docs/source/pygeai.tests.snippets.evaluation.result.rst +37 -0
  48. pygeai/_docs/source/pygeai.tests.snippets.evaluation.rst +10 -0
  49. pygeai/_docs/source/pygeai.tests.snippets.organization.rst +40 -0
  50. pygeai/_docs/source/pygeai.tests.snippets.rst +2 -0
  51. pygeai/admin/clients.py +12 -32
  52. pygeai/assistant/clients.py +16 -44
  53. pygeai/assistant/data/clients.py +1 -0
  54. pygeai/assistant/data_analyst/clients.py +6 -13
  55. pygeai/assistant/rag/clients.py +24 -67
  56. pygeai/auth/clients.py +88 -14
  57. pygeai/auth/endpoints.py +4 -0
  58. pygeai/chat/clients.py +192 -25
  59. pygeai/chat/endpoints.py +2 -1
  60. pygeai/cli/commands/auth.py +178 -2
  61. pygeai/cli/commands/chat.py +227 -1
  62. pygeai/cli/commands/embeddings.py +56 -8
  63. pygeai/cli/commands/lab/ai_lab.py +0 -2
  64. pygeai/cli/commands/migrate.py +994 -434
  65. pygeai/cli/commands/organization.py +241 -0
  66. pygeai/cli/error_handler.py +116 -0
  67. pygeai/cli/geai.py +28 -10
  68. pygeai/cli/parsers.py +8 -2
  69. pygeai/core/base/clients.py +4 -1
  70. pygeai/core/common/exceptions.py +11 -10
  71. pygeai/core/embeddings/__init__.py +19 -0
  72. pygeai/core/embeddings/clients.py +20 -9
  73. pygeai/core/embeddings/mappers.py +16 -2
  74. pygeai/core/embeddings/responses.py +9 -2
  75. pygeai/core/feedback/clients.py +4 -8
  76. pygeai/core/files/clients.py +10 -25
  77. pygeai/core/files/managers.py +42 -0
  78. pygeai/core/llm/clients.py +11 -26
  79. pygeai/core/models.py +107 -0
  80. pygeai/core/plugins/clients.py +4 -7
  81. pygeai/core/rerank/clients.py +4 -8
  82. pygeai/core/secrets/clients.py +14 -37
  83. pygeai/core/services/rest.py +1 -1
  84. pygeai/core/utils/parsers.py +32 -0
  85. pygeai/core/utils/validators.py +10 -0
  86. pygeai/dbg/__init__.py +3 -0
  87. pygeai/dbg/debugger.py +565 -70
  88. pygeai/evaluation/clients.py +2 -1
  89. pygeai/evaluation/dataset/clients.py +46 -44
  90. pygeai/evaluation/plan/clients.py +28 -26
  91. pygeai/evaluation/result/clients.py +38 -5
  92. pygeai/gam/clients.py +10 -25
  93. pygeai/health/clients.py +4 -7
  94. pygeai/lab/agents/clients.py +21 -54
  95. pygeai/lab/agents/endpoints.py +2 -0
  96. pygeai/lab/clients.py +1 -0
  97. pygeai/lab/models.py +3 -3
  98. pygeai/lab/processes/clients.py +45 -127
  99. pygeai/lab/strategies/clients.py +11 -25
  100. pygeai/lab/tools/clients.py +23 -67
  101. pygeai/lab/tools/endpoints.py +3 -0
  102. pygeai/migration/__init__.py +31 -0
  103. pygeai/migration/strategies.py +404 -155
  104. pygeai/migration/tools.py +170 -3
  105. pygeai/organization/clients.py +135 -51
  106. pygeai/organization/endpoints.py +6 -1
  107. pygeai/organization/limits/clients.py +32 -91
  108. pygeai/organization/managers.py +157 -1
  109. pygeai/organization/mappers.py +76 -2
  110. pygeai/organization/responses.py +25 -1
  111. pygeai/proxy/clients.py +4 -1
  112. pygeai/tests/admin/test_clients.py +16 -11
  113. pygeai/tests/assistants/rag/test_clients.py +35 -23
  114. pygeai/tests/assistants/test_clients.py +22 -15
  115. pygeai/tests/auth/test_clients.py +191 -7
  116. pygeai/tests/chat/test_clients.py +211 -1
  117. pygeai/tests/cli/commands/test_embeddings.py +32 -9
  118. pygeai/tests/cli/commands/test_evaluation.py +7 -0
  119. pygeai/tests/cli/commands/test_migrate.py +112 -243
  120. pygeai/tests/cli/test_error_handler.py +225 -0
  121. pygeai/tests/cli/test_geai_driver.py +154 -0
  122. pygeai/tests/cli/test_parsers.py +5 -5
  123. pygeai/tests/core/embeddings/test_clients.py +144 -0
  124. pygeai/tests/core/embeddings/test_managers.py +171 -0
  125. pygeai/tests/core/embeddings/test_mappers.py +142 -0
  126. pygeai/tests/core/feedback/test_clients.py +2 -0
  127. pygeai/tests/core/files/test_clients.py +1 -0
  128. pygeai/tests/core/llm/test_clients.py +14 -9
  129. pygeai/tests/core/plugins/test_clients.py +5 -3
  130. pygeai/tests/core/rerank/test_clients.py +1 -0
  131. pygeai/tests/core/secrets/test_clients.py +19 -13
  132. pygeai/tests/dbg/test_debugger.py +453 -75
  133. pygeai/tests/evaluation/dataset/test_clients.py +3 -1
  134. pygeai/tests/evaluation/plan/test_clients.py +4 -2
  135. pygeai/tests/evaluation/result/test_clients.py +7 -5
  136. pygeai/tests/gam/test_clients.py +1 -1
  137. pygeai/tests/health/test_clients.py +1 -0
  138. pygeai/tests/lab/agents/test_clients.py +9 -0
  139. pygeai/tests/lab/processes/test_clients.py +36 -0
  140. pygeai/tests/lab/processes/test_mappers.py +3 -0
  141. pygeai/tests/lab/strategies/test_clients.py +14 -9
  142. pygeai/tests/migration/test_strategies.py +45 -218
  143. pygeai/tests/migration/test_tools.py +133 -9
  144. pygeai/tests/organization/limits/test_clients.py +17 -0
  145. pygeai/tests/organization/test_clients.py +206 -1
  146. pygeai/tests/organization/test_managers.py +122 -1
  147. pygeai/tests/proxy/test_clients.py +2 -0
  148. pygeai/tests/proxy/test_integration.py +1 -0
  149. pygeai/tests/snippets/auth/__init__.py +0 -0
  150. pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
  151. pygeai/tests/snippets/chat/get_response.py +15 -0
  152. pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
  153. pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
  154. pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
  155. pygeai/tests/snippets/dbg/__init__.py +0 -0
  156. pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
  157. pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
  158. pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
  159. pygeai/tests/snippets/dbg/stepping_example.py +40 -0
  160. pygeai/tests/snippets/embeddings/cache_example.py +31 -0
  161. pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
  162. pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
  163. pygeai/tests/snippets/embeddings/openai_example.py +30 -0
  164. pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
  165. pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
  166. pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
  167. pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
  168. pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
  169. pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
  170. pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
  171. pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
  172. pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
  173. pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
  174. pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
  175. pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
  176. pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
  177. pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
  178. pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
  179. pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
  180. pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
  181. pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
  182. pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
  183. pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
  184. pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
  185. pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
  186. pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
  187. pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
  188. pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
  189. pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
  190. pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
  191. pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
  192. pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
  193. pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
  194. pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
  195. pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
  196. pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
  197. pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
  198. pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
  199. pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
  200. pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
  201. pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
  202. pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
  203. pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
  204. pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
  205. pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
  206. pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
  207. pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
  208. pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
  209. pygeai/tests/snippets/migrate/__init__.py +45 -0
  210. pygeai/tests/snippets/migrate/agent_migration.py +110 -0
  211. pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
  212. pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
  213. pygeai/tests/snippets/migrate/process_migration.py +64 -0
  214. pygeai/tests/snippets/migrate/project_migration.py +42 -0
  215. pygeai/tests/snippets/migrate/tool_migration.py +64 -0
  216. pygeai/tests/snippets/organization/create_project.py +2 -2
  217. pygeai/tests/snippets/organization/get_memberships.py +12 -0
  218. pygeai/tests/snippets/organization/get_organization_members.py +6 -0
  219. pygeai/tests/snippets/organization/get_project_members.py +6 -0
  220. pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
  221. pygeai/tests/snippets/organization/get_project_roles.py +6 -0
  222. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/METADATA +1 -1
  223. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/RECORD +227 -124
  224. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/WHEEL +0 -0
  225. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/entry_points.txt +0 -0
  226. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/licenses/LICENSE +0 -0
  227. {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,133 @@
1
+ pygeai.tests.snippets.evaluation.plan package
2
+ =============================================
3
+
4
+ Submodules
5
+ ----------
6
+
7
+ pygeai.tests.snippets.evaluation.plan.add\_plan\_system\_metric module
8
+ ----------------------------------------------------------------------
9
+
10
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.add_plan_system_metric
11
+ :members:
12
+ :show-inheritance:
13
+ :undoc-members:
14
+
15
+ pygeai.tests.snippets.evaluation.plan.complete\_workflow\_example module
16
+ ------------------------------------------------------------------------
17
+
18
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.complete_workflow_example
19
+ :members:
20
+ :show-inheritance:
21
+ :undoc-members:
22
+
23
+ pygeai.tests.snippets.evaluation.plan.create\_evaluation\_plan module
24
+ ---------------------------------------------------------------------
25
+
26
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.create_evaluation_plan
27
+ :members:
28
+ :show-inheritance:
29
+ :undoc-members:
30
+
31
+ pygeai.tests.snippets.evaluation.plan.create\_rag\_evaluation\_plan module
32
+ --------------------------------------------------------------------------
33
+
34
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.create_rag_evaluation_plan
35
+ :members:
36
+ :show-inheritance:
37
+ :undoc-members:
38
+
39
+ pygeai.tests.snippets.evaluation.plan.delete\_evaluation\_plan module
40
+ ---------------------------------------------------------------------
41
+
42
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.delete_evaluation_plan
43
+ :members:
44
+ :show-inheritance:
45
+ :undoc-members:
46
+
47
+ pygeai.tests.snippets.evaluation.plan.delete\_plan\_system\_metric module
48
+ -------------------------------------------------------------------------
49
+
50
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.delete_plan_system_metric
51
+ :members:
52
+ :show-inheritance:
53
+ :undoc-members:
54
+
55
+ pygeai.tests.snippets.evaluation.plan.execute\_evaluation\_plan module
56
+ ----------------------------------------------------------------------
57
+
58
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.execute_evaluation_plan
59
+ :members:
60
+ :show-inheritance:
61
+ :undoc-members:
62
+
63
+ pygeai.tests.snippets.evaluation.plan.get\_evaluation\_plan module
64
+ ------------------------------------------------------------------
65
+
66
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.get_evaluation_plan
67
+ :members:
68
+ :show-inheritance:
69
+ :undoc-members:
70
+
71
+ pygeai.tests.snippets.evaluation.plan.get\_plan\_system\_metric module
72
+ ----------------------------------------------------------------------
73
+
74
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.get_plan_system_metric
75
+ :members:
76
+ :show-inheritance:
77
+ :undoc-members:
78
+
79
+ pygeai.tests.snippets.evaluation.plan.get\_system\_metric module
80
+ ----------------------------------------------------------------
81
+
82
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.get_system_metric
83
+ :members:
84
+ :show-inheritance:
85
+ :undoc-members:
86
+
87
+ pygeai.tests.snippets.evaluation.plan.list\_evaluation\_plans module
88
+ --------------------------------------------------------------------
89
+
90
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.list_evaluation_plans
91
+ :members:
92
+ :show-inheritance:
93
+ :undoc-members:
94
+
95
+ pygeai.tests.snippets.evaluation.plan.list\_plan\_system\_metrics module
96
+ ------------------------------------------------------------------------
97
+
98
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.list_plan_system_metrics
99
+ :members:
100
+ :show-inheritance:
101
+ :undoc-members:
102
+
103
+ pygeai.tests.snippets.evaluation.plan.list\_system\_metrics module
104
+ ------------------------------------------------------------------
105
+
106
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.list_system_metrics
107
+ :members:
108
+ :show-inheritance:
109
+ :undoc-members:
110
+
111
+ pygeai.tests.snippets.evaluation.plan.update\_evaluation\_plan module
112
+ ---------------------------------------------------------------------
113
+
114
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.update_evaluation_plan
115
+ :members:
116
+ :show-inheritance:
117
+ :undoc-members:
118
+
119
+ pygeai.tests.snippets.evaluation.plan.update\_plan\_system\_metric module
120
+ -------------------------------------------------------------------------
121
+
122
+ .. automodule:: pygeai.tests.snippets.evaluation.plan.update_plan_system_metric
123
+ :members:
124
+ :show-inheritance:
125
+ :undoc-members:
126
+
127
+ Module contents
128
+ ---------------
129
+
130
+ .. automodule:: pygeai.tests.snippets.evaluation.plan
131
+ :members:
132
+ :show-inheritance:
133
+ :undoc-members:
@@ -0,0 +1,37 @@
1
+ pygeai.tests.snippets.evaluation.result package
2
+ ===============================================
3
+
4
+ Submodules
5
+ ----------
6
+
7
+ pygeai.tests.snippets.evaluation.result.complete\_workflow\_example module
8
+ --------------------------------------------------------------------------
9
+
10
+ .. automodule:: pygeai.tests.snippets.evaluation.result.complete_workflow_example
11
+ :members:
12
+ :show-inheritance:
13
+ :undoc-members:
14
+
15
+ pygeai.tests.snippets.evaluation.result.get\_evaluation\_result module
16
+ ----------------------------------------------------------------------
17
+
18
+ .. automodule:: pygeai.tests.snippets.evaluation.result.get_evaluation_result
19
+ :members:
20
+ :show-inheritance:
21
+ :undoc-members:
22
+
23
+ pygeai.tests.snippets.evaluation.result.list\_evaluation\_results module
24
+ ------------------------------------------------------------------------
25
+
26
+ .. automodule:: pygeai.tests.snippets.evaluation.result.list_evaluation_results
27
+ :members:
28
+ :show-inheritance:
29
+ :undoc-members:
30
+
31
+ Module contents
32
+ ---------------
33
+
34
+ .. automodule:: pygeai.tests.snippets.evaluation.result
35
+ :members:
36
+ :show-inheritance:
37
+ :undoc-members:
@@ -1,6 +1,16 @@
1
1
  pygeai.tests.snippets.evaluation package
2
2
  ========================================
3
3
 
4
+ Subpackages
5
+ -----------
6
+
7
+ .. toctree::
8
+ :maxdepth: 4
9
+
10
+ pygeai.tests.snippets.evaluation.dataset
11
+ pygeai.tests.snippets.evaluation.plan
12
+ pygeai.tests.snippets.evaluation.result
13
+
4
14
  Module contents
5
15
  ---------------
6
16
 
@@ -28,6 +28,22 @@ pygeai.tests.snippets.organization.export\_request\_data module
28
28
  :show-inheritance:
29
29
  :undoc-members:
30
30
 
31
+ pygeai.tests.snippets.organization.get\_memberships module
32
+ ----------------------------------------------------------
33
+
34
+ .. automodule:: pygeai.tests.snippets.organization.get_memberships
35
+ :members:
36
+ :show-inheritance:
37
+ :undoc-members:
38
+
39
+ pygeai.tests.snippets.organization.get\_organization\_members module
40
+ --------------------------------------------------------------------
41
+
42
+ .. automodule:: pygeai.tests.snippets.organization.get_organization_members
43
+ :members:
44
+ :show-inheritance:
45
+ :undoc-members:
46
+
31
47
  pygeai.tests.snippets.organization.get\_project\_data module
32
48
  ------------------------------------------------------------
33
49
 
@@ -44,6 +60,30 @@ pygeai.tests.snippets.organization.get\_project\_list module
44
60
  :show-inheritance:
45
61
  :undoc-members:
46
62
 
63
+ pygeai.tests.snippets.organization.get\_project\_members module
64
+ ---------------------------------------------------------------
65
+
66
+ .. automodule:: pygeai.tests.snippets.organization.get_project_members
67
+ :members:
68
+ :show-inheritance:
69
+ :undoc-members:
70
+
71
+ pygeai.tests.snippets.organization.get\_project\_memberships module
72
+ -------------------------------------------------------------------
73
+
74
+ .. automodule:: pygeai.tests.snippets.organization.get_project_memberships
75
+ :members:
76
+ :show-inheritance:
77
+ :undoc-members:
78
+
79
+ pygeai.tests.snippets.organization.get\_project\_roles module
80
+ -------------------------------------------------------------
81
+
82
+ .. automodule:: pygeai.tests.snippets.organization.get_project_roles
83
+ :members:
84
+ :show-inheritance:
85
+ :undoc-members:
86
+
47
87
  pygeai.tests.snippets.organization.get\_project\_tokens module
48
88
  --------------------------------------------------------------
49
89
 
@@ -8,7 +8,9 @@ Subpackages
8
8
  :maxdepth: 4
9
9
 
10
10
  pygeai.tests.snippets.assistants
11
+ pygeai.tests.snippets.auth
11
12
  pygeai.tests.snippets.chat
13
+ pygeai.tests.snippets.dbg
12
14
  pygeai.tests.snippets.embeddings
13
15
  pygeai.tests.snippets.evaluation
14
16
  pygeai.tests.snippets.extras
pygeai/admin/clients.py CHANGED
@@ -1,11 +1,11 @@
1
- import json
2
- from json import JSONDecodeError
3
1
 
4
2
  from pygeai import logger
5
3
  from pygeai.admin.endpoints import GET_API_TOKEN_VALIDATION_V1, GET_AUTHORIZED_ORGANIZATIONS_V1, \
6
4
  GET_AUTHORIZED_PROJECTS_V1, GET_PROJECT_VISIBILITY_V1, GET_PROJECT_API_TOKEN_V1
7
5
  from pygeai.core.base.clients import BaseClient
8
6
  from pygeai.core.common.exceptions import InvalidAPIResponseException
7
+ from pygeai.core.utils.validators import validate_status_code
8
+ from pygeai.core.utils.parsers import parse_json_response
9
9
 
10
10
 
11
11
  class AdminClient(BaseClient):
@@ -17,12 +17,8 @@ class AdminClient(BaseClient):
17
17
  :return: dict - The API response containing organization and project information in JSON format.
18
18
  """
19
19
  response = self.api_service.get(endpoint=GET_API_TOKEN_VALIDATION_V1)
20
- try:
21
- result = response.json()
22
- return result
23
- except JSONDecodeError as e:
24
- logger.error(f"Unable to validate API token: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
25
- raise InvalidAPIResponseException(f"Unable to validate API token: {response.text}")
20
+ validate_status_code(response)
21
+ return parse_json_response(response, "validate API token")
26
22
 
27
23
  def get_authorized_organizations(self) -> dict:
28
24
  """
@@ -31,12 +27,8 @@ class AdminClient(BaseClient):
31
27
  :return: dict - The API response containing the list of authorized organizations in JSON format.
32
28
  """
33
29
  response = self.api_service.get(endpoint=GET_AUTHORIZED_ORGANIZATIONS_V1)
34
- try:
35
- result = response.json()
36
- return result
37
- except JSONDecodeError as e:
38
- logger.error(f"Unable to retrieve authorized organizations: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
39
- raise InvalidAPIResponseException(f"Unable to retrieve authorized organizations: {response.text}")
30
+ validate_status_code(response)
31
+ return parse_json_response(response, "retrieve authorized organizations")
40
32
 
41
33
  def get_authorized_projects_by_organization(
42
34
  self,
@@ -54,12 +46,8 @@ class AdminClient(BaseClient):
54
46
  "organization": organization
55
47
  }
56
48
  )
57
- try:
58
- result = response.json()
59
- return result
60
- except JSONDecodeError as e:
61
- logger.error(f"Unable to retrieve authorized projects for organization '{organization}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
62
- raise InvalidAPIResponseException(f"Unable to retrieve authorized projects for organization {organization}: {response.text}")
49
+ validate_status_code(response)
50
+ return parse_json_response(response, "retrieve authorized projects for organization", organization=organization)
63
51
 
64
52
  def get_project_visibility(
65
53
  self,
@@ -90,12 +78,8 @@ class AdminClient(BaseClient):
90
78
  "accessToken": access_token
91
79
  }
92
80
  )
93
- try:
94
- result = response.json()
95
- return result
96
- except JSONDecodeError as e:
97
- logger.error(f"Unable to retrieve project visibility for organization '{organization}' and project '{project}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
98
- raise InvalidAPIResponseException(f"Unable to retrieve project visibility for organization {organization} and project {project}: {response.text}")
81
+ validate_status_code(response)
82
+ return parse_json_response(response, "retrieve project visibility", organization=organization, project=project)
99
83
 
100
84
  def get_project_api_token(
101
85
  self,
@@ -127,9 +111,5 @@ class AdminClient(BaseClient):
127
111
  "accessToken": access_token
128
112
  }
129
113
  )
130
- try:
131
- result = response.json()
132
- return result
133
- except JSONDecodeError as e:
134
- logger.error(f"Unable to retrieve project API token for organization '{organization}' and project '{project}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
135
- raise InvalidAPIResponseException(f"Unable to retrieve project API token for organization {organization} and project {project}: {response.text}")
114
+ validate_status_code(response)
115
+ return parse_json_response(response, "retrieve project API token", organization=organization, project=project)
@@ -1,5 +1,3 @@
1
- import json
2
- from json import JSONDecodeError
3
1
 
4
2
  from pygeai import logger
5
3
  from pygeai.assistant.endpoints import GET_ASSISTANT_DATA_V1, CREATE_ASSISTANT_V1, UPDATE_ASSISTANT_V1, BEGIN_CONVERSATION_V1, \
@@ -8,6 +6,8 @@ from pygeai.assistant.data_analyst.endpoints import GET_DATA_ANALYST_STATUS_V1,
8
6
  from pygeai.core.base.clients import BaseClient
9
7
  from pygeai.core.common.decorators import handler_server_error
10
8
  from pygeai.core.common.exceptions import InvalidAPIResponseException
9
+ from pygeai.core.utils.validators import validate_status_code
10
+ from pygeai.core.utils.parsers import parse_json_response
11
11
 
12
12
 
13
13
  class AssistantClient(BaseClient):
@@ -31,12 +31,8 @@ class AssistantClient(BaseClient):
31
31
  "detail": detail
32
32
  }
33
33
  )
34
- try:
35
- result = response.json()
36
- return result
37
- except JSONDecodeError as e:
38
- logger.error(f"Unable to get assistant data for ID '{assistant_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
39
- raise InvalidAPIResponseException(f"Unable to get assistant data for ID '{assistant_id}': {response.text}")
34
+ validate_status_code(response)
35
+ return parse_json_response(response, "get assistant data for ID", assistant_id=assistant_id)
40
36
 
41
37
  def create_assistant(
42
38
  self,
@@ -88,12 +84,8 @@ class AssistantClient(BaseClient):
88
84
  endpoint=CREATE_ASSISTANT_V1,
89
85
  data=data
90
86
  )
91
- try:
92
- result = response.json()
93
- return result
94
- except JSONDecodeError as e:
95
- logger.error(f"Unable to create assistant with name '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
96
- raise InvalidAPIResponseException(f"Unable to create assistant with name '{name}': {response.text}")
87
+ validate_status_code(response)
88
+ return parse_json_response(response, "create assistant with name", name=name)
97
89
 
98
90
  def update_assistant(
99
91
  self,
@@ -165,12 +157,8 @@ class AssistantClient(BaseClient):
165
157
  endpoint=endpoint,
166
158
  data=data
167
159
  )
168
- try:
169
- result = response.json()
170
- return result
171
- except JSONDecodeError as e:
172
- logger.error(f"Unable to update assistant with ID '{assistant_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
173
- raise InvalidAPIResponseException(f"Unable to update assistant with ID '{assistant_id}': {response.text}")
160
+ validate_status_code(response)
161
+ return parse_json_response(response, "update assistant", assistant_id=assistant_id)
174
162
 
175
163
  def delete_assistant(
176
164
  self,
@@ -186,12 +174,8 @@ class AssistantClient(BaseClient):
186
174
  response = self.api_service.delete(
187
175
  endpoint=endpoint
188
176
  )
189
- try:
190
- result = response.json()
191
- return result
192
- except JSONDecodeError as e:
193
- logger.error(f"Unable to delete assistant with ID '{assistant_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
194
- raise InvalidAPIResponseException(f"Unable to delete assistant with ID '{assistant_id}': {response.text}")
177
+ validate_status_code(response)
178
+ return parse_json_response(response, "delete assistant", assistant_id=assistant_id)
195
179
 
196
180
  def send_chat_request(
197
181
  self,
@@ -223,12 +207,8 @@ class AssistantClient(BaseClient):
223
207
  endpoint=SEND_CHAT_REQUEST_V1,
224
208
  data=data
225
209
  )
226
- try:
227
- result = response.json()
228
- return result
229
- except JSONDecodeError as e:
230
- logger.error(f"Unable to send chat request to assistant '{assistant_name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
231
- raise InvalidAPIResponseException(f"Unable to send chat request to assistant '{assistant_name}': {response.text}")
210
+ validate_status_code(response)
211
+ return parse_json_response(response, "send chat request to assistant", assistant_name=assistant_name)
232
212
 
233
213
  def get_request_status(
234
214
  self,
@@ -244,12 +224,8 @@ class AssistantClient(BaseClient):
244
224
  response = self.api_service.get(
245
225
  endpoint=endpoint
246
226
  )
247
- try:
248
- result = response.json()
249
- return result
250
- except JSONDecodeError as e:
251
- logger.error(f"Unable to get request status for ID '{request_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
252
- raise InvalidAPIResponseException(f"Unable to get request status for ID '{request_id}': {response.text}")
227
+ validate_status_code(response)
228
+ return parse_json_response(response, "get request status for ID", request_id=request_id)
253
229
 
254
230
  def cancel_request(
255
231
  self,
@@ -268,12 +244,8 @@ class AssistantClient(BaseClient):
268
244
  "requestId": request_id
269
245
  }
270
246
  )
271
- try:
272
- result = response.json()
273
- return result
274
- except JSONDecodeError as e:
275
- logger.error(f"Unable to cancel request with ID '{request_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
276
- raise InvalidAPIResponseException(f"Unable to cancel request with ID '{request_id}': {response.text}")
247
+ validate_status_code(response)
248
+ return parse_json_response(response, "cancel request", request_id=request_id)
277
249
 
278
250
 
279
251
 
@@ -6,6 +6,7 @@ from pygeai.assistant.endpoints import GET_ASSISTANT_DATA_V1, CREATE_ASSISTANT_V
6
6
  from pygeai.assistant.data_analyst.endpoints import GET_DATA_ANALYST_STATUS_V1, EXTEND_DATA_ANALYST_DATASET_V1
7
7
  from pygeai.core.base.clients import BaseClient
8
8
  from pygeai.core.common.decorators import handler_server_error
9
+ from pygeai.core.utils.validators import validate_status_code
9
10
 
10
11
 
11
12
  class ChatWithDataAssistantClient(AssistantClient):
@@ -1,10 +1,11 @@
1
- from json import JSONDecodeError
2
1
  from pathlib import Path
3
2
 
4
3
  from pygeai import logger
5
4
  from pygeai.assistant.clients import AssistantClient
6
5
  from pygeai.assistant.data_analyst.endpoints import GET_DATA_ANALYST_STATUS_V1, EXTEND_DATA_ANALYST_DATASET_V1
7
6
  from pygeai.core.common.exceptions import InvalidAPIResponseException
7
+ from pygeai.core.utils.validators import validate_status_code
8
+ from pygeai.core.utils.parsers import parse_json_response
8
9
 
9
10
 
10
11
  class DataAnalystAssistantClient(AssistantClient):
@@ -34,12 +35,8 @@ class DataAnalystAssistantClient(AssistantClient):
34
35
  headers=headers
35
36
  )
36
37
 
37
- try:
38
- result = response.json()
39
- return result
40
- except JSONDecodeError as e:
41
- logger.error(f"Unable to get status for assistant ID '{assistant_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
42
- raise InvalidAPIResponseException(f"Unable to get status for assistant ID '{assistant_id}': {response.text}")
38
+ validate_status_code(response)
39
+ return parse_json_response(response, "get status for assistant ID", assistant_id=assistant_id)
43
40
 
44
41
  def extend_dataset(
45
42
  self,
@@ -69,12 +66,8 @@ class DataAnalystAssistantClient(AssistantClient):
69
66
  endpoint=endpoint,
70
67
  files=files
71
68
  )
72
- try:
73
- result = response.json()
74
- return result
75
- except JSONDecodeError as e:
76
- logger.error(f"Unable to extend dataset for assistant ID '{assistant_id}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
77
- raise InvalidAPIResponseException(f"Unable to extend dataset for assistant ID '{assistant_id}': {response.text}")
69
+ validate_status_code(response)
70
+ return parse_json_response(response, "extend dataset for assistant ID", assistant_id=assistant_id)
78
71
  finally:
79
72
  for _, file_handle in files:
80
73
  file_handle.close()
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import logging
3
- from json import JSONDecodeError
4
3
  from pathlib import Path
5
4
  from typing import Any
6
5
 
@@ -12,6 +11,8 @@ from pygeai.core.base.clients import BaseClient
12
11
  import urllib.parse
13
12
 
14
13
  from pygeai.core.common.exceptions import InvalidAPIResponseException
14
+ from pygeai.core.utils.validators import validate_status_code
15
+ from pygeai.core.utils.parsers import parse_json_response
15
16
 
16
17
 
17
18
  class RAGAssistantClient(BaseClient):
@@ -21,22 +22,14 @@ class RAGAssistantClient(BaseClient):
21
22
 
22
23
  def get_assistants_from_project(self) -> dict:
23
24
  response = self.api_service.get(endpoint=GET_ASSISTANTS_FROM_PROJECT_V1)
24
- try:
25
- result = response.json()
26
- return result
27
- except JSONDecodeError as e:
28
- logger.error(f"Unable to get assistants from project: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
29
- raise InvalidAPIResponseException(f"Unable to get assistants from project: {response.text}")
25
+ validate_status_code(response)
26
+ return parse_json_response(response, "get assistants from project")
30
27
 
31
28
  def get_assistant_data(self, name: str) -> dict:
32
29
  endpoint = GET_ASSISTANT_V1.format(name=name)
33
30
  response = self.api_service.get(endpoint=endpoint)
34
- try:
35
- result = response.json()
36
- return result
37
- except JSONDecodeError as e:
38
- logger.error(f"Unable to get assistant data for name '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
39
- raise InvalidAPIResponseException(f"Unable to get assistant data for name '{name}': {response.text}")
31
+ validate_status_code(response)
32
+ return parse_json_response(response, "get assistant data for name", name=name)
40
33
 
41
34
  def create_assistant(
42
35
  self,
@@ -116,12 +109,8 @@ class RAGAssistantClient(BaseClient):
116
109
  endpoint=CREATE_ASSISTANT_V1,
117
110
  data=data
118
111
  )
119
- try:
120
- result = response.json()
121
- return result
122
- except JSONDecodeError as e:
123
- logger.error(f"Unable to create assistant with name '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
124
- raise InvalidAPIResponseException(f"Unable to create assistant with name '{name}': {response.text}")
112
+ validate_status_code(response)
113
+ return parse_json_response(response, "create assistant with name", name=name)
125
114
 
126
115
  def update_assistant(
127
116
  self,
@@ -154,23 +143,15 @@ class RAGAssistantClient(BaseClient):
154
143
  endpoint=endpoint,
155
144
  data=data
156
145
  )
157
- try:
158
- result = response.json()
159
- return result
160
- except JSONDecodeError as e:
161
- logger.error(f"Unable to update assistant with name '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
162
- raise InvalidAPIResponseException(f"Unable to update assistant with name '{name}': {response.text}")
146
+ validate_status_code(response)
147
+ return parse_json_response(response, "update assistant with name", name=name)
163
148
 
164
149
  def delete_assistant(self, name: str) -> dict:
165
150
  safe_name = self.get_url_safe_name(name)
166
151
  endpoint = DELETE_ASSISTANT_V1.format(name=safe_name)
167
152
  response = self.api_service.delete(endpoint=endpoint)
168
- try:
169
- result = response.json()
170
- return result
171
- except JSONDecodeError as e:
172
- logger.error(f"Unable to delete assistant with name '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
173
- raise InvalidAPIResponseException(f"Unable to delete assistant with name '{name}': {response.text}")
153
+ validate_status_code(response)
154
+ return parse_json_response(response, "delete assistant with name", name=name)
174
155
 
175
156
  def get_documents(
176
157
  self,
@@ -187,34 +168,22 @@ class RAGAssistantClient(BaseClient):
187
168
  "count": count
188
169
  }
189
170
  )
190
- try:
191
- result = response.json()
192
- return result
193
- except JSONDecodeError as e:
194
- logger.error(f"Unable to get documents for assistant '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
195
- raise InvalidAPIResponseException(f"Unable to get documents for assistant '{name}': {response.text}")
171
+ validate_status_code(response)
172
+ return parse_json_response(response, "get documents for assistant", name=name)
196
173
 
197
174
  def delete_all_documents(self, name: str) -> dict:
198
175
  safe_name = self.get_url_safe_name(name)
199
176
  endpoint = DELETE_ALL_DOCUMENTS_V1.format(name=safe_name)
200
177
  response = self.api_service.delete(endpoint=endpoint)
201
- try:
202
- result = response.json()
203
- return result
204
- except JSONDecodeError as e:
205
- logger.error(f"Unable to delete all documents for assistant '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
206
- raise InvalidAPIResponseException(f"Unable to delete all documents for assistant '{name}': {response.text}")
178
+ validate_status_code(response)
179
+ return parse_json_response(response, "delete all documents for assistant", name=name)
207
180
 
208
181
  def retrieve_document(self, name: str, document_id: str) -> dict:
209
182
  safe_name = self.get_url_safe_name(name)
210
183
  endpoint = RETRIEVE_DOCUMENT_V1.format(name=safe_name, id=document_id)
211
184
  response = self.api_service.get(endpoint=endpoint)
212
- try:
213
- result = response.json()
214
- return result
215
- except JSONDecodeError as e:
216
- logger.error(f"Unable to retrieve document with ID '{document_id}' for assistant '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
217
- raise InvalidAPIResponseException(f"Unable to retrieve document with ID '{document_id}' for assistant '{name}': {response.text}")
185
+ validate_status_code(response)
186
+ return parse_json_response(response, "retrieve document", document_id=document_id)
218
187
 
219
188
  def upload_document(
220
189
  self,
@@ -234,12 +203,8 @@ class RAGAssistantClient(BaseClient):
234
203
  else:
235
204
  raise ValueError("Invalid upload_type. Use 'binary' or 'multipart'.")
236
205
 
237
- try:
238
- result = response.json()
239
- return result
240
- except JSONDecodeError as e:
241
- logger.error(f"Unable to upload document for assistant '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
242
- raise InvalidAPIResponseException(f"Unable to upload document for assistant '{name}': {response.text}")
206
+ validate_status_code(response)
207
+ return parse_json_response(response, "upload document for assistant", name=name)
243
208
 
244
209
  def _upload_binary_document(self, endpoint: str, file_path: str, content_type: str):
245
210
  """
@@ -310,22 +275,14 @@ class RAGAssistantClient(BaseClient):
310
275
  safe_name = self.get_url_safe_name(name)
311
276
  endpoint = DELETE_DOCUMENT_V1.format(name=safe_name, id=document_id)
312
277
  response = self.api_service.delete(endpoint=endpoint)
313
- try:
314
- result = response.json()
315
- return result
316
- except JSONDecodeError as e:
317
- logger.error(f"Unable to delete document with ID '{document_id}' for assistant '{name}': JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
318
- raise InvalidAPIResponseException(f"Unable to delete document with ID '{document_id}' for assistant '{name}': {response.text}")
278
+ validate_status_code(response)
279
+ return parse_json_response(response, "delete document", document_id=document_id)
319
280
 
320
281
  def execute_query(self, query: dict) -> dict:
321
282
  response = self.api_service.post(
322
283
  endpoint=EXECUTE_QUERY_V1,
323
284
  data=query
324
285
  )
325
- try:
326
- result = response.json()
327
- return result
328
- except JSONDecodeError as e:
329
- logger.error(f"Unable to execute query: JSON parsing error (status {response.status_code}): {e}. Response: {response.text}")
330
- raise InvalidAPIResponseException(f"Unable to execute query: {response.text}")
286
+ validate_status_code(response)
287
+ return parse_json_response(response, "execute query")
331
288