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.
- pygeai/_docs/source/conf.py +78 -6
- pygeai/_docs/source/content/api_reference/admin.rst +161 -0
- pygeai/_docs/source/content/api_reference/assistant.rst +326 -0
- pygeai/_docs/source/content/api_reference/auth.rst +379 -0
- pygeai/_docs/source/content/api_reference/embeddings.rst +31 -1
- pygeai/_docs/source/content/api_reference/evaluation.rst +590 -0
- pygeai/_docs/source/content/api_reference/feedback.rst +237 -0
- pygeai/_docs/source/content/api_reference/files.rst +592 -0
- pygeai/_docs/source/content/api_reference/gam.rst +401 -0
- pygeai/_docs/source/content/api_reference/health.rst +58 -0
- pygeai/_docs/source/content/api_reference/project.rst +20 -18
- pygeai/_docs/source/content/api_reference/proxy.rst +318 -0
- pygeai/_docs/source/content/api_reference/rerank.rst +94 -0
- pygeai/_docs/source/content/api_reference/secrets.rst +495 -0
- pygeai/_docs/source/content/api_reference/usage_limits.rst +390 -0
- pygeai/_docs/source/content/api_reference.rst +13 -1
- pygeai/_docs/source/content/debugger.rst +376 -83
- pygeai/_docs/source/content/migration.rst +528 -0
- pygeai/_docs/source/content/modules.rst +1 -1
- pygeai/_docs/source/index.rst +59 -7
- pygeai/_docs/source/pygeai.auth.rst +29 -0
- pygeai/_docs/source/pygeai.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.cli.rst +8 -0
- pygeai/_docs/source/pygeai.core.utils.rst +16 -0
- pygeai/_docs/source/pygeai.rst +1 -0
- pygeai/_docs/source/pygeai.tests.auth.rst +21 -0
- pygeai/_docs/source/pygeai.tests.cli.commands.rst +16 -0
- pygeai/_docs/source/pygeai.tests.cli.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.base.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.embeddings.rst +16 -0
- pygeai/_docs/source/pygeai.tests.core.files.rst +8 -0
- pygeai/_docs/source/pygeai.tests.core.plugins.rst +21 -0
- pygeai/_docs/source/pygeai.tests.core.rst +1 -0
- pygeai/_docs/source/pygeai.tests.evaluation.dataset.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.plan.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.result.rst +21 -0
- pygeai/_docs/source/pygeai.tests.evaluation.rst +20 -0
- pygeai/_docs/source/pygeai.tests.integration.lab.processes.rst +8 -0
- pygeai/_docs/source/pygeai.tests.organization.rst +8 -0
- pygeai/_docs/source/pygeai.tests.rst +2 -0
- pygeai/_docs/source/pygeai.tests.snippets.auth.rst +10 -0
- pygeai/_docs/source/pygeai.tests.snippets.chat.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.dbg.rst +45 -0
- pygeai/_docs/source/pygeai.tests.snippets.embeddings.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.dataset.rst +197 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.plan.rst +133 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.result.rst +37 -0
- pygeai/_docs/source/pygeai.tests.snippets.evaluation.rst +10 -0
- pygeai/_docs/source/pygeai.tests.snippets.organization.rst +40 -0
- pygeai/_docs/source/pygeai.tests.snippets.rst +2 -0
- pygeai/admin/clients.py +12 -32
- pygeai/assistant/clients.py +16 -44
- pygeai/assistant/data/clients.py +1 -0
- pygeai/assistant/data_analyst/clients.py +6 -13
- pygeai/assistant/rag/clients.py +24 -67
- pygeai/auth/clients.py +88 -14
- pygeai/auth/endpoints.py +4 -0
- pygeai/chat/clients.py +192 -25
- pygeai/chat/endpoints.py +2 -1
- pygeai/cli/commands/auth.py +178 -2
- pygeai/cli/commands/chat.py +227 -1
- pygeai/cli/commands/embeddings.py +56 -8
- pygeai/cli/commands/lab/ai_lab.py +0 -2
- pygeai/cli/commands/migrate.py +994 -434
- pygeai/cli/commands/organization.py +241 -0
- pygeai/cli/error_handler.py +116 -0
- pygeai/cli/geai.py +28 -10
- pygeai/cli/parsers.py +8 -2
- pygeai/core/base/clients.py +4 -1
- pygeai/core/common/exceptions.py +11 -10
- pygeai/core/embeddings/__init__.py +19 -0
- pygeai/core/embeddings/clients.py +20 -9
- pygeai/core/embeddings/mappers.py +16 -2
- pygeai/core/embeddings/responses.py +9 -2
- pygeai/core/feedback/clients.py +4 -8
- pygeai/core/files/clients.py +10 -25
- pygeai/core/files/managers.py +42 -0
- pygeai/core/llm/clients.py +11 -26
- pygeai/core/models.py +107 -0
- pygeai/core/plugins/clients.py +4 -7
- pygeai/core/rerank/clients.py +4 -8
- pygeai/core/secrets/clients.py +14 -37
- pygeai/core/services/rest.py +1 -1
- pygeai/core/utils/parsers.py +32 -0
- pygeai/core/utils/validators.py +10 -0
- pygeai/dbg/__init__.py +3 -0
- pygeai/dbg/debugger.py +565 -70
- pygeai/evaluation/clients.py +2 -1
- pygeai/evaluation/dataset/clients.py +46 -44
- pygeai/evaluation/plan/clients.py +28 -26
- pygeai/evaluation/result/clients.py +38 -5
- pygeai/gam/clients.py +10 -25
- pygeai/health/clients.py +4 -7
- pygeai/lab/agents/clients.py +21 -54
- pygeai/lab/agents/endpoints.py +2 -0
- pygeai/lab/clients.py +1 -0
- pygeai/lab/models.py +3 -3
- pygeai/lab/processes/clients.py +45 -127
- pygeai/lab/strategies/clients.py +11 -25
- pygeai/lab/tools/clients.py +23 -67
- pygeai/lab/tools/endpoints.py +3 -0
- pygeai/migration/__init__.py +31 -0
- pygeai/migration/strategies.py +404 -155
- pygeai/migration/tools.py +170 -3
- pygeai/organization/clients.py +135 -51
- pygeai/organization/endpoints.py +6 -1
- pygeai/organization/limits/clients.py +32 -91
- pygeai/organization/managers.py +157 -1
- pygeai/organization/mappers.py +76 -2
- pygeai/organization/responses.py +25 -1
- pygeai/proxy/clients.py +4 -1
- pygeai/tests/admin/test_clients.py +16 -11
- pygeai/tests/assistants/rag/test_clients.py +35 -23
- pygeai/tests/assistants/test_clients.py +22 -15
- pygeai/tests/auth/test_clients.py +191 -7
- pygeai/tests/chat/test_clients.py +211 -1
- pygeai/tests/cli/commands/test_embeddings.py +32 -9
- pygeai/tests/cli/commands/test_evaluation.py +7 -0
- pygeai/tests/cli/commands/test_migrate.py +112 -243
- pygeai/tests/cli/test_error_handler.py +225 -0
- pygeai/tests/cli/test_geai_driver.py +154 -0
- pygeai/tests/cli/test_parsers.py +5 -5
- pygeai/tests/core/embeddings/test_clients.py +144 -0
- pygeai/tests/core/embeddings/test_managers.py +171 -0
- pygeai/tests/core/embeddings/test_mappers.py +142 -0
- pygeai/tests/core/feedback/test_clients.py +2 -0
- pygeai/tests/core/files/test_clients.py +1 -0
- pygeai/tests/core/llm/test_clients.py +14 -9
- pygeai/tests/core/plugins/test_clients.py +5 -3
- pygeai/tests/core/rerank/test_clients.py +1 -0
- pygeai/tests/core/secrets/test_clients.py +19 -13
- pygeai/tests/dbg/test_debugger.py +453 -75
- pygeai/tests/evaluation/dataset/test_clients.py +3 -1
- pygeai/tests/evaluation/plan/test_clients.py +4 -2
- pygeai/tests/evaluation/result/test_clients.py +7 -5
- pygeai/tests/gam/test_clients.py +1 -1
- pygeai/tests/health/test_clients.py +1 -0
- pygeai/tests/lab/agents/test_clients.py +9 -0
- pygeai/tests/lab/processes/test_clients.py +36 -0
- pygeai/tests/lab/processes/test_mappers.py +3 -0
- pygeai/tests/lab/strategies/test_clients.py +14 -9
- pygeai/tests/migration/test_strategies.py +45 -218
- pygeai/tests/migration/test_tools.py +133 -9
- pygeai/tests/organization/limits/test_clients.py +17 -0
- pygeai/tests/organization/test_clients.py +206 -1
- pygeai/tests/organization/test_managers.py +122 -1
- pygeai/tests/proxy/test_clients.py +2 -0
- pygeai/tests/proxy/test_integration.py +1 -0
- pygeai/tests/snippets/auth/__init__.py +0 -0
- pygeai/tests/snippets/chat/chat_completion_with_reasoning_effort.py +18 -0
- pygeai/tests/snippets/chat/get_response.py +15 -0
- pygeai/tests/snippets/chat/get_response_streaming.py +20 -0
- pygeai/tests/snippets/chat/get_response_with_files.py +16 -0
- pygeai/tests/snippets/chat/get_response_with_tools.py +36 -0
- pygeai/tests/snippets/dbg/__init__.py +0 -0
- pygeai/tests/snippets/dbg/basic_debugging.py +32 -0
- pygeai/tests/snippets/dbg/breakpoint_management.py +48 -0
- pygeai/tests/snippets/dbg/stack_navigation.py +45 -0
- pygeai/tests/snippets/dbg/stepping_example.py +40 -0
- pygeai/tests/snippets/embeddings/cache_example.py +31 -0
- pygeai/tests/snippets/embeddings/cohere_example.py +41 -0
- pygeai/tests/snippets/embeddings/openai_base64_example.py +27 -0
- pygeai/tests/snippets/embeddings/openai_example.py +30 -0
- pygeai/tests/snippets/embeddings/similarity_example.py +42 -0
- pygeai/tests/snippets/evaluation/dataset/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/dataset/complete_workflow_example.py +195 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset.py +26 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_from_file.py +11 -0
- pygeai/tests/snippets/evaluation/dataset/create_dataset_row.py +17 -0
- pygeai/tests/snippets/evaluation/dataset/create_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/create_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/delete_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/delete_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/delete_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/get_dataset_row.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/get_expected_source.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/get_filter_variable.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/list_dataset_rows.py +9 -0
- pygeai/tests/snippets/evaluation/dataset/list_datasets.py +6 -0
- pygeai/tests/snippets/evaluation/dataset/list_expected_sources.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/list_filter_variables.py +10 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset.py +15 -0
- pygeai/tests/snippets/evaluation/dataset/update_dataset_row.py +20 -0
- pygeai/tests/snippets/evaluation/dataset/update_expected_source.py +18 -0
- pygeai/tests/snippets/evaluation/dataset/update_filter_variable.py +19 -0
- pygeai/tests/snippets/evaluation/dataset/upload_dataset_rows_file.py +10 -0
- pygeai/tests/snippets/evaluation/plan/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/plan/add_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/complete_workflow_example.py +136 -0
- pygeai/tests/snippets/evaluation/plan/create_evaluation_plan.py +24 -0
- pygeai/tests/snippets/evaluation/plan/create_rag_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/delete_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/delete_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/execute_evaluation_plan.py +11 -0
- pygeai/tests/snippets/evaluation/plan/get_evaluation_plan.py +9 -0
- pygeai/tests/snippets/evaluation/plan/get_plan_system_metric.py +13 -0
- pygeai/tests/snippets/evaluation/plan/get_system_metric.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_evaluation_plans.py +7 -0
- pygeai/tests/snippets/evaluation/plan/list_plan_system_metrics.py +9 -0
- pygeai/tests/snippets/evaluation/plan/list_system_metrics.py +7 -0
- pygeai/tests/snippets/evaluation/plan/update_evaluation_plan.py +22 -0
- pygeai/tests/snippets/evaluation/plan/update_plan_system_metric.py +14 -0
- pygeai/tests/snippets/evaluation/result/__init__.py +0 -0
- pygeai/tests/snippets/evaluation/result/complete_workflow_example.py +150 -0
- pygeai/tests/snippets/evaluation/result/get_evaluation_result.py +26 -0
- pygeai/tests/snippets/evaluation/result/list_evaluation_results.py +17 -0
- pygeai/tests/snippets/migrate/__init__.py +45 -0
- pygeai/tests/snippets/migrate/agent_migration.py +110 -0
- pygeai/tests/snippets/migrate/assistant_migration.py +64 -0
- pygeai/tests/snippets/migrate/orchestrator_examples.py +179 -0
- pygeai/tests/snippets/migrate/process_migration.py +64 -0
- pygeai/tests/snippets/migrate/project_migration.py +42 -0
- pygeai/tests/snippets/migrate/tool_migration.py +64 -0
- pygeai/tests/snippets/organization/create_project.py +2 -2
- pygeai/tests/snippets/organization/get_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_organization_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_members.py +6 -0
- pygeai/tests/snippets/organization/get_project_memberships.py +12 -0
- pygeai/tests/snippets/organization/get_project_roles.py +6 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/METADATA +1 -1
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/RECORD +227 -124
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/WHEEL +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/entry_points.txt +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/licenses/LICENSE +0 -0
- {pygeai-0.6.0b6.dist-info → pygeai-0.6.0b10.dist-info}/top_level.txt +0 -0
|
@@ -9,7 +9,8 @@ from pygeai.core.base.responses import EmptyResponse
|
|
|
9
9
|
from pygeai.organization.managers import OrganizationManager
|
|
10
10
|
from pygeai.organization.mappers import OrganizationResponseMapper
|
|
11
11
|
from pygeai.organization.responses import AssistantListResponse, ProjectListResponse, ProjectDataResponse, \
|
|
12
|
-
ProjectTokensResponse, ProjectItemListResponse
|
|
12
|
+
ProjectTokensResponse, ProjectItemListResponse, MembershipsResponse, ProjectMembershipsResponse, \
|
|
13
|
+
ProjectRolesResponse, ProjectMembersResponse, OrganizationMembersResponse
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class TestOrganizationManager(unittest.TestCase):
|
|
@@ -261,3 +262,123 @@ class TestOrganizationManager(unittest.TestCase):
|
|
|
261
262
|
skip=0,
|
|
262
263
|
count=0
|
|
263
264
|
)
|
|
265
|
+
|
|
266
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_memberships")
|
|
267
|
+
def test_get_memberships(self, mock_get_memberships):
|
|
268
|
+
mock_response = MembershipsResponse(count=0, pages=0, organizations=[])
|
|
269
|
+
mock_get_memberships.return_value = {}
|
|
270
|
+
|
|
271
|
+
with patch.object(OrganizationResponseMapper, 'map_to_memberships_response', return_value=mock_response):
|
|
272
|
+
response = self.manager.get_memberships()
|
|
273
|
+
|
|
274
|
+
self.assertIsInstance(response, MembershipsResponse)
|
|
275
|
+
self.assertEqual(response.count, 0)
|
|
276
|
+
mock_get_memberships.assert_called_once_with(email=None, start_page=1, page_size=20, order_key=None, order_direction="desc", role_types=None)
|
|
277
|
+
|
|
278
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_memberships")
|
|
279
|
+
def test_get_memberships_error(self, mock_get_memberships):
|
|
280
|
+
mock_get_memberships.return_value = self.error_response
|
|
281
|
+
|
|
282
|
+
with patch.object(ErrorHandler, 'has_errors', return_value=True):
|
|
283
|
+
with patch.object(ErrorHandler, 'extract_error', return_value="Access denied"):
|
|
284
|
+
with self.assertRaises(APIError) as context:
|
|
285
|
+
self.manager.get_memberships()
|
|
286
|
+
|
|
287
|
+
self.assertIn("Error received while retrieving memberships", str(context.exception))
|
|
288
|
+
mock_get_memberships.assert_called_once_with(email=None, start_page=1, page_size=20, order_key=None, order_direction="desc", role_types=None)
|
|
289
|
+
|
|
290
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_memberships")
|
|
291
|
+
def test_get_project_memberships(self, mock_get_project_memberships):
|
|
292
|
+
mock_response = ProjectMembershipsResponse(count=0, pages=0, projects=[])
|
|
293
|
+
mock_get_project_memberships.return_value = {}
|
|
294
|
+
|
|
295
|
+
with patch.object(OrganizationResponseMapper, 'map_to_project_memberships_response', return_value=mock_response):
|
|
296
|
+
response = self.manager.get_project_memberships()
|
|
297
|
+
|
|
298
|
+
self.assertIsInstance(response, ProjectMembershipsResponse)
|
|
299
|
+
self.assertEqual(response.count, 0)
|
|
300
|
+
mock_get_project_memberships.assert_called_once_with(email=None, start_page=1, page_size=20, order_key=None, order_direction="desc", role_types=None)
|
|
301
|
+
|
|
302
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_memberships")
|
|
303
|
+
def test_get_project_memberships_error(self, mock_get_project_memberships):
|
|
304
|
+
mock_get_project_memberships.return_value = self.error_response
|
|
305
|
+
|
|
306
|
+
with patch.object(ErrorHandler, 'has_errors', return_value=True):
|
|
307
|
+
with patch.object(ErrorHandler, 'extract_error', return_value="Access denied"):
|
|
308
|
+
with self.assertRaises(APIError) as context:
|
|
309
|
+
self.manager.get_project_memberships()
|
|
310
|
+
|
|
311
|
+
self.assertIn("Error received while retrieving project memberships", str(context.exception))
|
|
312
|
+
mock_get_project_memberships.assert_called_once_with(email=None, start_page=1, page_size=20, order_key=None, order_direction="desc", role_types=None)
|
|
313
|
+
|
|
314
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_roles")
|
|
315
|
+
def test_get_project_roles(self, mock_get_project_roles):
|
|
316
|
+
mock_response = ProjectRolesResponse(roles=[])
|
|
317
|
+
mock_get_project_roles.return_value = {}
|
|
318
|
+
|
|
319
|
+
with patch.object(OrganizationResponseMapper, 'map_to_project_roles_response', return_value=mock_response):
|
|
320
|
+
response = self.manager.get_project_roles("proj-123")
|
|
321
|
+
|
|
322
|
+
self.assertIsInstance(response, ProjectRolesResponse)
|
|
323
|
+
self.assertEqual(response.roles, [])
|
|
324
|
+
mock_get_project_roles.assert_called_once_with(project_id="proj-123")
|
|
325
|
+
|
|
326
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_roles")
|
|
327
|
+
def test_get_project_roles_error(self, mock_get_project_roles):
|
|
328
|
+
mock_get_project_roles.return_value = self.error_response
|
|
329
|
+
|
|
330
|
+
with patch.object(ErrorHandler, 'has_errors', return_value=True):
|
|
331
|
+
with patch.object(ErrorHandler, 'extract_error', return_value="Project not found"):
|
|
332
|
+
with self.assertRaises(APIError) as context:
|
|
333
|
+
self.manager.get_project_roles("proj-123")
|
|
334
|
+
|
|
335
|
+
self.assertIn("Error received while retrieving project roles", str(context.exception))
|
|
336
|
+
mock_get_project_roles.assert_called_once_with(project_id="proj-123")
|
|
337
|
+
|
|
338
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_members")
|
|
339
|
+
def test_get_project_members(self, mock_get_project_members):
|
|
340
|
+
mock_response = ProjectMembersResponse(members=[])
|
|
341
|
+
mock_get_project_members.return_value = {}
|
|
342
|
+
|
|
343
|
+
with patch.object(OrganizationResponseMapper, 'map_to_project_members_response', return_value=mock_response):
|
|
344
|
+
response = self.manager.get_project_members("proj-123")
|
|
345
|
+
|
|
346
|
+
self.assertIsInstance(response, ProjectMembersResponse)
|
|
347
|
+
self.assertEqual(response.members, [])
|
|
348
|
+
mock_get_project_members.assert_called_once_with(project_id="proj-123")
|
|
349
|
+
|
|
350
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_project_members")
|
|
351
|
+
def test_get_project_members_error(self, mock_get_project_members):
|
|
352
|
+
mock_get_project_members.return_value = self.error_response
|
|
353
|
+
|
|
354
|
+
with patch.object(ErrorHandler, 'has_errors', return_value=True):
|
|
355
|
+
with patch.object(ErrorHandler, 'extract_error', return_value="Project not found"):
|
|
356
|
+
with self.assertRaises(APIError) as context:
|
|
357
|
+
self.manager.get_project_members("proj-123")
|
|
358
|
+
|
|
359
|
+
self.assertIn("Error received while retrieving project members", str(context.exception))
|
|
360
|
+
mock_get_project_members.assert_called_once_with(project_id="proj-123")
|
|
361
|
+
|
|
362
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_organization_members")
|
|
363
|
+
def test_get_organization_members(self, mock_get_organization_members):
|
|
364
|
+
mock_response = OrganizationMembersResponse(members=[])
|
|
365
|
+
mock_get_organization_members.return_value = {}
|
|
366
|
+
|
|
367
|
+
with patch.object(OrganizationResponseMapper, 'map_to_organization_members_response', return_value=mock_response):
|
|
368
|
+
response = self.manager.get_organization_members("org-123")
|
|
369
|
+
|
|
370
|
+
self.assertIsInstance(response, OrganizationMembersResponse)
|
|
371
|
+
self.assertEqual(response.members, [])
|
|
372
|
+
mock_get_organization_members.assert_called_once_with(organization_id="org-123")
|
|
373
|
+
|
|
374
|
+
@patch("pygeai.organization.clients.OrganizationClient.get_organization_members")
|
|
375
|
+
def test_get_organization_members_error(self, mock_get_organization_members):
|
|
376
|
+
mock_get_organization_members.return_value = self.error_response
|
|
377
|
+
|
|
378
|
+
with patch.object(ErrorHandler, 'has_errors', return_value=True):
|
|
379
|
+
with patch.object(ErrorHandler, 'extract_error', return_value="Organization not found"):
|
|
380
|
+
with self.assertRaises(APIError) as context:
|
|
381
|
+
self.manager.get_organization_members("org-123")
|
|
382
|
+
|
|
383
|
+
self.assertIn("Error received while retrieving organization members", str(context.exception))
|
|
384
|
+
mock_get_organization_members.assert_called_once_with(organization_id="org-123")
|
|
@@ -247,6 +247,7 @@ class TestProxyClient(unittest.TestCase):
|
|
|
247
247
|
"""Test successful request."""
|
|
248
248
|
mock_response = Mock()
|
|
249
249
|
mock_response.json.return_value = {"status": "success"}
|
|
250
|
+
mock_response.status_code = 200
|
|
250
251
|
mock_response.raise_for_status.return_value = None
|
|
251
252
|
mock_session.return_value.request.return_value = mock_response
|
|
252
253
|
|
|
@@ -311,6 +312,7 @@ class TestProxyClient(unittest.TestCase):
|
|
|
311
312
|
mock_response = Mock()
|
|
312
313
|
mock_response.json.side_effect = ValueError("Invalid JSON")
|
|
313
314
|
mock_response.text = "plain text response"
|
|
315
|
+
mock_response.status_code = 200
|
|
314
316
|
mock_response.raise_for_status.return_value = None
|
|
315
317
|
mock_session.return_value.request.return_value = mock_response
|
|
316
318
|
|
|
@@ -230,6 +230,7 @@ class TestProxyIntegration(unittest.IsolatedAsyncioTestCase):
|
|
|
230
230
|
# Mock response
|
|
231
231
|
mock_response = Mock()
|
|
232
232
|
mock_response.json.return_value = {"status": "success", "data": "test_data"}
|
|
233
|
+
mock_response.status_code = 200
|
|
233
234
|
mock_response.raise_for_status.return_value = None
|
|
234
235
|
mock_session.return_value.request.return_value = mock_response
|
|
235
236
|
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from pygeai.chat.clients import ChatClient
|
|
2
|
+
|
|
3
|
+
client = ChatClient()
|
|
4
|
+
|
|
5
|
+
messages = [
|
|
6
|
+
{
|
|
7
|
+
"role": "user",
|
|
8
|
+
"content": "Explain quantum computing in simple terms"
|
|
9
|
+
}
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
response = client.chat_completion(
|
|
13
|
+
model="openai/gpt-4o",
|
|
14
|
+
messages=messages,
|
|
15
|
+
reasoning_effort="high"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
print(response)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from pygeai.chat.clients import ChatClient
|
|
2
|
+
|
|
3
|
+
client = ChatClient()
|
|
4
|
+
|
|
5
|
+
model = "openai/o1-pro"
|
|
6
|
+
input_text = "What is the weather like in Paris today?"
|
|
7
|
+
|
|
8
|
+
response = client.get_response(
|
|
9
|
+
model=model,
|
|
10
|
+
input=input_text,
|
|
11
|
+
temperature=0.7,
|
|
12
|
+
max_output_tokens=1000
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
print(response)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from pygeai.chat.clients import ChatClient
|
|
2
|
+
|
|
3
|
+
client = ChatClient()
|
|
4
|
+
|
|
5
|
+
model = "openai/o1-pro"
|
|
6
|
+
input_text = "Tell me a short story about a robot"
|
|
7
|
+
|
|
8
|
+
response = client.get_response(
|
|
9
|
+
model=model,
|
|
10
|
+
input=input_text,
|
|
11
|
+
stream=True,
|
|
12
|
+
temperature=0.7,
|
|
13
|
+
max_output_tokens=500
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
print("Streaming response:")
|
|
17
|
+
for chunk in response:
|
|
18
|
+
print(chunk, end='', flush=True)
|
|
19
|
+
|
|
20
|
+
print("\n\nStreaming complete!")
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from pygeai.chat.clients import ChatClient
|
|
2
|
+
|
|
3
|
+
client = ChatClient()
|
|
4
|
+
|
|
5
|
+
model = "openai/o1-pro"
|
|
6
|
+
input_text = "Please analyze this image and describe what you see"
|
|
7
|
+
files = ["files/image.svg", "files/document.pdf"]
|
|
8
|
+
|
|
9
|
+
response = client.get_response(
|
|
10
|
+
model=model,
|
|
11
|
+
input=input_text,
|
|
12
|
+
files=files,
|
|
13
|
+
temperature=0.7
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
print(response)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from pygeai.chat.clients import ChatClient
|
|
2
|
+
|
|
3
|
+
client = ChatClient()
|
|
4
|
+
|
|
5
|
+
model = "openai/o1-pro"
|
|
6
|
+
input_text = "What is the weather like in Paris today?"
|
|
7
|
+
|
|
8
|
+
tools = [
|
|
9
|
+
{
|
|
10
|
+
"type": "function",
|
|
11
|
+
"name": "get_weather",
|
|
12
|
+
"description": "Get current temperature for a given location.",
|
|
13
|
+
"parameters": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"location": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "City and country e.g. Paris, France"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"required": ["location"],
|
|
22
|
+
"additionalProperties": False
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
response = client.get_response(
|
|
28
|
+
model=model,
|
|
29
|
+
input=input_text,
|
|
30
|
+
tools=tools,
|
|
31
|
+
tool_choice="auto",
|
|
32
|
+
temperature=1.0,
|
|
33
|
+
reasoning={"effort": "medium"}
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
print(response)
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Basic debugging example with geai-dbg.
|
|
3
|
+
|
|
4
|
+
This demonstrates setting breakpoints and inspecting variables.
|
|
5
|
+
"""
|
|
6
|
+
from pygeai.dbg.debugger import Debugger
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def example_function(x, y):
|
|
10
|
+
"""A simple function to debug."""
|
|
11
|
+
result = x + y
|
|
12
|
+
print(f"Result: {result}")
|
|
13
|
+
return result
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def main():
|
|
17
|
+
"""Main entry point."""
|
|
18
|
+
a = 10
|
|
19
|
+
b = 20
|
|
20
|
+
c = example_function(a, b)
|
|
21
|
+
print(f"Final value: {c}")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if __name__ == "__main__":
|
|
25
|
+
dbg = Debugger(target=main, module_filter="__main__")
|
|
26
|
+
dbg.add_breakpoint(module="__main__", function_name="example_function")
|
|
27
|
+
|
|
28
|
+
print("Starting debugger...")
|
|
29
|
+
print("Type 'h' for help")
|
|
30
|
+
print("Try commands like: 'p x', 'p y', 'locals', 's', 'n', 'c'")
|
|
31
|
+
|
|
32
|
+
dbg.run()
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Demonstrates breakpoint management (add, list, remove, enable/disable).
|
|
3
|
+
"""
|
|
4
|
+
from pygeai.dbg.debugger import Debugger
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def func_a():
|
|
8
|
+
"""Function A."""
|
|
9
|
+
print("In function A")
|
|
10
|
+
return "A"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def func_b():
|
|
14
|
+
"""Function B."""
|
|
15
|
+
print("In function B")
|
|
16
|
+
return "B"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def func_c():
|
|
20
|
+
"""Function C."""
|
|
21
|
+
print("In function C")
|
|
22
|
+
return "C"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
"""Main entry point."""
|
|
27
|
+
results = []
|
|
28
|
+
results.append(func_a())
|
|
29
|
+
results.append(func_b())
|
|
30
|
+
results.append(func_c())
|
|
31
|
+
print(f"Results: {results}")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
if __name__ == "__main__":
|
|
35
|
+
dbg = Debugger(target=main, module_filter="__main__")
|
|
36
|
+
|
|
37
|
+
print("Starting debugger...")
|
|
38
|
+
print("No breakpoints set initially. At first function, try:")
|
|
39
|
+
print(" 'b func_b' - add breakpoint on func_b")
|
|
40
|
+
print(" 'b __main__:func_c' - add breakpoint on specific module:function")
|
|
41
|
+
print(" 'b' - list all breakpoints")
|
|
42
|
+
print(" 'dis func_b' - disable breakpoint on func_b")
|
|
43
|
+
print(" 'en func_b' - enable breakpoint on func_b")
|
|
44
|
+
print(" 'cl func_b' - remove breakpoint on func_b")
|
|
45
|
+
print(" 'c' - continue to next breakpoint")
|
|
46
|
+
|
|
47
|
+
dbg.add_breakpoint(module="__main__", function_name="func_a")
|
|
48
|
+
dbg.run()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Demonstrates stack navigation (up, down, where).
|
|
3
|
+
"""
|
|
4
|
+
from pygeai.dbg.debugger import Debugger
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def level_3():
|
|
8
|
+
"""Deepest level of call stack."""
|
|
9
|
+
value = "level 3"
|
|
10
|
+
print(f"At {value}")
|
|
11
|
+
return value
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def level_2():
|
|
15
|
+
"""Middle level of call stack."""
|
|
16
|
+
value = "level 2"
|
|
17
|
+
result = level_3()
|
|
18
|
+
return f"{value} -> {result}"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def level_1():
|
|
22
|
+
"""Top level of call stack."""
|
|
23
|
+
value = "level 1"
|
|
24
|
+
result = level_2()
|
|
25
|
+
return f"{value} -> {result}"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def main():
|
|
29
|
+
"""Main entry point."""
|
|
30
|
+
result = level_1()
|
|
31
|
+
print(f"Final: {result}")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
if __name__ == "__main__":
|
|
35
|
+
dbg = Debugger(target=main, module_filter="__main__")
|
|
36
|
+
dbg.add_breakpoint(module="__main__", function_name="level_3")
|
|
37
|
+
|
|
38
|
+
print("Starting debugger...")
|
|
39
|
+
print("At breakpoint in level_3, try:")
|
|
40
|
+
print(" 'where' or 'bt' - show call stack")
|
|
41
|
+
print(" 'up' - move to level_2 frame")
|
|
42
|
+
print(" 'down' - move back to level_3 frame")
|
|
43
|
+
print(" 'locals' - show local variables in current frame")
|
|
44
|
+
|
|
45
|
+
dbg.run()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Demonstrates stepping functionality (step, next, return).
|
|
3
|
+
"""
|
|
4
|
+
from pygeai.dbg.debugger import Debugger
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def helper_function(n):
|
|
8
|
+
"""Helper function to demonstrate step-into."""
|
|
9
|
+
doubled = n * 2
|
|
10
|
+
return doubled
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def process_data(data):
|
|
14
|
+
"""Process some data."""
|
|
15
|
+
result = []
|
|
16
|
+
for item in data:
|
|
17
|
+
processed = helper_function(item)
|
|
18
|
+
result.append(processed)
|
|
19
|
+
return result
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def main():
|
|
23
|
+
"""Main entry point."""
|
|
24
|
+
numbers = [1, 2, 3, 4, 5]
|
|
25
|
+
processed = process_data(numbers)
|
|
26
|
+
print(f"Processed: {processed}")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
if __name__ == "__main__":
|
|
30
|
+
dbg = Debugger(target=main, module_filter="__main__")
|
|
31
|
+
dbg.add_breakpoint(module="__main__", function_name="process_data")
|
|
32
|
+
|
|
33
|
+
print("Starting debugger...")
|
|
34
|
+
print("At breakpoint, try:")
|
|
35
|
+
print(" 's' - step into helper_function")
|
|
36
|
+
print(" 'n' - step over helper_function call")
|
|
37
|
+
print(" 'ret' - return from current function")
|
|
38
|
+
print(" 'l' - list source code")
|
|
39
|
+
|
|
40
|
+
dbg.run()
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
2
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
3
|
+
from pygeai.core.services.llm.model import Model
|
|
4
|
+
from pygeai.core.services.llm.providers import Provider
|
|
5
|
+
import time
|
|
6
|
+
|
|
7
|
+
manager = EmbeddingsManager()
|
|
8
|
+
|
|
9
|
+
inputs = ["This text will be cached for faster repeated access"]
|
|
10
|
+
|
|
11
|
+
configuration = EmbeddingConfiguration(
|
|
12
|
+
inputs=inputs,
|
|
13
|
+
model=f"{Provider.OPENAI}/{Model.OpenAI.TEXT_EMBEDDING_3_SMALL}",
|
|
14
|
+
cache=True
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
print("First request (not cached)...")
|
|
18
|
+
start = time.time()
|
|
19
|
+
embeddings1 = manager.generate_embeddings(configuration)
|
|
20
|
+
elapsed1 = time.time() - start
|
|
21
|
+
print(f"Time: {elapsed1:.3f}s")
|
|
22
|
+
print(f"Cost: ${embeddings1.usage.total_cost} {embeddings1.usage.currency}")
|
|
23
|
+
|
|
24
|
+
print("\nSecond request (should be cached)...")
|
|
25
|
+
start = time.time()
|
|
26
|
+
embeddings2 = manager.generate_embeddings(configuration)
|
|
27
|
+
elapsed2 = time.time() - start
|
|
28
|
+
print(f"Time: {elapsed2:.3f}s")
|
|
29
|
+
print(f"Cost: ${embeddings2.usage.total_cost} {embeddings2.usage.currency}")
|
|
30
|
+
|
|
31
|
+
print(f"\nCache speedup: {elapsed1/elapsed2:.2f}x faster")
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
2
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
3
|
+
from pygeai.core.services.llm.model import Model
|
|
4
|
+
from pygeai.core.services.llm.providers import Provider
|
|
5
|
+
|
|
6
|
+
manager = EmbeddingsManager()
|
|
7
|
+
|
|
8
|
+
document_inputs = [
|
|
9
|
+
"Machine learning is a subset of artificial intelligence",
|
|
10
|
+
"Neural networks are inspired by the human brain"
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
configuration = EmbeddingConfiguration(
|
|
14
|
+
inputs=document_inputs,
|
|
15
|
+
model=f"{Provider.COHERE}/{Model.Cohere.EMBED_ENGLISH_V3_0}",
|
|
16
|
+
input_type="search_document",
|
|
17
|
+
timeout=600,
|
|
18
|
+
cache=False
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
embeddings = manager.generate_embeddings(configuration)
|
|
22
|
+
|
|
23
|
+
print(f"Model: {embeddings.model}")
|
|
24
|
+
print(f"Input type: search_document")
|
|
25
|
+
print(f"Documents embedded: {len(embeddings.data)}")
|
|
26
|
+
print(f"Usage - Prompt tokens: {embeddings.usage.prompt_tokens}")
|
|
27
|
+
print(f"Usage - Total cost: ${embeddings.usage.total_cost} {embeddings.usage.currency}")
|
|
28
|
+
|
|
29
|
+
query_input = ["What is neural network?"]
|
|
30
|
+
|
|
31
|
+
query_configuration = EmbeddingConfiguration(
|
|
32
|
+
inputs=query_input,
|
|
33
|
+
model=f"{Provider.COHERE}/{Model.Cohere.EMBED_ENGLISH_V3_0}",
|
|
34
|
+
input_type="search_query",
|
|
35
|
+
timeout=600,
|
|
36
|
+
cache=False
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
query_embeddings = manager.generate_embeddings(query_configuration)
|
|
40
|
+
print(f"\nQuery embedded with input_type: search_query")
|
|
41
|
+
print(f"Usage - Total cost: ${query_embeddings.usage.total_cost} {query_embeddings.usage.currency}")
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
2
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
3
|
+
from pygeai.core.services.llm.model import Model
|
|
4
|
+
from pygeai.core.services.llm.providers import Provider
|
|
5
|
+
|
|
6
|
+
manager = EmbeddingsManager()
|
|
7
|
+
|
|
8
|
+
inputs = ["Text to embed with base64 encoding"]
|
|
9
|
+
|
|
10
|
+
configuration = EmbeddingConfiguration(
|
|
11
|
+
inputs=inputs,
|
|
12
|
+
model=f"{Provider.OPENAI}/{Model.OpenAI.TEXT_EMBEDDING_3_SMALL}",
|
|
13
|
+
encoding_format="base64",
|
|
14
|
+
dimensions=512,
|
|
15
|
+
user=None,
|
|
16
|
+
input_type=None,
|
|
17
|
+
timeout=600,
|
|
18
|
+
cache=False
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
embeddings = manager.generate_embeddings(configuration)
|
|
22
|
+
|
|
23
|
+
print(f"Model: {embeddings.model}")
|
|
24
|
+
print(f"Encoding format: base64")
|
|
25
|
+
print(f"Embedding (base64 encoded, first 100 chars): {embeddings.data[0].embedding[:100]}")
|
|
26
|
+
print(f"Type of embedding: {type(embeddings.data[0].embedding)}")
|
|
27
|
+
print(f"Usage - Total cost: ${embeddings.usage.total_cost} {embeddings.usage.currency}")
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
2
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
3
|
+
from pygeai.core.services.llm.model import Model
|
|
4
|
+
from pygeai.core.services.llm.providers import Provider
|
|
5
|
+
|
|
6
|
+
manager = EmbeddingsManager()
|
|
7
|
+
|
|
8
|
+
inputs = [
|
|
9
|
+
"The quick brown fox jumps over the lazy dog",
|
|
10
|
+
"Python is a high-level programming language"
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
configuration = EmbeddingConfiguration(
|
|
14
|
+
inputs=inputs,
|
|
15
|
+
model=f"{Provider.OPENAI}/{Model.OpenAI.TEXT_EMBEDDING_3_SMALL}",
|
|
16
|
+
encoding_format="float",
|
|
17
|
+
dimensions=1536,
|
|
18
|
+
user=None,
|
|
19
|
+
input_type=None,
|
|
20
|
+
timeout=600,
|
|
21
|
+
cache=False
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
embeddings = manager.generate_embeddings(configuration)
|
|
25
|
+
|
|
26
|
+
print(f"Model: {embeddings.model}")
|
|
27
|
+
print(f"Total embeddings generated: {len(embeddings.data)}")
|
|
28
|
+
print(f"Embedding dimensions: {len(embeddings.data[0].embedding)}")
|
|
29
|
+
print(f"Usage - Prompt tokens: {embeddings.usage.prompt_tokens}")
|
|
30
|
+
print(f"Usage - Total cost: ${embeddings.usage.total_cost} {embeddings.usage.currency}")
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from pygeai.core.embeddings.managers import EmbeddingsManager
|
|
2
|
+
from pygeai.core.embeddings.models import EmbeddingConfiguration
|
|
3
|
+
from pygeai.core.services.llm.model import Model
|
|
4
|
+
from pygeai.core.services.llm.providers import Provider
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
def cosine_similarity(vec1, vec2):
|
|
8
|
+
"""Calculate cosine similarity between two vectors."""
|
|
9
|
+
vec1 = np.array(vec1)
|
|
10
|
+
vec2 = np.array(vec2)
|
|
11
|
+
return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
|
|
12
|
+
|
|
13
|
+
manager = EmbeddingsManager()
|
|
14
|
+
|
|
15
|
+
texts = [
|
|
16
|
+
"The cat sits on the mat",
|
|
17
|
+
"A feline rests on a rug",
|
|
18
|
+
"Python is a programming language"
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
configuration = EmbeddingConfiguration(
|
|
22
|
+
inputs=texts,
|
|
23
|
+
model=f"{Provider.OPENAI}/{Model.OpenAI.TEXT_EMBEDDING_3_SMALL}",
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
embeddings = manager.generate_embeddings(configuration)
|
|
27
|
+
|
|
28
|
+
embedding_vectors = [emb.embedding for emb in embeddings.data]
|
|
29
|
+
|
|
30
|
+
print("Cosine Similarity Matrix:")
|
|
31
|
+
print("=" * 60)
|
|
32
|
+
for i, text1 in enumerate(texts):
|
|
33
|
+
for j, text2 in enumerate(texts):
|
|
34
|
+
if i <= j:
|
|
35
|
+
similarity = cosine_similarity(embedding_vectors[i], embedding_vectors[j])
|
|
36
|
+
print(f"\nText {i+1} vs Text {j+1}: {similarity:.4f}")
|
|
37
|
+
if i != j:
|
|
38
|
+
print(f" '{text1[:40]}...'")
|
|
39
|
+
print(f" '{text2[:40]}...'")
|
|
40
|
+
|
|
41
|
+
print(f"\n{'='*60}")
|
|
42
|
+
print(f"Total cost: ${embeddings.usage.total_cost} {embeddings.usage.currency}")
|
|
File without changes
|