aiecs 1.0.1__py3-none-any.whl → 1.7.17__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.
Potentially problematic release.
This version of aiecs might be problematic. Click here for more details.
- aiecs/__init__.py +13 -16
- aiecs/__main__.py +7 -7
- aiecs/aiecs_client.py +269 -75
- aiecs/application/executors/operation_executor.py +79 -54
- aiecs/application/knowledge_graph/__init__.py +7 -0
- aiecs/application/knowledge_graph/builder/__init__.py +37 -0
- aiecs/application/knowledge_graph/builder/data_quality.py +302 -0
- aiecs/application/knowledge_graph/builder/data_reshaping.py +293 -0
- aiecs/application/knowledge_graph/builder/document_builder.py +369 -0
- aiecs/application/knowledge_graph/builder/graph_builder.py +490 -0
- aiecs/application/knowledge_graph/builder/import_optimizer.py +396 -0
- aiecs/application/knowledge_graph/builder/schema_inference.py +462 -0
- aiecs/application/knowledge_graph/builder/schema_mapping.py +563 -0
- aiecs/application/knowledge_graph/builder/structured_pipeline.py +1384 -0
- aiecs/application/knowledge_graph/builder/text_chunker.py +317 -0
- aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
- aiecs/application/knowledge_graph/extractors/base.py +98 -0
- aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +422 -0
- aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +347 -0
- aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +241 -0
- aiecs/application/knowledge_graph/fusion/__init__.py +78 -0
- aiecs/application/knowledge_graph/fusion/ab_testing.py +395 -0
- aiecs/application/knowledge_graph/fusion/abbreviation_expander.py +327 -0
- aiecs/application/knowledge_graph/fusion/alias_index.py +597 -0
- aiecs/application/knowledge_graph/fusion/alias_matcher.py +384 -0
- aiecs/application/knowledge_graph/fusion/cache_coordinator.py +343 -0
- aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +433 -0
- aiecs/application/knowledge_graph/fusion/entity_linker.py +511 -0
- aiecs/application/knowledge_graph/fusion/evaluation_dataset.py +240 -0
- aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +632 -0
- aiecs/application/knowledge_graph/fusion/matching_config.py +489 -0
- aiecs/application/knowledge_graph/fusion/name_normalizer.py +352 -0
- aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +183 -0
- aiecs/application/knowledge_graph/fusion/semantic_name_matcher.py +464 -0
- aiecs/application/knowledge_graph/fusion/similarity_pipeline.py +534 -0
- aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
- aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +342 -0
- aiecs/application/knowledge_graph/pattern_matching/query_executor.py +366 -0
- aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
- aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +195 -0
- aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
- aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
- aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +341 -0
- aiecs/application/knowledge_graph/reasoning/inference_engine.py +500 -0
- aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +163 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +913 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +866 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +475 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +396 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +208 -0
- aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +170 -0
- aiecs/application/knowledge_graph/reasoning/query_planner.py +855 -0
- aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +518 -0
- aiecs/application/knowledge_graph/retrieval/__init__.py +27 -0
- aiecs/application/knowledge_graph/retrieval/query_intent_classifier.py +211 -0
- aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +592 -0
- aiecs/application/knowledge_graph/retrieval/strategy_types.py +23 -0
- aiecs/application/knowledge_graph/search/__init__.py +59 -0
- aiecs/application/knowledge_graph/search/hybrid_search.py +457 -0
- aiecs/application/knowledge_graph/search/reranker.py +293 -0
- aiecs/application/knowledge_graph/search/reranker_strategies.py +535 -0
- aiecs/application/knowledge_graph/search/text_similarity.py +392 -0
- aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
- aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +305 -0
- aiecs/application/knowledge_graph/traversal/path_scorer.py +271 -0
- aiecs/application/knowledge_graph/validators/__init__.py +13 -0
- aiecs/application/knowledge_graph/validators/relation_validator.py +239 -0
- aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
- aiecs/application/knowledge_graph/visualization/graph_visualizer.py +313 -0
- aiecs/common/__init__.py +9 -0
- aiecs/common/knowledge_graph/__init__.py +17 -0
- aiecs/common/knowledge_graph/runnable.py +471 -0
- aiecs/config/__init__.py +20 -5
- aiecs/config/config.py +762 -31
- aiecs/config/graph_config.py +131 -0
- aiecs/config/tool_config.py +435 -0
- aiecs/core/__init__.py +29 -13
- aiecs/core/interface/__init__.py +2 -2
- aiecs/core/interface/execution_interface.py +22 -22
- aiecs/core/interface/storage_interface.py +37 -88
- aiecs/core/registry/__init__.py +31 -0
- aiecs/core/registry/service_registry.py +92 -0
- aiecs/domain/__init__.py +270 -1
- aiecs/domain/agent/__init__.py +191 -0
- aiecs/domain/agent/base_agent.py +3949 -0
- aiecs/domain/agent/exceptions.py +99 -0
- aiecs/domain/agent/graph_aware_mixin.py +569 -0
- aiecs/domain/agent/hybrid_agent.py +1731 -0
- aiecs/domain/agent/integration/__init__.py +29 -0
- aiecs/domain/agent/integration/context_compressor.py +216 -0
- aiecs/domain/agent/integration/context_engine_adapter.py +587 -0
- aiecs/domain/agent/integration/protocols.py +281 -0
- aiecs/domain/agent/integration/retry_policy.py +218 -0
- aiecs/domain/agent/integration/role_config.py +213 -0
- aiecs/domain/agent/knowledge_aware_agent.py +1892 -0
- aiecs/domain/agent/lifecycle.py +291 -0
- aiecs/domain/agent/llm_agent.py +692 -0
- aiecs/domain/agent/memory/__init__.py +12 -0
- aiecs/domain/agent/memory/conversation.py +1124 -0
- aiecs/domain/agent/migration/__init__.py +14 -0
- aiecs/domain/agent/migration/conversion.py +163 -0
- aiecs/domain/agent/migration/legacy_wrapper.py +86 -0
- aiecs/domain/agent/models.py +894 -0
- aiecs/domain/agent/observability.py +479 -0
- aiecs/domain/agent/persistence.py +449 -0
- aiecs/domain/agent/prompts/__init__.py +29 -0
- aiecs/domain/agent/prompts/builder.py +159 -0
- aiecs/domain/agent/prompts/formatters.py +187 -0
- aiecs/domain/agent/prompts/template.py +255 -0
- aiecs/domain/agent/registry.py +253 -0
- aiecs/domain/agent/tool_agent.py +444 -0
- aiecs/domain/agent/tools/__init__.py +15 -0
- aiecs/domain/agent/tools/schema_generator.py +377 -0
- aiecs/domain/community/__init__.py +155 -0
- aiecs/domain/community/agent_adapter.py +469 -0
- aiecs/domain/community/analytics.py +432 -0
- aiecs/domain/community/collaborative_workflow.py +648 -0
- aiecs/domain/community/communication_hub.py +634 -0
- aiecs/domain/community/community_builder.py +320 -0
- aiecs/domain/community/community_integration.py +796 -0
- aiecs/domain/community/community_manager.py +803 -0
- aiecs/domain/community/decision_engine.py +849 -0
- aiecs/domain/community/exceptions.py +231 -0
- aiecs/domain/community/models/__init__.py +33 -0
- aiecs/domain/community/models/community_models.py +234 -0
- aiecs/domain/community/resource_manager.py +461 -0
- aiecs/domain/community/shared_context_manager.py +589 -0
- aiecs/domain/context/__init__.py +40 -10
- aiecs/domain/context/context_engine.py +1910 -0
- aiecs/domain/context/conversation_models.py +87 -53
- aiecs/domain/context/graph_memory.py +582 -0
- aiecs/domain/execution/model.py +12 -4
- aiecs/domain/knowledge_graph/__init__.py +19 -0
- aiecs/domain/knowledge_graph/models/__init__.py +52 -0
- aiecs/domain/knowledge_graph/models/entity.py +148 -0
- aiecs/domain/knowledge_graph/models/evidence.py +178 -0
- aiecs/domain/knowledge_graph/models/inference_rule.py +184 -0
- aiecs/domain/knowledge_graph/models/path.py +171 -0
- aiecs/domain/knowledge_graph/models/path_pattern.py +171 -0
- aiecs/domain/knowledge_graph/models/query.py +261 -0
- aiecs/domain/knowledge_graph/models/query_plan.py +181 -0
- aiecs/domain/knowledge_graph/models/relation.py +202 -0
- aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
- aiecs/domain/knowledge_graph/schema/entity_type.py +131 -0
- aiecs/domain/knowledge_graph/schema/graph_schema.py +253 -0
- aiecs/domain/knowledge_graph/schema/property_schema.py +143 -0
- aiecs/domain/knowledge_graph/schema/relation_type.py +163 -0
- aiecs/domain/knowledge_graph/schema/schema_manager.py +691 -0
- aiecs/domain/knowledge_graph/schema/type_enums.py +209 -0
- aiecs/domain/task/dsl_processor.py +172 -56
- aiecs/domain/task/model.py +20 -8
- aiecs/domain/task/task_context.py +27 -24
- aiecs/infrastructure/__init__.py +0 -2
- aiecs/infrastructure/graph_storage/__init__.py +11 -0
- aiecs/infrastructure/graph_storage/base.py +837 -0
- aiecs/infrastructure/graph_storage/batch_operations.py +458 -0
- aiecs/infrastructure/graph_storage/cache.py +424 -0
- aiecs/infrastructure/graph_storage/distributed.py +223 -0
- aiecs/infrastructure/graph_storage/error_handling.py +380 -0
- aiecs/infrastructure/graph_storage/graceful_degradation.py +294 -0
- aiecs/infrastructure/graph_storage/health_checks.py +378 -0
- aiecs/infrastructure/graph_storage/in_memory.py +1197 -0
- aiecs/infrastructure/graph_storage/index_optimization.py +446 -0
- aiecs/infrastructure/graph_storage/lazy_loading.py +431 -0
- aiecs/infrastructure/graph_storage/metrics.py +344 -0
- aiecs/infrastructure/graph_storage/migration.py +400 -0
- aiecs/infrastructure/graph_storage/pagination.py +483 -0
- aiecs/infrastructure/graph_storage/performance_monitoring.py +456 -0
- aiecs/infrastructure/graph_storage/postgres.py +1563 -0
- aiecs/infrastructure/graph_storage/property_storage.py +353 -0
- aiecs/infrastructure/graph_storage/protocols.py +76 -0
- aiecs/infrastructure/graph_storage/query_optimizer.py +642 -0
- aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
- aiecs/infrastructure/graph_storage/sqlite.py +1373 -0
- aiecs/infrastructure/graph_storage/streaming.py +487 -0
- aiecs/infrastructure/graph_storage/tenant.py +412 -0
- aiecs/infrastructure/messaging/celery_task_manager.py +92 -54
- aiecs/infrastructure/messaging/websocket_manager.py +51 -35
- aiecs/infrastructure/monitoring/__init__.py +22 -0
- aiecs/infrastructure/monitoring/executor_metrics.py +45 -11
- aiecs/infrastructure/monitoring/global_metrics_manager.py +212 -0
- aiecs/infrastructure/monitoring/structured_logger.py +3 -7
- aiecs/infrastructure/monitoring/tracing_manager.py +63 -35
- aiecs/infrastructure/persistence/__init__.py +14 -1
- aiecs/infrastructure/persistence/context_engine_client.py +184 -0
- aiecs/infrastructure/persistence/database_manager.py +67 -43
- aiecs/infrastructure/persistence/file_storage.py +180 -103
- aiecs/infrastructure/persistence/redis_client.py +74 -21
- aiecs/llm/__init__.py +73 -25
- aiecs/llm/callbacks/__init__.py +11 -0
- aiecs/llm/{custom_callbacks.py → callbacks/custom_callbacks.py} +26 -19
- aiecs/llm/client_factory.py +230 -37
- aiecs/llm/client_resolver.py +155 -0
- aiecs/llm/clients/__init__.py +38 -0
- aiecs/llm/clients/base_client.py +328 -0
- aiecs/llm/clients/google_function_calling_mixin.py +415 -0
- aiecs/llm/clients/googleai_client.py +314 -0
- aiecs/llm/clients/openai_client.py +158 -0
- aiecs/llm/clients/openai_compatible_mixin.py +367 -0
- aiecs/llm/clients/vertex_client.py +1186 -0
- aiecs/llm/clients/xai_client.py +201 -0
- aiecs/llm/config/__init__.py +51 -0
- aiecs/llm/config/config_loader.py +272 -0
- aiecs/llm/config/config_validator.py +206 -0
- aiecs/llm/config/model_config.py +143 -0
- aiecs/llm/protocols.py +149 -0
- aiecs/llm/utils/__init__.py +10 -0
- aiecs/llm/utils/validate_config.py +89 -0
- aiecs/main.py +140 -121
- aiecs/scripts/aid/VERSION_MANAGEMENT.md +138 -0
- aiecs/scripts/aid/__init__.py +19 -0
- aiecs/scripts/aid/module_checker.py +499 -0
- aiecs/scripts/aid/version_manager.py +235 -0
- aiecs/scripts/{DEPENDENCY_SYSTEM_SUMMARY.md → dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md} +1 -0
- aiecs/scripts/{README_DEPENDENCY_CHECKER.md → dependance_check/README_DEPENDENCY_CHECKER.md} +1 -0
- aiecs/scripts/dependance_check/__init__.py +15 -0
- aiecs/scripts/dependance_check/dependency_checker.py +1835 -0
- aiecs/scripts/{dependency_fixer.py → dependance_check/dependency_fixer.py} +192 -90
- aiecs/scripts/{download_nlp_data.py → dependance_check/download_nlp_data.py} +203 -71
- aiecs/scripts/dependance_patch/__init__.py +7 -0
- aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
- aiecs/scripts/{fix_weasel_validator.py → dependance_patch/fix_weasel/fix_weasel_validator.py} +21 -14
- aiecs/scripts/{patch_weasel_library.sh → dependance_patch/fix_weasel/patch_weasel_library.sh} +1 -1
- aiecs/scripts/knowledge_graph/__init__.py +3 -0
- aiecs/scripts/knowledge_graph/run_threshold_experiments.py +212 -0
- aiecs/scripts/migrations/multi_tenancy/README.md +142 -0
- aiecs/scripts/tools_develop/README.md +671 -0
- aiecs/scripts/tools_develop/README_CONFIG_CHECKER.md +273 -0
- aiecs/scripts/tools_develop/TOOLS_CONFIG_GUIDE.md +1287 -0
- aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
- aiecs/scripts/tools_develop/__init__.py +21 -0
- aiecs/scripts/tools_develop/check_all_tools_config.py +548 -0
- aiecs/scripts/tools_develop/check_type_annotations.py +257 -0
- aiecs/scripts/tools_develop/pre-commit-schema-coverage.sh +66 -0
- aiecs/scripts/tools_develop/schema_coverage.py +511 -0
- aiecs/scripts/tools_develop/validate_tool_schemas.py +475 -0
- aiecs/scripts/tools_develop/verify_executor_config_fix.py +98 -0
- aiecs/scripts/tools_develop/verify_tools.py +352 -0
- aiecs/tasks/__init__.py +0 -1
- aiecs/tasks/worker.py +115 -47
- aiecs/tools/__init__.py +194 -72
- aiecs/tools/apisource/__init__.py +99 -0
- aiecs/tools/apisource/intelligence/__init__.py +19 -0
- aiecs/tools/apisource/intelligence/data_fusion.py +632 -0
- aiecs/tools/apisource/intelligence/query_analyzer.py +417 -0
- aiecs/tools/apisource/intelligence/search_enhancer.py +385 -0
- aiecs/tools/apisource/monitoring/__init__.py +9 -0
- aiecs/tools/apisource/monitoring/metrics.py +330 -0
- aiecs/tools/apisource/providers/__init__.py +112 -0
- aiecs/tools/apisource/providers/base.py +671 -0
- aiecs/tools/apisource/providers/census.py +397 -0
- aiecs/tools/apisource/providers/fred.py +535 -0
- aiecs/tools/apisource/providers/newsapi.py +409 -0
- aiecs/tools/apisource/providers/worldbank.py +352 -0
- aiecs/tools/apisource/reliability/__init__.py +12 -0
- aiecs/tools/apisource/reliability/error_handler.py +363 -0
- aiecs/tools/apisource/reliability/fallback_strategy.py +376 -0
- aiecs/tools/apisource/tool.py +832 -0
- aiecs/tools/apisource/utils/__init__.py +9 -0
- aiecs/tools/apisource/utils/validators.py +334 -0
- aiecs/tools/base_tool.py +415 -21
- aiecs/tools/docs/__init__.py +121 -0
- aiecs/tools/docs/ai_document_orchestrator.py +607 -0
- aiecs/tools/docs/ai_document_writer_orchestrator.py +2350 -0
- aiecs/tools/docs/content_insertion_tool.py +1320 -0
- aiecs/tools/docs/document_creator_tool.py +1464 -0
- aiecs/tools/docs/document_layout_tool.py +1160 -0
- aiecs/tools/docs/document_parser_tool.py +1016 -0
- aiecs/tools/docs/document_writer_tool.py +2008 -0
- aiecs/tools/knowledge_graph/__init__.py +17 -0
- aiecs/tools/knowledge_graph/graph_reasoning_tool.py +807 -0
- aiecs/tools/knowledge_graph/graph_search_tool.py +944 -0
- aiecs/tools/knowledge_graph/kg_builder_tool.py +524 -0
- aiecs/tools/langchain_adapter.py +300 -138
- aiecs/tools/schema_generator.py +455 -0
- aiecs/tools/search_tool/__init__.py +100 -0
- aiecs/tools/search_tool/analyzers.py +581 -0
- aiecs/tools/search_tool/cache.py +264 -0
- aiecs/tools/search_tool/constants.py +128 -0
- aiecs/tools/search_tool/context.py +224 -0
- aiecs/tools/search_tool/core.py +778 -0
- aiecs/tools/search_tool/deduplicator.py +119 -0
- aiecs/tools/search_tool/error_handler.py +242 -0
- aiecs/tools/search_tool/metrics.py +343 -0
- aiecs/tools/search_tool/rate_limiter.py +172 -0
- aiecs/tools/search_tool/schemas.py +275 -0
- aiecs/tools/statistics/__init__.py +80 -0
- aiecs/tools/statistics/ai_data_analysis_orchestrator.py +646 -0
- aiecs/tools/statistics/ai_insight_generator_tool.py +508 -0
- aiecs/tools/statistics/ai_report_orchestrator_tool.py +684 -0
- aiecs/tools/statistics/data_loader_tool.py +555 -0
- aiecs/tools/statistics/data_profiler_tool.py +638 -0
- aiecs/tools/statistics/data_transformer_tool.py +580 -0
- aiecs/tools/statistics/data_visualizer_tool.py +498 -0
- aiecs/tools/statistics/model_trainer_tool.py +507 -0
- aiecs/tools/statistics/statistical_analyzer_tool.py +472 -0
- aiecs/tools/task_tools/__init__.py +49 -36
- aiecs/tools/task_tools/chart_tool.py +200 -184
- aiecs/tools/task_tools/classfire_tool.py +268 -267
- aiecs/tools/task_tools/image_tool.py +220 -141
- aiecs/tools/task_tools/office_tool.py +226 -146
- aiecs/tools/task_tools/pandas_tool.py +477 -121
- aiecs/tools/task_tools/report_tool.py +390 -142
- aiecs/tools/task_tools/research_tool.py +149 -79
- aiecs/tools/task_tools/scraper_tool.py +339 -145
- aiecs/tools/task_tools/stats_tool.py +448 -209
- aiecs/tools/temp_file_manager.py +26 -24
- aiecs/tools/tool_executor/__init__.py +18 -16
- aiecs/tools/tool_executor/tool_executor.py +364 -52
- aiecs/utils/LLM_output_structor.py +74 -48
- aiecs/utils/__init__.py +14 -3
- aiecs/utils/base_callback.py +0 -3
- aiecs/utils/cache_provider.py +696 -0
- aiecs/utils/execution_utils.py +50 -31
- aiecs/utils/prompt_loader.py +1 -0
- aiecs/utils/token_usage_repository.py +37 -11
- aiecs/ws/socket_server.py +14 -4
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/METADATA +52 -15
- aiecs-1.7.17.dist-info/RECORD +337 -0
- aiecs-1.7.17.dist-info/entry_points.txt +13 -0
- aiecs/config/registry.py +0 -19
- aiecs/domain/context/content_engine.py +0 -982
- aiecs/llm/base_client.py +0 -99
- aiecs/llm/openai_client.py +0 -125
- aiecs/llm/vertex_client.py +0 -186
- aiecs/llm/xai_client.py +0 -184
- aiecs/scripts/dependency_checker.py +0 -857
- aiecs/scripts/quick_dependency_check.py +0 -269
- aiecs/tools/task_tools/search_api.py +0 -7
- aiecs-1.0.1.dist-info/RECORD +0 -90
- aiecs-1.0.1.dist-info/entry_points.txt +0 -7
- /aiecs/scripts/{setup_nlp_data.sh → dependance_check/setup_nlp_data.sh} +0 -0
- /aiecs/scripts/{README_WEASEL_PATCH.md → dependance_patch/fix_weasel/README_WEASEL_PATCH.md} +0 -0
- /aiecs/scripts/{fix_weasel_validator.sh → dependance_patch/fix_weasel/fix_weasel_validator.sh} +0 -0
- /aiecs/scripts/{run_weasel_patch.sh → dependance_patch/fix_weasel/run_weasel_patch.sh} +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/WHEEL +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/licenses/LICENSE +0 -0
- {aiecs-1.0.1.dist-info → aiecs-1.7.17.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Community Exceptions
|
|
3
|
+
|
|
4
|
+
Defines community-specific exception classes with clear error messages
|
|
5
|
+
and recovery suggestions.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CommunityException(Exception):
|
|
12
|
+
"""Base exception for community-related errors."""
|
|
13
|
+
|
|
14
|
+
def __init__(self, message: str, recovery_suggestion: Optional[str] = None):
|
|
15
|
+
"""
|
|
16
|
+
Initialize community exception.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
message: Error message
|
|
20
|
+
recovery_suggestion: Optional suggestion for recovery
|
|
21
|
+
"""
|
|
22
|
+
self.message = message
|
|
23
|
+
self.recovery_suggestion = recovery_suggestion
|
|
24
|
+
super().__init__(self.message)
|
|
25
|
+
|
|
26
|
+
def __str__(self):
|
|
27
|
+
"""String representation with recovery suggestion."""
|
|
28
|
+
if self.recovery_suggestion:
|
|
29
|
+
return f"{self.message}\nSuggestion: {self.recovery_suggestion}"
|
|
30
|
+
return self.message
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class CommunityNotFoundError(CommunityException):
|
|
34
|
+
"""Raised when a community is not found."""
|
|
35
|
+
|
|
36
|
+
def __init__(self, community_id: str):
|
|
37
|
+
super().__init__(
|
|
38
|
+
f"Community not found: {community_id}",
|
|
39
|
+
"Verify the community ID is correct and the community exists.",
|
|
40
|
+
)
|
|
41
|
+
self.community_id = community_id
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class MemberNotFoundError(CommunityException):
|
|
45
|
+
"""Raised when a member is not found."""
|
|
46
|
+
|
|
47
|
+
def __init__(self, member_id: str):
|
|
48
|
+
super().__init__(
|
|
49
|
+
f"Member not found: {member_id}",
|
|
50
|
+
"Verify the member ID is correct and the member exists in the community.",
|
|
51
|
+
)
|
|
52
|
+
self.member_id = member_id
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ResourceNotFoundError(CommunityException):
|
|
56
|
+
"""Raised when a resource is not found."""
|
|
57
|
+
|
|
58
|
+
def __init__(self, resource_id: str):
|
|
59
|
+
super().__init__(
|
|
60
|
+
f"Resource not found: {resource_id}",
|
|
61
|
+
"Verify the resource ID is correct and the resource exists.",
|
|
62
|
+
)
|
|
63
|
+
self.resource_id = resource_id
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DecisionNotFoundError(CommunityException):
|
|
67
|
+
"""Raised when a decision is not found."""
|
|
68
|
+
|
|
69
|
+
def __init__(self, decision_id: str):
|
|
70
|
+
super().__init__(
|
|
71
|
+
f"Decision not found: {decision_id}",
|
|
72
|
+
"Verify the decision ID is correct and the decision exists.",
|
|
73
|
+
)
|
|
74
|
+
self.decision_id = decision_id
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class AccessDeniedError(CommunityException):
|
|
78
|
+
"""Raised when access to a community resource is denied."""
|
|
79
|
+
|
|
80
|
+
def __init__(self, agent_id: str, resource_type: str, resource_id: str):
|
|
81
|
+
super().__init__(
|
|
82
|
+
f"Access denied for agent {agent_id} to {resource_type} {resource_id}",
|
|
83
|
+
"Request access from the resource owner or community administrator.",
|
|
84
|
+
)
|
|
85
|
+
self.agent_id = agent_id
|
|
86
|
+
self.resource_type = resource_type
|
|
87
|
+
self.resource_id = resource_id
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class MembershipError(CommunityException):
|
|
91
|
+
"""Raised when there's an issue with community membership."""
|
|
92
|
+
|
|
93
|
+
def __init__(self, message: str, agent_id: Optional[str] = None):
|
|
94
|
+
super().__init__(message, "Check membership status and community requirements.")
|
|
95
|
+
self.agent_id = agent_id
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class VotingError(CommunityException):
|
|
99
|
+
"""Raised when there's an issue with voting."""
|
|
100
|
+
|
|
101
|
+
def __init__(self, message: str, decision_id: Optional[str] = None):
|
|
102
|
+
super().__init__(
|
|
103
|
+
message,
|
|
104
|
+
"Verify voting is open and you are eligible to vote on this decision.",
|
|
105
|
+
)
|
|
106
|
+
self.decision_id = decision_id
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class GovernanceError(CommunityException):
|
|
110
|
+
"""Raised when there's an issue with community governance."""
|
|
111
|
+
|
|
112
|
+
def __init__(self, message: str, community_id: Optional[str] = None):
|
|
113
|
+
super().__init__(message, "Review community governance rules and requirements.")
|
|
114
|
+
self.community_id = community_id
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class CollaborationError(CommunityException):
|
|
118
|
+
"""Raised when there's an issue with collaboration."""
|
|
119
|
+
|
|
120
|
+
def __init__(self, message: str, session_id: Optional[str] = None):
|
|
121
|
+
super().__init__(message, "Check session status and participant availability.")
|
|
122
|
+
self.session_id = session_id
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class CommunityInitializationError(CommunityException):
|
|
126
|
+
"""Raised when community initialization fails."""
|
|
127
|
+
|
|
128
|
+
def __init__(self, component: str, reason: str):
|
|
129
|
+
super().__init__(
|
|
130
|
+
f"Failed to initialize {component}: {reason}",
|
|
131
|
+
"Check configuration and dependencies are properly set up.",
|
|
132
|
+
)
|
|
133
|
+
self.component = component
|
|
134
|
+
self.reason = reason
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class CommunityValidationError(CommunityException):
|
|
138
|
+
"""Raised when community validation fails."""
|
|
139
|
+
|
|
140
|
+
def __init__(self, field_or_message: str, reason: Optional[str] = None):
|
|
141
|
+
# Initialize attributes first
|
|
142
|
+
self.field: Optional[str]
|
|
143
|
+
self.reason: Optional[str]
|
|
144
|
+
|
|
145
|
+
if reason:
|
|
146
|
+
# Two-argument form: field and reason
|
|
147
|
+
message = f"Validation error for {field_or_message}: {reason}"
|
|
148
|
+
self.field = field_or_message
|
|
149
|
+
self.reason = reason
|
|
150
|
+
else:
|
|
151
|
+
# One-argument form: just message
|
|
152
|
+
message = field_or_message
|
|
153
|
+
self.field = None
|
|
154
|
+
self.reason = None
|
|
155
|
+
|
|
156
|
+
super().__init__(message, "Review the field value and ensure it meets requirements.")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class QuorumNotMetError(CommunityException):
|
|
160
|
+
"""Raised when quorum is not met for a decision."""
|
|
161
|
+
|
|
162
|
+
def __init__(self, required: int, actual: int, decision_id: Optional[str] = None):
|
|
163
|
+
super().__init__(
|
|
164
|
+
f"Quorum not met: {actual} votes cast, {required} required",
|
|
165
|
+
"Encourage more members to participate in voting.",
|
|
166
|
+
)
|
|
167
|
+
self.required = required
|
|
168
|
+
self.actual = actual
|
|
169
|
+
self.decision_id = decision_id
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class ConflictResolutionError(CommunityException):
|
|
173
|
+
"""Raised when conflict resolution fails."""
|
|
174
|
+
|
|
175
|
+
def __init__(self, decision_id: str, strategy: str):
|
|
176
|
+
super().__init__(
|
|
177
|
+
f"Conflict resolution failed for decision {decision_id} using {strategy}",
|
|
178
|
+
"Try a different conflict resolution strategy or escalate the decision.",
|
|
179
|
+
)
|
|
180
|
+
self.decision_id = decision_id
|
|
181
|
+
self.strategy = strategy
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class CommunityCapacityError(CommunityException):
|
|
185
|
+
"""Raised when community reaches capacity."""
|
|
186
|
+
|
|
187
|
+
def __init__(self, community_id: str, current: int, maximum: int):
|
|
188
|
+
super().__init__(
|
|
189
|
+
f"Community {community_id} is at capacity: {current}/{maximum} members",
|
|
190
|
+
"Create a new community or increase the member limit.",
|
|
191
|
+
)
|
|
192
|
+
self.community_id = community_id
|
|
193
|
+
self.current = current
|
|
194
|
+
self.maximum = maximum
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class AgentAdapterError(CommunityException):
|
|
198
|
+
"""Raised when there's an issue with agent adapter."""
|
|
199
|
+
|
|
200
|
+
def __init__(self, agent_id: str, reason: str):
|
|
201
|
+
super().__init__(
|
|
202
|
+
f"Agent adapter error for {agent_id}: {reason}",
|
|
203
|
+
"Check agent adapter configuration and connectivity.",
|
|
204
|
+
)
|
|
205
|
+
self.agent_id = agent_id
|
|
206
|
+
self.reason = reason
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class CommunicationError(CommunityException):
|
|
210
|
+
"""Raised when there's an issue with agent communication."""
|
|
211
|
+
|
|
212
|
+
def __init__(self, sender_id: str, recipient_id: str, reason: str):
|
|
213
|
+
super().__init__(
|
|
214
|
+
f"Communication error from {sender_id} to {recipient_id}: {reason}",
|
|
215
|
+
"Verify both agents are registered and active in the communication hub.",
|
|
216
|
+
)
|
|
217
|
+
self.sender_id = sender_id
|
|
218
|
+
self.recipient_id = recipient_id
|
|
219
|
+
self.reason = reason
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class ContextError(CommunityException):
|
|
223
|
+
"""Raised when there's an issue with shared context."""
|
|
224
|
+
|
|
225
|
+
def __init__(self, context_id: str, reason: str):
|
|
226
|
+
super().__init__(
|
|
227
|
+
f"Context error for {context_id}: {reason}",
|
|
228
|
+
"Check context access permissions and version compatibility.",
|
|
229
|
+
)
|
|
230
|
+
self.context_id = context_id
|
|
231
|
+
self.reason = reason
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Community Models
|
|
3
|
+
|
|
4
|
+
Data models for agent community collaboration, governance, and resource sharing.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .community_models import (
|
|
8
|
+
# Enums
|
|
9
|
+
CommunityRole,
|
|
10
|
+
GovernanceType,
|
|
11
|
+
DecisionStatus,
|
|
12
|
+
ResourceType,
|
|
13
|
+
# Models
|
|
14
|
+
CommunityMember,
|
|
15
|
+
CommunityResource,
|
|
16
|
+
CommunityDecision,
|
|
17
|
+
AgentCommunity,
|
|
18
|
+
CollaborationSession,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
# Enums
|
|
23
|
+
"CommunityRole",
|
|
24
|
+
"GovernanceType",
|
|
25
|
+
"DecisionStatus",
|
|
26
|
+
"ResourceType",
|
|
27
|
+
# Models
|
|
28
|
+
"CommunityMember",
|
|
29
|
+
"CommunityResource",
|
|
30
|
+
"CommunityDecision",
|
|
31
|
+
"AgentCommunity",
|
|
32
|
+
"CollaborationSession",
|
|
33
|
+
]
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Community Collaboration Models
|
|
3
|
+
|
|
4
|
+
Defines the data models for agent community collaboration,
|
|
5
|
+
including governance, resource sharing, and collective decision-making.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from datetime import datetime
|
|
9
|
+
from typing import Dict, List, Any, Optional
|
|
10
|
+
from enum import Enum
|
|
11
|
+
from pydantic import BaseModel, Field, ConfigDict
|
|
12
|
+
import uuid
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class CommunityRole(str, Enum):
|
|
16
|
+
"""Roles within the agent community."""
|
|
17
|
+
|
|
18
|
+
LEADER = "leader"
|
|
19
|
+
COORDINATOR = "coordinator"
|
|
20
|
+
SPECIALIST = "specialist"
|
|
21
|
+
CONTRIBUTOR = "contributor"
|
|
22
|
+
OBSERVER = "observer"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class GovernanceType(str, Enum):
|
|
26
|
+
"""Types of community governance."""
|
|
27
|
+
|
|
28
|
+
DEMOCRATIC = "democratic" # Voting-based decisions
|
|
29
|
+
CONSENSUS = "consensus" # Consensus-based decisions
|
|
30
|
+
HIERARCHICAL = "hierarchical" # Leader-based decisions
|
|
31
|
+
HYBRID = "hybrid" # Mixed governance
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class DecisionStatus(str, Enum):
|
|
35
|
+
"""Status of community decisions."""
|
|
36
|
+
|
|
37
|
+
PROPOSED = "proposed"
|
|
38
|
+
VOTING = "voting"
|
|
39
|
+
APPROVED = "approved"
|
|
40
|
+
REJECTED = "rejected"
|
|
41
|
+
IMPLEMENTED = "implemented"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ResourceType(str, Enum):
|
|
45
|
+
"""Types of community resources."""
|
|
46
|
+
|
|
47
|
+
KNOWLEDGE = "knowledge"
|
|
48
|
+
TOOL = "tool"
|
|
49
|
+
EXPERIENCE = "experience"
|
|
50
|
+
DATA = "data"
|
|
51
|
+
CAPABILITY = "capability"
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class CommunityMember(BaseModel):
|
|
55
|
+
"""Model representing a member of the agent community."""
|
|
56
|
+
|
|
57
|
+
member_id: str = Field(..., description="Unique identifier for the member")
|
|
58
|
+
agent_id: str = Field(..., description="Associated agent ID")
|
|
59
|
+
agent_role: str = Field(..., description="Agent's functional role")
|
|
60
|
+
community_role: CommunityRole = Field(..., description="Role within the community")
|
|
61
|
+
|
|
62
|
+
# Participation metrics
|
|
63
|
+
contribution_score: float = Field(default=0.0, description="Contribution score to the community")
|
|
64
|
+
reputation: float = Field(default=0.0, description="Reputation within the community")
|
|
65
|
+
participation_level: str = Field(default="active", description="Level of participation")
|
|
66
|
+
|
|
67
|
+
# Capabilities and specializations
|
|
68
|
+
specializations: List[str] = Field(default_factory=list, description="Areas of specialization")
|
|
69
|
+
available_resources: List[str] = Field(default_factory=list, description="Resources this member can provide")
|
|
70
|
+
|
|
71
|
+
# Status
|
|
72
|
+
is_active: bool = Field(default=True, description="Whether the member is active")
|
|
73
|
+
joined_at: datetime = Field(default_factory=datetime.utcnow, description="When the member joined")
|
|
74
|
+
last_active_at: Optional[datetime] = Field(None, description="Last activity timestamp")
|
|
75
|
+
|
|
76
|
+
# Metadata
|
|
77
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
78
|
+
model_config = ConfigDict()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class CommunityResource(BaseModel):
|
|
82
|
+
"""Model representing a shared community resource."""
|
|
83
|
+
|
|
84
|
+
resource_id: str = Field(
|
|
85
|
+
default_factory=lambda: str(uuid.uuid4()),
|
|
86
|
+
description="Unique resource identifier",
|
|
87
|
+
)
|
|
88
|
+
name: str = Field(..., description="Name of the resource")
|
|
89
|
+
resource_type: ResourceType = Field(..., description="Type of resource")
|
|
90
|
+
description: Optional[str] = Field(None, description="Description of the resource")
|
|
91
|
+
|
|
92
|
+
# Ownership and access
|
|
93
|
+
owner_id: str = Field(..., description="ID of the member who owns/contributed this resource")
|
|
94
|
+
access_level: str = Field(
|
|
95
|
+
default="public",
|
|
96
|
+
description="Access level (public, restricted, private)",
|
|
97
|
+
)
|
|
98
|
+
allowed_members: List[str] = Field(
|
|
99
|
+
default_factory=list,
|
|
100
|
+
description="Members allowed to access (if restricted)",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Content
|
|
104
|
+
content: Dict[str, Any] = Field(default_factory=dict, description="Resource content/data")
|
|
105
|
+
tags: List[str] = Field(default_factory=list, description="Tags for categorization")
|
|
106
|
+
|
|
107
|
+
# Usage metrics
|
|
108
|
+
usage_count: int = Field(default=0, description="Number of times this resource has been used")
|
|
109
|
+
rating: float = Field(default=0.0, description="Average rating from community members")
|
|
110
|
+
|
|
111
|
+
# Status
|
|
112
|
+
is_available: bool = Field(default=True, description="Whether the resource is available")
|
|
113
|
+
created_at: datetime = Field(default_factory=datetime.utcnow, description="Creation timestamp")
|
|
114
|
+
updated_at: Optional[datetime] = Field(None, description="Last update timestamp")
|
|
115
|
+
|
|
116
|
+
# Metadata
|
|
117
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
118
|
+
model_config = ConfigDict()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class CommunityDecision(BaseModel):
|
|
122
|
+
"""Model representing a community decision or proposal."""
|
|
123
|
+
|
|
124
|
+
decision_id: str = Field(
|
|
125
|
+
default_factory=lambda: str(uuid.uuid4()),
|
|
126
|
+
description="Unique decision identifier",
|
|
127
|
+
)
|
|
128
|
+
title: str = Field(..., description="Title of the decision/proposal")
|
|
129
|
+
description: str = Field(..., description="Detailed description")
|
|
130
|
+
|
|
131
|
+
# Proposal details
|
|
132
|
+
proposer_id: str = Field(..., description="ID of the member who proposed this")
|
|
133
|
+
decision_type: str = Field(..., description="Type of decision (policy, resource, task, etc.)")
|
|
134
|
+
priority: str = Field(default="medium", description="Priority level")
|
|
135
|
+
|
|
136
|
+
# Voting and consensus
|
|
137
|
+
status: DecisionStatus = Field(default=DecisionStatus.PROPOSED, description="Current status")
|
|
138
|
+
votes_for: List[str] = Field(default_factory=list, description="Member IDs who voted for")
|
|
139
|
+
votes_against: List[str] = Field(default_factory=list, description="Member IDs who voted against")
|
|
140
|
+
abstentions: List[str] = Field(default_factory=list, description="Member IDs who abstained")
|
|
141
|
+
|
|
142
|
+
# Implementation
|
|
143
|
+
implementation_plan: Optional[str] = Field(None, description="Plan for implementing the decision")
|
|
144
|
+
assigned_members: List[str] = Field(default_factory=list, description="Members assigned to implement")
|
|
145
|
+
deadline: Optional[datetime] = Field(None, description="Implementation deadline")
|
|
146
|
+
|
|
147
|
+
# Status tracking
|
|
148
|
+
created_at: datetime = Field(default_factory=datetime.utcnow, description="Creation timestamp")
|
|
149
|
+
voting_ends_at: Optional[datetime] = Field(None, description="When voting ends")
|
|
150
|
+
implemented_at: Optional[datetime] = Field(None, description="When decision was implemented")
|
|
151
|
+
|
|
152
|
+
# Metadata
|
|
153
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
154
|
+
model_config = ConfigDict()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class AgentCommunity(BaseModel):
|
|
158
|
+
"""Model representing an agent community."""
|
|
159
|
+
|
|
160
|
+
community_id: str = Field(
|
|
161
|
+
default_factory=lambda: str(uuid.uuid4()),
|
|
162
|
+
description="Unique community identifier",
|
|
163
|
+
)
|
|
164
|
+
name: str = Field(..., description="Name of the community")
|
|
165
|
+
description: Optional[str] = Field(None, description="Description of the community")
|
|
166
|
+
|
|
167
|
+
# Governance
|
|
168
|
+
governance_type: GovernanceType = Field(default=GovernanceType.DEMOCRATIC, description="Type of governance")
|
|
169
|
+
governance_rules: Dict[str, Any] = Field(default_factory=dict, description="Governance rules and policies")
|
|
170
|
+
|
|
171
|
+
# Membership
|
|
172
|
+
members: List[str] = Field(default_factory=list, description="List of member IDs")
|
|
173
|
+
max_members: Optional[int] = Field(None, description="Maximum number of members")
|
|
174
|
+
membership_criteria: Dict[str, Any] = Field(default_factory=dict, description="Criteria for membership")
|
|
175
|
+
|
|
176
|
+
# Leadership
|
|
177
|
+
leaders: List[str] = Field(default_factory=list, description="List of leader member IDs")
|
|
178
|
+
coordinators: List[str] = Field(default_factory=list, description="List of coordinator member IDs")
|
|
179
|
+
|
|
180
|
+
# Resources and capabilities
|
|
181
|
+
shared_resources: List[str] = Field(default_factory=list, description="List of shared resource IDs")
|
|
182
|
+
collective_capabilities: List[str] = Field(default_factory=list, description="Collective capabilities")
|
|
183
|
+
knowledge_base: Dict[str, Any] = Field(default_factory=dict, description="Community knowledge base")
|
|
184
|
+
|
|
185
|
+
# Activity and metrics
|
|
186
|
+
activity_level: str = Field(default="active", description="Overall activity level")
|
|
187
|
+
collaboration_score: float = Field(default=0.0, description="Overall collaboration effectiveness score")
|
|
188
|
+
decision_count: int = Field(default=0, description="Number of decisions made")
|
|
189
|
+
resource_count: int = Field(default=0, description="Number of shared resources")
|
|
190
|
+
|
|
191
|
+
# Status
|
|
192
|
+
is_active: bool = Field(default=True, description="Whether the community is active")
|
|
193
|
+
created_at: datetime = Field(default_factory=datetime.utcnow, description="Creation timestamp")
|
|
194
|
+
updated_at: Optional[datetime] = Field(None, description="Last update timestamp")
|
|
195
|
+
|
|
196
|
+
# Metadata
|
|
197
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
198
|
+
model_config = ConfigDict()
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
class CollaborationSession(BaseModel):
|
|
202
|
+
"""Model representing a collaborative session between community members."""
|
|
203
|
+
|
|
204
|
+
session_id: str = Field(
|
|
205
|
+
default_factory=lambda: str(uuid.uuid4()),
|
|
206
|
+
description="Unique session identifier",
|
|
207
|
+
)
|
|
208
|
+
community_id: str = Field(..., description="Associated community ID")
|
|
209
|
+
|
|
210
|
+
# Participants
|
|
211
|
+
participants: List[str] = Field(..., description="List of participating member IDs")
|
|
212
|
+
session_leader: Optional[str] = Field(None, description="Session leader member ID")
|
|
213
|
+
|
|
214
|
+
# Session details
|
|
215
|
+
purpose: str = Field(..., description="Purpose of the collaboration session")
|
|
216
|
+
session_type: str = Field(
|
|
217
|
+
...,
|
|
218
|
+
description="Type of session (brainstorm, decision, problem-solving, etc.)",
|
|
219
|
+
)
|
|
220
|
+
agenda: List[str] = Field(default_factory=list, description="Session agenda items")
|
|
221
|
+
|
|
222
|
+
# Outcomes
|
|
223
|
+
decisions_made: List[str] = Field(default_factory=list, description="Decision IDs made during session")
|
|
224
|
+
resources_created: List[str] = Field(default_factory=list, description="Resource IDs created during session")
|
|
225
|
+
action_items: List[Dict[str, Any]] = Field(default_factory=list, description="Action items from the session")
|
|
226
|
+
|
|
227
|
+
# Status
|
|
228
|
+
status: str = Field(default="active", description="Session status")
|
|
229
|
+
started_at: datetime = Field(default_factory=datetime.utcnow, description="Session start time")
|
|
230
|
+
ended_at: Optional[datetime] = Field(None, description="Session end time")
|
|
231
|
+
|
|
232
|
+
# Metadata
|
|
233
|
+
metadata: Dict[str, Any] = Field(default_factory=dict, description="Additional metadata")
|
|
234
|
+
model_config = ConfigDict()
|