pygeai 0.6.0b12__py3-none-any.whl → 0.6.0b14__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.
@@ -109,6 +109,383 @@ The required API keys depend on whether you're creating a new project or migrati
109
109
  .. warning::
110
110
  When migrating to an existing project (using ``--to-project-id``), you MUST provide ``--to-api-key``. This is a project scope token that has write access to the destination project.
111
111
 
112
+ Interactive Mode
113
+ ----------------
114
+
115
+ The migration tool provides an **interactive mode** that guides you through the migration process with step-by-step prompts. This mode is ideal when:
116
+
117
+ - You're new to the migration tool and want guidance
118
+ - You don't know the exact IDs of resources to migrate
119
+ - You want to browse and select resources interactively
120
+ - You prefer a wizard-style interface over command-line arguments
121
+
122
+ Invoking Interactive Mode
123
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
124
+
125
+ To start the interactive migration wizard, use the ``--interactive`` or ``-i`` flag:
126
+
127
+ .. code-block:: shell
128
+
129
+ geai migrate clone-project --interactive
130
+
131
+ or shorter:
132
+
133
+ .. code-block:: shell
134
+
135
+ geai migrate clone-project -i
136
+
137
+ Interactive Mode Walkthrough
138
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
139
+
140
+ When you launch interactive mode, the wizard will guide you through the following steps:
141
+
142
+ **Step 1: Migration Type Selection**
143
+
144
+ Choose whether you're migrating within the same instance or to a different instance:
145
+
146
+ .. code-block:: text
147
+
148
+ ================================================================================
149
+ PROJECT MIGRATION ASSISTANT
150
+ ================================================================================
151
+
152
+ Migration type (1=same instance, 2=cross instance):
153
+
154
+ - Option ``1``: Migrate within the same GEAI instance (destination instance will be same as source)
155
+ - Option ``2``: Migrate to a different GEAI instance (you'll provide separate destination credentials)
156
+
157
+ **Step 2: Source Configuration**
158
+
159
+ Provide your source project credentials:
160
+
161
+ .. code-block:: text
162
+
163
+ --- Source Configuration ---
164
+ Source API key: [enter your source API key]
165
+ Source instance URL: [enter source instance URL, e.g., https://api.dev.example.ai]
166
+ Source project ID: [enter source project ID]
167
+
168
+ The wizard will automatically retrieve your source organization ID from the API token.
169
+
170
+ **Step 3: Project Creation or Selection**
171
+
172
+ Decide whether to create a new destination project or use an existing one:
173
+
174
+ .. code-block:: text
175
+
176
+ Create new destination project? (y/n):
177
+
178
+ - If you choose ``y`` (yes): You'll provide organization API keys, project name, and admin email to create a new project
179
+ - If you choose ``n`` (no): You'll provide an existing destination project ID
180
+
181
+ **For new project creation:**
182
+
183
+ .. code-block:: text
184
+
185
+ Source organization API key: [enter organization scope API key]
186
+ Destination organization API key: [same as source for same instance, or enter different key]
187
+ New project name: [enter name for new project]
188
+ Admin email: [enter admin email for project]
189
+
190
+ **For existing project:**
191
+
192
+ .. code-block:: text
193
+
194
+ Destination project ID: [enter existing project ID]
195
+
196
+ **Step 4: Destination Configuration**
197
+
198
+ If you selected cross-instance migration (option 2) or using an existing project, provide destination details:
199
+
200
+ .. code-block:: text
201
+
202
+ --- Destination Configuration ---
203
+ Destination instance URL: [enter destination URL if cross-instance]
204
+ Destination API key: [enter project API key for destination]
205
+
206
+ **Step 5: Resource Type Selection**
207
+
208
+ Select which types of resources you want to migrate:
209
+
210
+ .. code-block:: text
211
+
212
+ --- Resource Type Selection ---
213
+ Which resource types do you want to migrate?
214
+ 1. Agents
215
+ 2. Tools
216
+ 3. Agentic Processes
217
+ 4. Tasks
218
+ 5. RAG Assistants
219
+ 6. Files
220
+ 7. Usage Limits
221
+ 8. Secrets
222
+
223
+ Select resource types (comma-separated numbers, or empty for all):
224
+
225
+ - Enter specific numbers (e.g., ``1,2,5`` for Agents, Tools, and RAG Assistants)
226
+ - Press Enter without typing anything to migrate **all** resource types
227
+
228
+ **Step 6: Resource Selection**
229
+
230
+ For each selected resource type, the wizard fetches available resources and displays an interactive menu:
231
+
232
+ .. code-block:: text
233
+
234
+ --- Retrieving Available Resources ---
235
+
236
+ Available agents:
237
+ 0. Cancel (don't migrate this resource type)
238
+ 1. Customer Support Agent (ID: agent-abc-123)
239
+ 2. Data Analysis Agent (ID: agent-def-456)
240
+ 3. Code Review Agent (ID: agent-ghi-789)
241
+
242
+ Select agents (comma-separated numbers, or empty for all):
243
+
244
+ Selection options:
245
+
246
+ - Press **Enter** without typing: Migrate **all** resources of this type
247
+ - Enter **0**: Skip this resource type entirely
248
+ - Enter **specific numbers**: Migrate only selected resources (e.g., ``1,3`` to migrate items 1 and 3)
249
+
250
+ This process repeats for each resource type you selected in Step 5.
251
+
252
+ **Step 7: Migration Summary and Confirmation**
253
+
254
+ Review your migration configuration before execution:
255
+
256
+ .. code-block:: text
257
+
258
+ --- Migration Summary ---
259
+ Source: https://api.dev.example.ai / Project: source-project-123
260
+ Destination: https://api.prod.example.ai / Project: Production Release
261
+ Resources: agents, tools, rag_assistants
262
+
263
+ Stop migration on first error? (Y/n):
264
+
265
+ - Enter ``Y`` or press Enter to stop migration if any resource fails
266
+ - Enter ``n`` to continue migrating remaining resources even if some fail
267
+
268
+ .. code-block:: text
269
+
270
+ Proceed with migration? (y/n):
271
+
272
+ - Enter ``y`` to start the migration
273
+ - Enter ``n`` to cancel and exit without making changes
274
+
275
+ **Step 8: Migration Execution**
276
+
277
+ The migration proceeds with real-time progress updates:
278
+
279
+ .. code-block:: text
280
+
281
+ ============================================================
282
+ Migration Progress: 0/15 completed
283
+ ============================================================
284
+
285
+ [1/15] Migrating agent 'Customer Support Agent'...
286
+ ✓ Successfully migrated agent 'Customer Support Agent'
287
+
288
+ [2/15] Migrating agent 'Data Analysis Agent'...
289
+ ✓ Successfully migrated agent 'Data Analysis Agent'
290
+
291
+ [3/15] Migrating tool 'Database Query Tool'...
292
+ ✓ Successfully migrated tool 'Database Query Tool'
293
+
294
+ ...
295
+
296
+ ============================================================
297
+ Migration Complete: 15/15 successful
298
+ ============================================================
299
+
300
+ Interactive Mode Benefits
301
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
302
+
303
+ **1. No Need to Remember IDs**
304
+
305
+ You don't need to know resource IDs beforehand. The wizard fetches and displays all available resources with their names and IDs.
306
+
307
+ **2. Visual Resource Selection**
308
+
309
+ Browse resources in numbered menus and select exactly what you want to migrate.
310
+
311
+ **3. Guided Configuration**
312
+
313
+ Step-by-step prompts ensure you provide all required information in the correct order.
314
+
315
+ **4. Input Validation**
316
+
317
+ The wizard validates your input at each step and prompts you to retry if something is invalid.
318
+
319
+ **5. Pre-Migration Summary**
320
+
321
+ Review all settings before execution with a clear summary of what will be migrated.
322
+
323
+ **6. Flexible Selection**
324
+
325
+ Easily mix migration strategies: migrate all agents, specific tools, all RAG assistants, etc.
326
+
327
+ **7. Error Recovery**
328
+
329
+ If you make a mistake during prompts, the wizard will ask again instead of failing the entire operation.
330
+
331
+ Interactive vs. CLI Mode Comparison
332
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
333
+
334
+ +----------------------------+---------------------------+---------------------------+
335
+ | Feature | Interactive Mode | CLI Mode |
336
+ +============================+===========================+===========================+
337
+ | **Ease of Use** | Beginner-friendly wizard | Requires knowledge of |
338
+ | | | all CLI arguments |
339
+ +----------------------------+---------------------------+---------------------------+
340
+ | **Resource Discovery** | Automatic with menus | Manual (use API or docs) |
341
+ +----------------------------+---------------------------+---------------------------+
342
+ | **Input Validation** | Real-time with retry | Fails if invalid args |
343
+ +----------------------------+---------------------------+---------------------------+
344
+ | **Automation** | Not scriptable | Fully scriptable |
345
+ +----------------------------+---------------------------+---------------------------+
346
+ | **Best For** | One-time migrations, | CI/CD pipelines, |
347
+ | | exploration, learning | automation, scripting |
348
+ +----------------------------+---------------------------+---------------------------+
349
+
350
+ When to Use Interactive Mode
351
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
352
+
353
+ ✅ **Use Interactive Mode when:**
354
+
355
+ - You're performing a one-time migration
356
+ - You're unsure of exact resource IDs or names
357
+ - You want to browse available resources before selecting
358
+ - You're learning how migration works
359
+ - You prefer guided prompts over memorizing command syntax
360
+
361
+ ❌ **Use CLI Mode instead when:**
362
+
363
+ - You're automating migrations in scripts or CI/CD pipelines
364
+ - You already know exact resource IDs to migrate
365
+ - You need to run the same migration multiple times
366
+ - You want to version control migration commands
367
+
368
+ Example Interactive Session
369
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
370
+
371
+ Here's a complete example of an interactive migration session:
372
+
373
+ .. code-block:: text
374
+
375
+ $ geai migrate clone-project -i
376
+
377
+ ================================================================================
378
+ PROJECT MIGRATION ASSISTANT
379
+ ================================================================================
380
+
381
+ Migration type (1=same instance, 2=cross instance): 2
382
+
383
+ --- Source Configuration ---
384
+ Source API key: sk_dev_abc123...
385
+ Source instance URL: https://api.dev.example.ai
386
+ Source project ID: proj-dev-001
387
+
388
+ Create new destination project? (y/n): y
389
+ Source organization API key: sk_org_dev_xyz789...
390
+ Destination organization API key: sk_org_prod_def456...
391
+ New project name: Production Release v2.0
392
+ Admin email: admin@example.com
393
+
394
+ --- Destination Configuration ---
395
+ Destination instance URL: https://api.prod.example.ai
396
+ Destination API key: (will be created after project creation)
397
+
398
+ --- Resource Type Selection ---
399
+ Which resource types do you want to migrate?
400
+ 1. Agents
401
+ 2. Tools
402
+ 3. Agentic Processes
403
+ 4. Tasks
404
+ 5. RAG Assistants
405
+ 6. Files
406
+ 7. Usage Limits
407
+ 8. Secrets
408
+
409
+ Select resource types (comma-separated numbers, or empty for all): 1,2,5
410
+
411
+ --- Retrieving Available Resources ---
412
+
413
+ Available agents:
414
+ 0. Cancel (don't migrate this resource type)
415
+ 1. Customer Support Agent (ID: agent-001)
416
+ 2. Sales Assistant (ID: agent-002)
417
+ 3. HR Onboarding Agent (ID: agent-003)
418
+
419
+ Select agents (comma-separated numbers, or empty for all):
420
+
421
+ Available tools:
422
+ 0. Cancel (don't migrate this resource type)
423
+ 1. Database Query Tool (ID: tool-001)
424
+ 2. Email Sender (ID: tool-002)
425
+ 3. Calendar Integration (ID: tool-003)
426
+
427
+ Select tools (comma-separated numbers, or empty for all): 1,3
428
+
429
+ Available RAG assistants:
430
+ 0. Cancel (don't migrate this resource type)
431
+ 1. Documentation Assistant (ID: doc-assistant-001)
432
+ 2. Code Helper (ID: code-assistant-002)
433
+
434
+ Select RAG assistants (comma-separated numbers, or empty for all):
435
+
436
+ --- Migration Summary ---
437
+ Source: https://api.dev.example.ai / Project: proj-dev-001
438
+ Destination: https://api.prod.example.ai / Project: Production Release v2.0
439
+ Resources: agents, tools, rag_assistants
440
+
441
+ Stop migration on first error? (Y/n): Y
442
+
443
+ Proceed with migration? (y/n): y
444
+
445
+ Creating new project 'Production Release v2.0'...
446
+ Project 'Production Release v2.0' created successfully with ID: proj-prod-002
447
+ Creating project API key for new project...
448
+ Project API key created successfully
449
+
450
+ ============================================================
451
+ Migration Progress: 0/7 completed
452
+ ============================================================
453
+
454
+ [1/7] Migrating agent 'Customer Support Agent'...
455
+ ✓ Successfully migrated agent 'Customer Support Agent'
456
+
457
+ [2/7] Migrating agent 'Sales Assistant'...
458
+ ✓ Successfully migrated agent 'Sales Assistant'
459
+
460
+ [3/7] Migrating agent 'HR Onboarding Agent'...
461
+ ✓ Successfully migrated agent 'HR Onboarding Agent'
462
+
463
+ [4/7] Migrating tool 'Database Query Tool'...
464
+ ✓ Successfully migrated tool 'Database Query Tool'
465
+
466
+ [5/7] Migrating tool 'Calendar Integration'...
467
+ ✓ Successfully migrated tool 'Calendar Integration'
468
+
469
+ [6/7] Migrating RAG assistant 'Documentation Assistant'...
470
+ ✓ Successfully migrated RAG assistant 'Documentation Assistant'
471
+
472
+ [7/7] Migrating RAG assistant 'Code Helper'...
473
+ ✓ Successfully migrated RAG assistant 'Code Helper'
474
+
475
+ ============================================================
476
+ Migration Complete: 7/7 successful
477
+ ============================================================
478
+
479
+ Migration completed: 7/7 successful
480
+
481
+ This example demonstrates:
482
+
483
+ - Cross-instance migration (dev to prod)
484
+ - New project creation
485
+ - Selective resource type migration (agents, tools, RAG assistants only)
486
+ - Mixed selection strategies (all agents, specific tools, all RAG assistants)
487
+ - Successful completion with progress tracking
488
+
112
489
  Basic Usage
113
490
  -----------
114
491
 
@@ -310,7 +687,12 @@ Command: ``geai migrate clone-project``
310
687
 
311
688
  **Description:** Clone a project with selective or complete resource migration.
312
689
 
313
- **Required Arguments:**
690
+ **Interactive Mode Flag:**
691
+
692
+ ``--interactive`` or ``-i``
693
+ Launch the interactive migration wizard with step-by-step prompts. When this flag is used, all other arguments are ignored and the wizard will prompt for all required information. See the :ref:`Interactive Mode` section for details.
694
+
695
+ **Required Arguments (CLI Mode):**
314
696
 
315
697
  ``--from-api-key <key>``
316
698
  Project scope API key for the source GEAI instance (for migrating resources)
@@ -425,12 +807,14 @@ Best Practices
425
807
  --------------
426
808
 
427
809
  1. **Test First**: Always test migrations in a development environment before production
428
- 2. **Use --all for Complete Clones**: When creating backups or full clones, use ``--all``
429
- 3. **Verify Credentials**: Double-check API keys and instance URLs before running migrations
430
- 4. **Monitor Progress**: Watch the console output for discovery counts and migration status
431
- 5. **Check Results**: Review the migration result summary after completion
432
- 6. **Incremental Migration**: For large projects, consider migrating resource types incrementally
433
- 7. **Document Migrations**: Keep track of what was migrated and when
810
+ 2. **Start with Interactive Mode**: If you're new to migrations or unsure about resource IDs, use ``--interactive`` mode for guided assistance
811
+ 3. **Use --all for Complete Clones**: When creating backups or full clones, use ``--all``
812
+ 4. **Verify Credentials**: Double-check API keys and instance URLs before running migrations
813
+ 5. **Monitor Progress**: Watch the console output for discovery counts and migration status
814
+ 6. **Check Results**: Review the migration result summary after completion
815
+ 7. **Incremental Migration**: For large projects, consider migrating resource types incrementally
816
+ 8. **Document Migrations**: Keep track of what was migrated and when
817
+ 9. **Automate Repeated Migrations**: Once you know the exact resources and IDs, convert interactive sessions to CLI commands for repeatability
434
818
 
435
819
  Common Use Cases
436
820
  ----------------
@@ -22,7 +22,7 @@ from pygeai.analytics.responses import (
22
22
 
23
23
  class AnalyticsManager:
24
24
 
25
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
25
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
26
26
  self.__analytics_client = AnalyticsClient(api_key=api_key, base_url=base_url, alias=alias)
27
27
 
28
28
  def get_agents_created_and_modified(
@@ -20,7 +20,7 @@ from pygeai.core.common.exceptions import MissingRequirementException, APIError
20
20
 
21
21
  class AssistantManager:
22
22
 
23
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
23
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
24
24
  self.__assistant_client = AssistantClient(api_key, base_url, alias)
25
25
  self.__chat_client = ChatClient(api_key, base_url, alias)
26
26
  self.__rag_client = RAGAssistantClient(api_key, base_url, alias)
pygeai/chat/managers.py CHANGED
@@ -10,7 +10,7 @@ from pygeai.core.responses import ChatResponse, ProviderResponse
10
10
 
11
11
  class ChatManager:
12
12
 
13
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
13
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
14
14
  self.__chat_client = ChatClient(api_key, base_url, alias)
15
15
 
16
16
  def chat_completion(
@@ -63,8 +63,9 @@ def get_agents_created_and_modified(option_list: list):
63
63
  if option_flag.name == "end_date":
64
64
  end_date = option_arg
65
65
 
66
- if not (start_date and end_date):
67
- raise MissingRequirementException("Cannot retrieve agents created and modified without start-date and end-date")
66
+ if not start_date or not end_date:
67
+ start_date, end_date = get_default_date_range()
68
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
68
69
 
69
70
  manager = AnalyticsManager()
70
71
  result = manager.get_agents_created_and_modified(start_date, end_date)
@@ -86,8 +87,9 @@ def get_total_requests_per_day(option_list: list):
86
87
  if option_flag.name == "agent_name":
87
88
  agent_name = option_arg
88
89
 
89
- if not (start_date and end_date):
90
- raise MissingRequirementException("Cannot retrieve total requests per day without start-date and end-date")
90
+ if not start_date or not end_date:
91
+ start_date, end_date = get_default_date_range()
92
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
91
93
 
92
94
  manager = AnalyticsManager()
93
95
  result = manager.get_total_requests_per_day(start_date, end_date, agent_name)
@@ -108,8 +110,9 @@ def get_total_cost(option_list: list):
108
110
  if option_flag.name == "end_date":
109
111
  end_date = option_arg
110
112
 
111
- if not (start_date and end_date):
112
- raise MissingRequirementException("Cannot retrieve total cost without start-date and end-date")
113
+ if not start_date or not end_date:
114
+ start_date, end_date = get_default_date_range()
115
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
113
116
 
114
117
  manager = AnalyticsManager()
115
118
  result = manager.get_total_cost(start_date, end_date)
@@ -128,8 +131,9 @@ def get_average_cost_per_request(option_list: list):
128
131
  if option_flag.name == "end_date":
129
132
  end_date = option_arg
130
133
 
131
- if not (start_date and end_date):
132
- raise MissingRequirementException("Cannot retrieve average cost per request without start-date and end-date")
134
+ if not start_date or not end_date:
135
+ start_date, end_date = get_default_date_range()
136
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
133
137
 
134
138
  manager = AnalyticsManager()
135
139
  result = manager.get_average_cost_per_request(start_date, end_date)
@@ -148,8 +152,9 @@ def get_total_tokens(option_list: list):
148
152
  if option_flag.name == "end_date":
149
153
  end_date = option_arg
150
154
 
151
- if not (start_date and end_date):
152
- raise MissingRequirementException("Cannot retrieve total tokens without start-date and end-date")
155
+ if not start_date or not end_date:
156
+ start_date, end_date = get_default_date_range()
157
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
153
158
 
154
159
  manager = AnalyticsManager()
155
160
  result = manager.get_total_tokens(start_date, end_date)
@@ -168,8 +173,9 @@ def get_overall_error_rate(option_list: list):
168
173
  if option_flag.name == "end_date":
169
174
  end_date = option_arg
170
175
 
171
- if not (start_date and end_date):
172
- raise MissingRequirementException("Cannot retrieve overall error rate without start-date and end-date")
176
+ if not start_date or not end_date:
177
+ start_date, end_date = get_default_date_range()
178
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
173
179
 
174
180
  manager = AnalyticsManager()
175
181
  result = manager.get_overall_error_rate(start_date, end_date)
@@ -188,8 +194,9 @@ def get_top_agents_by_requests(option_list: list):
188
194
  if option_flag.name == "end_date":
189
195
  end_date = option_arg
190
196
 
191
- if not (start_date and end_date):
192
- raise MissingRequirementException("Cannot retrieve top agents by requests without start-date and end-date")
197
+ if not start_date or not end_date:
198
+ start_date, end_date = get_default_date_range()
199
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
193
200
 
194
201
  manager = AnalyticsManager()
195
202
  result = manager.get_top_10_agents_by_requests(start_date, end_date)
@@ -210,8 +217,9 @@ def get_total_active_users(option_list: list):
210
217
  if option_flag.name == "end_date":
211
218
  end_date = option_arg
212
219
 
213
- if not (start_date and end_date):
214
- raise MissingRequirementException("Cannot retrieve total active users without start-date and end-date")
220
+ if not start_date or not end_date:
221
+ start_date, end_date = get_default_date_range()
222
+ Console.write_stdout(f"Using default date range: {start_date} to {end_date}")
215
223
 
216
224
  manager = AnalyticsManager()
217
225
  result = manager.get_total_active_users(start_date, end_date)
pygeai/cli/geai.py CHANGED
@@ -45,8 +45,13 @@ def main() -> int:
45
45
 
46
46
  :return: int - Exit code indicating success or error.
47
47
  """
48
- driver = CLIDriver()
49
- return driver.main()
48
+ try:
49
+ driver = CLIDriver()
50
+ return driver.main()
51
+ except MissingRequirementException as e:
52
+ error_msg = ErrorHandler.handle_missing_requirement(str(e))
53
+ Console.write_stderr(error_msg)
54
+ return ExitCode.MISSING_REQUIREMENT
50
55
 
51
56
 
52
57
  class CLIDriver:
@@ -110,6 +110,8 @@ def get_session(alias: str = None) -> Session:
110
110
  if _session is None:
111
111
  if not alias:
112
112
  alias = "default"
113
+
114
+ _validate_alias(alias, allow_missing_default=True)
113
115
 
114
116
  _session = Session(
115
117
  api_key=settings.get_api_key(alias),
@@ -120,6 +122,8 @@ def get_session(alias: str = None) -> Session:
120
122
  alias=alias,
121
123
  )
122
124
  elif _session is not None and alias:
125
+ _validate_alias(alias, allow_missing_default=False)
126
+
123
127
  _session.alias = alias
124
128
  _session.api_key = settings.get_api_key(alias)
125
129
  _session.base_url = settings.get_base_url(alias)
@@ -135,3 +139,13 @@ def get_session(alias: str = None) -> Session:
135
139
  except ValueError as e:
136
140
  logger.warning(f"Warning: API_KEY and/or BASE_URL not set. {e}")
137
141
  sys.stdout.write("Warning: API_KEY and/or BASE_URL not set. Please run geai configure to set them up.\n")
142
+
143
+
144
+ def _validate_alias(alias: str, allow_missing_default: bool = False):
145
+ available_aliases = settings.list_aliases()
146
+ if alias not in available_aliases:
147
+ if allow_missing_default and alias == "default":
148
+ return
149
+ raise MissingRequirementException(
150
+ f"The profile '{alias}' doesn't exist. Use 'geai configure --list' to see available profiles."
151
+ )
@@ -10,7 +10,7 @@ from pygeai.core.handlers import ErrorHandler
10
10
 
11
11
  class EmbeddingsManager:
12
12
 
13
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
13
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
14
14
  self.__client = EmbeddingsClient(api_key, base_url, alias)
15
15
 
16
16
  def generate_embeddings(
@@ -24,7 +24,7 @@ class FileManager:
24
24
  self,
25
25
  api_key: str = None,
26
26
  base_url: str = None,
27
- alias: str = "default",
27
+ alias: str = None,
28
28
  organization_id: str = None,
29
29
  project_id: str = None
30
30
  ):
@@ -8,7 +8,7 @@ from pygeai.core.rerank.models import RerankResponse
8
8
 
9
9
  class RerankManager:
10
10
 
11
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
11
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
12
12
  self.__client = RerankClient(api_key, base_url, alias)
13
13
 
14
14
  def rerank_chunks(
@@ -7,7 +7,7 @@ from pygeai.core.utils.validators import validate_status_code
7
7
 
8
8
  class EvaluationClient(BaseClient):
9
9
 
10
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default", eval_url: str = None, *,
10
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None, eval_url: str = None, *,
11
11
  access_token: str = None, project_id: str = None):
12
12
  super().__init__(api_key, base_url, alias, access_token=access_token, project_id=project_id)
13
13
  eval_url = self.session.eval_url if not eval_url else eval_url
pygeai/lab/managers.py CHANGED
@@ -22,7 +22,7 @@ from pygeai.lab.tools.mappers import ToolMapper
22
22
 
23
23
  class AILabManager:
24
24
 
25
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default", project_id: str = None):
25
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None, project_id: str = None):
26
26
  self.__agent_client = AgentClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
27
27
  self.__tool_client = ToolClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
28
28
  self.__reasoning_strategy_client = ReasoningStrategyClient(api_key=api_key, base_url=base_url, alias=alias, project_id=project_id)
@@ -26,7 +26,7 @@ class UsageLimitManager:
26
26
  self,
27
27
  api_key: str = None,
28
28
  base_url: str = None,
29
- alias: str = "default",
29
+ alias: str = None,
30
30
  organization_id: str = None
31
31
  ):
32
32
  self.__client = UsageLimitClient(api_key, base_url, alias)
@@ -19,7 +19,7 @@ class OrganizationManager:
19
19
  If errors are found in the response, they are processed to raise an APIError.
20
20
  """
21
21
 
22
- def __init__(self, api_key: str = None, base_url: str = None, alias: str = "default"):
22
+ def __init__(self, api_key: str = None, base_url: str = None, alias: str = None):
23
23
  self.__organization_client = OrganizationClient(api_key=api_key, base_url=base_url, alias=alias)
24
24
 
25
25
  def get_assistant_list(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygeai
3
- Version: 0.6.0b12
3
+ Version: 0.6.0b14
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
@@ -110,7 +110,7 @@ pygeai/_docs/source/content/chat_gui.rst,sha256=0nnQFh_m4V-TqbeZXTKYMzU6gmPTOwRH
110
110
  pygeai/_docs/source/content/cli.rst,sha256=WZFfxzmvFTmoi88uZO6VA96b5bUVApJ8QkXmCBPRrnI,5501
111
111
  pygeai/_docs/source/content/debugger.rst,sha256=dc3mj6YxmBlyiOKk67AmFzfLkj7P4VWzU_j2R83zTCw,15112
112
112
  pygeai/_docs/source/content/intro.rst,sha256=nRoIXypN6xGN9kaqTJM5HrhE0LPn7bnk0CDFeRixito,4532
113
- pygeai/_docs/source/content/migration.rst,sha256=L19u9CanjcAt5ZVcpombvjt7I8ABcisVIKIUQtsYCGM,19898
113
+ pygeai/_docs/source/content/migration.rst,sha256=4778of_8oDGx_LEzuPuGfLncj6M_ANkeh7qpq__rW0o,33448
114
114
  pygeai/_docs/source/content/modules.rst,sha256=MufbaO6dfESPq2yqhk9xpCsfSMdhNRcTuODE6LW1HxE,78
115
115
  pygeai/_docs/source/content/quickstart.rst,sha256=bsz8ZwTJTWlznnPNq3XJJuOXuV63-7UKqur2YHGD8No,4159
116
116
  pygeai/_docs/source/content/samples.rst,sha256=BfRzjBDVgiegbW1OPczZvq1LvS-aHGCH-zDmbX6mNPI,12488
@@ -141,13 +141,13 @@ pygeai/admin/endpoints.py,sha256=Osi8UIBhrEzKlTLF2a-q2boDUl0XMR3lQ8sDrz72TL0,747
141
141
  pygeai/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  pygeai/analytics/clients.py,sha256=MbLRZUR-ONP6RJ2lgitLhh6iRA9yvI8M1GgJR8Q7V7c,18874
143
143
  pygeai/analytics/endpoints.py,sha256=qlVYc-D12Cpv6cn8x5cZTACRC1_qkgAss85ACVdxSLw,5626
144
- pygeai/analytics/managers.py,sha256=nt9ZYUh9lbnhRmz_PZwYxsWXUxWCIRVGrqsviHofBF4,26218
144
+ pygeai/analytics/managers.py,sha256=PhwcOBnWtJtPF1Jh8V9ITcsC5jlt6YNEI890Zejmmxk,26213
145
145
  pygeai/analytics/mappers.py,sha256=enenIBwJHHqPAyAvo2juro4TjXAtSAA885EnbzWDlIE,10893
146
146
  pygeai/analytics/responses.py,sha256=OWb_kkwxwa--dJQo8W3_2PtZhdFJAPpwrbvb2qdEajU,4813
147
147
  pygeai/assistant/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
148
  pygeai/assistant/clients.py,sha256=gGhALWddo30SM7mvoDe2TM9cVQrJ8RzoI4LVQ8ov9VQ,9856
149
149
  pygeai/assistant/endpoints.py,sha256=7LuXWm0-sbrmHsngqW63wuk37K24wcMLinmJ6HdSimg,1026
150
- pygeai/assistant/managers.py,sha256=aQxJ0QtZjTfeQXdwYBDc7oJA2LwPSFUcJOeoihCe8uQ,34632
150
+ pygeai/assistant/managers.py,sha256=pc_1HVUhReavbKFD2W445abGyakWzeyOn9nz3sx1M94,34627
151
151
  pygeai/assistant/mappers.py,sha256=oSx_k1edknbKGlASke5ASzKEekG613TepVQRm1ecPOc,5915
152
152
  pygeai/assistant/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
153
  pygeai/assistant/data/clients.py,sha256=PeSYxbHti8PIdImV4-rhcTWlOvj2nedGX21ulXZi3wQ,660
@@ -167,20 +167,20 @@ pygeai/chat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  pygeai/chat/clients.py,sha256=-PovdRQnwpsHtqoH0UNyAvx8XhDm8xLcZyvTBmsqhNc,19829
168
168
  pygeai/chat/endpoints.py,sha256=r_zvsL5UIqnqhz9I0CG0eQSKV-egwx6EKdaZXj-HndA,343
169
169
  pygeai/chat/iris.py,sha256=-9pDHQpWhR_PvbZ6rD8eMPFk46PI9sCdPQ9aAyvSexs,413
170
- pygeai/chat/managers.py,sha256=f0BGfu9EF0G8rUyARslZi0pyDTL2yQadav0taCljI_I,3114
170
+ pygeai/chat/managers.py,sha256=XVnO9yGlS1SpnHXsmzwO2hizt4pKXrDM29cE-3pfIk8,3109
171
171
  pygeai/chat/session.py,sha256=k7Y6rr9x7CfAGDI-Vt3c6eGLQX57YZ74lEVJGzwwdzw,1193
172
172
  pygeai/chat/settings.py,sha256=-B2fEemZLifdsf7_7xNmWuFZYzL-yRqefivBmv3w8j8,124
173
173
  pygeai/chat/ui.py,sha256=-xvjCzBwWlvyq-C0kN2YPczl4Q0alyJamXULOlGjKRA,34595
174
174
  pygeai/cli/__init__.py,sha256=P7_xZm3j6DdYnVTanQClJjfyW5co5ovNoiizgd0NMLo,95
175
175
  pygeai/cli/__main__.py,sha256=2RkQaX48mS2keTpv3-9rxk5dw35PL_deqxcKUUNhp6E,154
176
176
  pygeai/cli/error_handler.py,sha256=Lw28yRk0mBvwMpuYrfbYV87g_AHoiidZo9SakoOZva4,5745
177
- pygeai/cli/geai.py,sha256=JosBT-BjcbRNStFfz4K2uJgbHCZW9aPOj15KBTGjPlY,9090
177
+ pygeai/cli/geai.py,sha256=cAoJLcjFkfCVmzQhXiO5TpUhs8OtBJ3JZ6mswZN0vRY,9304
178
178
  pygeai/cli/geai_proxy.py,sha256=BSoeh32fhATxbsAA_B92HKDBiLgfejEQ0XwXfeOk49g,13356
179
179
  pygeai/cli/install_man.py,sha256=DjZ3k05sKSzpLFqsU4LHz1b37NHLVdOvS6oZihdBSis,3794
180
180
  pygeai/cli/parsers.py,sha256=0Y38zQ9tG9rqVspr-ksV6LrC0Ynt8uBWbvae89HAWe8,4716
181
181
  pygeai/cli/commands/__init__.py,sha256=rWx5Qmo-CqTS41m6ROHX0j1NnWFVpj_DF_ORQS0AaZw,1808
182
182
  pygeai/cli/commands/admin.py,sha256=LDxUrq9qGAswT4HbaN_c_ovVKbgGct7ffjXA8zVYjWY,5833
183
- pygeai/cli/commands/analytics.py,sha256=IvGQ9eBaXKyp3f1rJyZBkINmXHcITSwmU_SNaptrl3g,19710
183
+ pygeai/cli/commands/analytics.py,sha256=_EJ1Opg4yvYrl-N11zpa-sdOtEEwQwQKZP1eOvPBeOQ,19949
184
184
  pygeai/cli/commands/assistant.py,sha256=fQ_El6_BmFDpFjm_gPxzWk7bOzhimhiTwG8K0UpcxDo,18711
185
185
  pygeai/cli/commands/auth.py,sha256=w1XIcTYh7SQ4keOhQiJiUJ2NFMY349K53P2BoGe2Rgc,8318
186
186
  pygeai/cli/commands/base.py,sha256=J48IjpFr5oiRpxndiSI3vtNG1pfHBlDeRDOm7QQxk_U,7836
@@ -223,7 +223,7 @@ pygeai/core/base/clients.py,sha256=sIO5TExfeSMmRp06q1cF9iuP3YywGgzZczu7xSgyFFY,2
223
223
  pygeai/core/base/mappers.py,sha256=u5_UkRPPQ9vUQQANgmOHBbaaxtK77RNTTI2KoQafEDw,17793
224
224
  pygeai/core/base/models.py,sha256=_h62nnMhJXr1BLNoaldT4d9oqCTSistfF3D2LQ3bvlg,380
225
225
  pygeai/core/base/responses.py,sha256=k-mrzNO_AtEsGTUJnyRT76FJ7gfYxQ_SAhB8MBNqPZI,763
226
- pygeai/core/base/session.py,sha256=9ViCCzD4pltfK0XQKgComT-0dotnpyTtHHHc9BVN-S8,4269
226
+ pygeai/core/base/session.py,sha256=pBHzRG6qDI6Ep60npM-aEB7_f1fqAsZi7Z7s1IwOpA0,4816
227
227
  pygeai/core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
228
  pygeai/core/common/config.py,sha256=_MFT5xxQ1ae8d6l-ksC8ziQOu7WvW3fWPv6uFxrMmhU,5506
229
229
  pygeai/core/common/decorators.py,sha256=X7Tv5XBmsuS7oZHSmI95eX8UkuukKoiOiNRl5w9lgR4,1227
@@ -231,7 +231,7 @@ pygeai/core/common/exceptions.py,sha256=J_5g1jumvkSlg64peMFXfivbQv4vymUBRldxwYo7
231
231
  pygeai/core/embeddings/__init__.py,sha256=sn0wz0qNJeJy-1AQW4on62LX7bqhlVs7xcS0MaPQcW4,486
232
232
  pygeai/core/embeddings/clients.py,sha256=s-yHs99puVw4H1ShQ_jU-7c8S9BUs7WqwUavTKVpcMc,4146
233
233
  pygeai/core/embeddings/endpoints.py,sha256=b__cuKQjribog9PSUeDzwrQ0vBO4WyYahLhLjDiUpL0,98
234
- pygeai/core/embeddings/managers.py,sha256=j6sxPiQTGYXKbaV9K4_rmG6_4-16_ky2LUvfDL-24EY,3520
234
+ pygeai/core/embeddings/managers.py,sha256=F6MZtWVVe9Z55WyNGkck6Myk_rjVNMP8E4QwsZ7tWyY,3515
235
235
  pygeai/core/embeddings/mappers.py,sha256=9K5AB5FA9KWYd-MOHpZu6MkqfZxVq9ESQLf76MQdDj0,2019
236
236
  pygeai/core/embeddings/models.py,sha256=T9FehWk_0doiiZG7yMzSCK9_TBHibaocA4b8sJP7T4M,366
237
237
  pygeai/core/embeddings/responses.py,sha256=ny7iE4p-1yADcRC7U2TdhxtXI3wZ87QXrDfGGbiEvpE,674
@@ -242,7 +242,7 @@ pygeai/core/feedback/models.py,sha256=VdeVVWTQ8qc4TEPbL2XbYI4-UP2m2eh1pkBptw_do1
242
242
  pygeai/core/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
243
  pygeai/core/files/clients.py,sha256=1wxpKaq2nDjEDm7wWXAK9xFV2vXZGKlJropMEjLV1Ng,5663
244
244
  pygeai/core/files/endpoints.py,sha256=hAUC28hYVcHyEyEfoLaLae76TpuVSLexPVjLJYjSWYQ,337
245
- pygeai/core/files/managers.py,sha256=kvl5Du_N95Rm8Z-EKSXmi5puNwHjtgp5rVEtZWVPEas,8773
245
+ pygeai/core/files/managers.py,sha256=jxmnzgke4fDqUniGG4BlRBA2iagKvzzdCkuNi_7_Eio,8768
246
246
  pygeai/core/files/mappers.py,sha256=8PXXsQJZEH45yLISn_xsOZmcRUEe_F6ELkUeR1lzc-M,1462
247
247
  pygeai/core/files/models.py,sha256=QOLV5kUrHOvhJXzkoFqNQX4qmVPLy6KKBk6u7oE5ttU,438
248
248
  pygeai/core/files/responses.py,sha256=O5DYgqXOtIFL0memOcWJTz258KoEjLq5e1Yw9pgRJ7g,435
@@ -256,7 +256,7 @@ pygeai/core/plugins/models.py,sha256=SzqE-NToxbqTTMerUk_ELkI6-P6KNIDJY_AOZx0-PTU
256
256
  pygeai/core/rerank/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
257
  pygeai/core/rerank/clients.py,sha256=gmUxcQFplByLadLafrq31dEBp8lqzXTktW3niHBN134,1010
258
258
  pygeai/core/rerank/endpoints.py,sha256=PZcA1i73fyGbpnbpWYr1-gHc6zy7L60b_E8sMLwsXw8,85
259
- pygeai/core/rerank/managers.py,sha256=MdfKTQnwWjduBa2gjXDq_OErgXH_bNZfNUjLCARpZwc,2043
259
+ pygeai/core/rerank/managers.py,sha256=FHGxD0h1fct1RgJlysVG5kbNEUuLKeKGdJA73zbG8fk,2038
260
260
  pygeai/core/rerank/mappers.py,sha256=Jx8PAymebA2TPxGssaKAj4eS0OVsKJqecntAugRO9ww,957
261
261
  pygeai/core/rerank/models.py,sha256=WLE-waHk2glKSl1xx9EpmE1k4bva7c14jjraaWuQ5Uk,430
262
262
  pygeai/core/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -275,7 +275,7 @@ pygeai/core/utils/validators.py,sha256=LoDrO5z0K8_axMdoMHGZZHlxdIFQWnzC9L7RbEQFI
275
275
  pygeai/dbg/__init__.py,sha256=97HEKO5JdnaZi2qcJEXT1C-MUk0plqpSF_yQ0tUAPrw,91
276
276
  pygeai/dbg/debugger.py,sha256=juoNZplNYGdcLeYjU6Mbe5N6kj7OeZJtvHF-0byJdXg,26471
277
277
  pygeai/evaluation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
- pygeai/evaluation/clients.py,sha256=muJ7nhCTClilXc66C2f7ampM2oARttcrYQu8UN8RVaI,1064
278
+ pygeai/evaluation/clients.py,sha256=5go1j-YgfgD8b4wXJ8Vwzit1eccJ5zqsymbov8RPE-c,1059
279
279
  pygeai/evaluation/dataset/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
280
  pygeai/evaluation/dataset/clients.py,sha256=mzinQp-bZ2h6GdNJ6N2TQ9ceCkCzZINwBMyAPp6hbss,20033
281
281
  pygeai/evaluation/dataset/endpoints.py,sha256=d_llUcXNDncNrIyYgjJ_lMBnX2YPVxmeu8op3N30mLs,2922
@@ -297,7 +297,7 @@ pygeai/health/endpoints.py,sha256=UAzMcqSXZtMj4r8M8B7a_a5LT6X_jMFNsCTvcsjNTYA,71
297
297
  pygeai/lab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
298
298
  pygeai/lab/clients.py,sha256=9-eHdXtjDJ9OoNAR07aGQ9yaL2MXmg3J6T8aODWkJQ0,1229
299
299
  pygeai/lab/constants.py,sha256=ddgDnXP4GD0woi-FUJaJXzaWS3H6zmDN0B-v8utM95Q,170
300
- pygeai/lab/managers.py,sha256=XpMgWUkdcUr-pOfHToJUzLsF9m5SBNyRU1D3KzDfHEI,70756
300
+ pygeai/lab/managers.py,sha256=GLs2I28jB3mZVkpYBQhHZoojcnGTgOq7N7IVfQHorpA,70751
301
301
  pygeai/lab/models.py,sha256=sHMFXWmr_y7qrdA1MWr3zNH5V72tectz-RDxVeiaTwE,74913
302
302
  pygeai/lab/runners.py,sha256=-uaCPHpFyiKtVOxlEjPjAc9h-onSdGAcYJ5IAZPqlb0,4147
303
303
  pygeai/lab/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -329,13 +329,13 @@ pygeai/migration/tools.py,sha256=d6YtJ2xPdEAxMBiDgOXaMiXSgbUcErzN0wj0kmA9skU,620
329
329
  pygeai/organization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
330
330
  pygeai/organization/clients.py,sha256=fCOHkklrdkdjUdV6dPq0RZ9D-EpC_pXzmhsMo4R4ruE,17964
331
331
  pygeai/organization/endpoints.py,sha256=BWdpYPMJCoROoSZnXfX9ROcQRgbcDiuhopxLSZVERQg,1993
332
- pygeai/organization/managers.py,sha256=f1rJEZekmkKTOpAUGYwnm-3o_fUjzjYEfpFoCj1fk1Y,25464
332
+ pygeai/organization/managers.py,sha256=Qkh1g8MR4DzGjNp8VOFDsSUPG6KQdPWOpUqKigj5tMk,25459
333
333
  pygeai/organization/mappers.py,sha256=10JxUTdt9jBgcHfW7ViY2HdtY-UfI9t_qhX8KvuMPn0,5897
334
334
  pygeai/organization/responses.py,sha256=rVQo5N3aUE2tpJiflkFO1eG36imqJqVF3m4rRjKv7-s,1919
335
335
  pygeai/organization/limits/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
336
  pygeai/organization/limits/clients.py,sha256=hoj31n_Lxt40sCV9umxXt3Q3BzFaKSTTtdhMc-4dAZ4,15600
337
337
  pygeai/organization/limits/endpoints.py,sha256=mtca6U6l47jbbbmGc8KoXCDMnyNHtaPo8dxWVuHuUE0,2578
338
- pygeai/organization/limits/managers.py,sha256=fba8goiRXg_yWn0SyOjjhyZcL7VdzGZg-wM5V2yZwWg,14507
338
+ pygeai/organization/limits/managers.py,sha256=S7LHCQJTzTr-_-UH7abipRIv9Qnt8e-ek0U1sIGBYMU,14502
339
339
  pygeai/organization/limits/mappers.py,sha256=nINHaXOnZLnpc39PG3xf_7HX6tS9_-cT-H50ARwCGvw,777
340
340
  pygeai/proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
341
  pygeai/proxy/clients.py,sha256=7g0SJbYjBp02rX6WH-HdGOevclGNJLsELIgf68fR14w,8059
@@ -787,9 +787,9 @@ pygeai/vendor/a2a/utils/helpers.py,sha256=6Tbd8SVfXvdNEk6WYmLOjrAxkzFf1aIg8dkFfB
787
787
  pygeai/vendor/a2a/utils/message.py,sha256=gc_EKO69CJ4HkR76IFgsy-kENJz1dn7CfSgWJWvt-gs,2197
788
788
  pygeai/vendor/a2a/utils/task.py,sha256=BYRA_L1HpoUGJAVlyHML0lCM9Awhf2Ovjj7oPFXKbh0,1647
789
789
  pygeai/vendor/a2a/utils/telemetry.py,sha256=VvSp1Ztqaobkmq9-3sNhhPEilJS32-JTSfKzegkj6FU,10861
790
- pygeai-0.6.0b12.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
791
- pygeai-0.6.0b12.dist-info/METADATA,sha256=CJPgIEAlXo5XCxDkNT5wHDXWQ8fppnZvoB-lL9_R4Ic,7978
792
- pygeai-0.6.0b12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
793
- pygeai-0.6.0b12.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
794
- pygeai-0.6.0b12.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
795
- pygeai-0.6.0b12.dist-info/RECORD,,
790
+ pygeai-0.6.0b14.dist-info/licenses/LICENSE,sha256=eHfqo7-AWS8cMq0cg03lq7owsLeCmZA-xS5L0kuHnl8,1474
791
+ pygeai-0.6.0b14.dist-info/METADATA,sha256=O12R94x2uAZn6Uy2WIGPaEPwHFWBEHo-DlOOz7nv9js,7978
792
+ pygeai-0.6.0b14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
793
+ pygeai-0.6.0b14.dist-info/entry_points.txt,sha256=OAmwuXVCQBTCE3HeVegVd37hbhCcp9TPahvdrCuMYWw,178
794
+ pygeai-0.6.0b14.dist-info/top_level.txt,sha256=bJFwp2tURmCfB94yXDF7ylvdSJXFDDJsyUOb-7PJgwc,7
795
+ pygeai-0.6.0b14.dist-info/RECORD,,