dialectical-framework 0.7.6__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dialectical_framework-1.1.0/PKG-INFO +160 -0
- dialectical_framework-1.1.0/README.md +118 -0
- {dialectical_framework-0.7.6 → dialectical_framework-1.1.0}/pyproject.toml +15 -14
- dialectical_framework-1.1.0/src/dialectical_framework/agents/agent_context.py +52 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/analyst.py +401 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +197 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +682 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +326 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/find_polarities.py +532 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +221 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills/surface_theses.py +443 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/system_prompts.py +100 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/tools/create_dx_input.py +78 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/tools/place_statement.py +23 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/apps.py +248 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/conversation_facilitator.py +302 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/execution_report.py +413 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/explorer.py +276 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/skills/build_wheels.py +383 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +666 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/system_prompts.py +70 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/tools/create_nexus.py +87 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/tools/present_exploration.py +203 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/add_input.py +54 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/discard.py +163 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +191 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +308 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +151 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +197 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/reasonable_concern.py +60 -0
- dialectical_framework-1.1.0/src/dialectical_framework/agents/stream_events.py +74 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/ac_re_taxonomy.py +149 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/action_extraction.py +311 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/ai_dto/statement_dto.py +90 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +99 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/antithesis_classification.py +543 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/antithesis_extraction.py +533 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/aspect_classification.py +315 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/aspect_generation.py +669 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator.py +63 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +434 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +71 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +50 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +50 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +50 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/causality_normalizer.py +142 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality/estimator_resolver.py +95 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/causality_estimation.py +282 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/control_statements_check.py +254 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/diagonal_oppositions_check.py +266 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/display_text_edit.py +134 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/perspective_combination.py +511 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/perspective_validation.py +311 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +366 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/statement_classification.py +596 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/statement_deduplication.py +468 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/statement_placement.py +128 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/synthesis_generation.py +227 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/thesis_extraction.py +317 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/transformation_audit.py +250 -0
- dialectical_framework-1.1.0/src/dialectical_framework/concerns/transformation_generation.py +759 -0
- dialectical_framework-1.1.0/src/dialectical_framework/dialectical_reasoning.py +246 -0
- dialectical_framework-1.1.0/src/dialectical_framework/enums/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/enums/causality_preset.py +13 -0
- dialectical_framework-1.1.0/src/dialectical_framework/enums/di.py +17 -0
- dialectical_framework-1.1.0/src/dialectical_framework/events/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/events/graph_event.py +16 -0
- dialectical_framework-1.1.0/src/dialectical_framework/events/graph_event_bus.py +55 -0
- dialectical_framework-1.1.0/src/dialectical_framework/exceptions/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/exceptions/node_errors.py +10 -0
- dialectical_framework-1.1.0/src/dialectical_framework/exceptions/resolver_errors.py +71 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/composite_input_resolver.py +127 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/dialexity_input_resolver.py +196 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/estimation_manager.py +201 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/mixins/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +154 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/mixins/intent_mixin.py +32 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/mixins/persistable_mixin.py +22 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/assessable_entity.py +85 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/base_node.py +319 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/case.py +162 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/cycle.py +271 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/estimation.py +358 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/ideas.py +133 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/input.py +236 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/nexus.py +128 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/perspective.py +903 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/polarity.py +332 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/rationale.py +322 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/statement.py +487 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/synthesis.py +413 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/transformation.py +598 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/transition.py +588 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/nodes/wheel.py +1059 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationship_manager.py +1386 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +20 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +15 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +21 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/changed_to_relationship.py +23 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +24 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/critiques_relationship.py +14 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +13 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/estimates_relationship.py +14 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/explains_relationship.py +14 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/has_input_relationship.py +13 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/has_statement_relationship.py +19 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +15 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/immutable_structure.py +109 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +13 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +13 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +9 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +20 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +20 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/polarity_relationship.py +153 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +9 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/provides_relationship.py +14 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +14 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/case_repository.py +52 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/cycle_repository.py +172 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/input_repository.py +52 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/nexus_repository.py +87 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/node_repository.py +136 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/perspective_repository.py +198 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/polarity_repository.py +221 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/schema_repository.py +73 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/statement_repository.py +233 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/transformation_repository.py +355 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/repositories/wheel_repository.py +205 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/scope_context.py +98 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/verbatim_input_resolver.py +130 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/wheel_segment.py +402 -0
- dialectical_framework-1.1.0/src/dialectical_framework/graph/wheel_segment_polar_pair.py +406 -0
- dialectical_framework-1.1.0/src/dialectical_framework/protocols/__init__.py +0 -0
- {dialectical_framework-0.7.6 → dialectical_framework-1.1.0}/src/dialectical_framework/protocols/has_config.py +6 -5
- dialectical_framework-1.1.0/src/dialectical_framework/protocols/input_resolver.py +70 -0
- dialectical_framework-1.1.0/src/dialectical_framework/settings.py +97 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/__init__.py +0 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/bedrock_provider.py +167 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/dc_replace.py +82 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/edge_context.py +54 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/effect_logger.py +107 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/order_transitions.py +74 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/sequence_generation.py +158 -0
- dialectical_framework-1.1.0/src/dialectical_framework/utils/use_brain.py +225 -0
- dialectical_framework-0.7.6/PKG-INFO +0 -136
- dialectical_framework-0.7.6/README.md +0 -97
- dialectical_framework-0.7.6/src/dialectical_framework/__init__.py +0 -42
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/action_plan_dto.py +0 -11
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/causal_cycle_assessment_dto.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/causal_cycle_dto.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/causal_cycles_deck_dto.py +0 -11
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/constructive_convergence_transition_audit_dto.py +0 -9
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/dialectical_component_dto.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/dialectical_components_deck_dto.py +0 -12
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/dto_mapper.py +0 -103
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/reciprocal_solution_dto.py +0 -24
- dialectical_framework-0.7.6/src/dialectical_framework/ai_dto/transition_summary_dto.py +0 -8
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/__init__.py +0 -1
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/consultant.py +0 -30
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/decorator_action_reflection.py +0 -38
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/decorator_discrete_spiral.py +0 -38
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/decorator_discrete_spiral_audited.py +0 -17
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/assessable_cycle.py +0 -134
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/cycle.py +0 -131
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/interpretation.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/rationale.py +0 -171
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/spiral.py +0 -69
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/transformation.py +0 -30
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/transition.py +0 -134
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/transition_cell_to_cell.py +0 -29
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain/transition_segment_to_segment.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/strategic_consultant.py +0 -32
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/think_action_reflection.py +0 -228
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/think_constructive_convergence.py +0 -200
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/think_constructive_convergence_auditor.py +0 -114
- dialectical_framework-0.7.6/src/dialectical_framework/analyst/wheel_builder_transition_calculator.py +0 -159
- dialectical_framework-0.7.6/src/dialectical_framework/brain.py +0 -81
- dialectical_framework-0.7.6/src/dialectical_framework/dialectical_reasoning.py +0 -107
- dialectical_framework-0.7.6/src/dialectical_framework/enums/causality_type.py +0 -10
- dialectical_framework-0.7.6/src/dialectical_framework/enums/di.py +0 -11
- dialectical_framework-0.7.6/src/dialectical_framework/enums/dialectical_reasoning_mode.py +0 -9
- dialectical_framework-0.7.6/src/dialectical_framework/enums/predicate.py +0 -9
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/assessable.py +0 -133
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/causality_sequencer.py +0 -111
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/content_fidelity_evaluator.py +0 -16
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/has_brain.py +0 -18
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/polarity_extractor.py +0 -101
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/ratable.py +0 -147
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/reloadable.py +0 -7
- dialectical_framework-0.7.6/src/dialectical_framework/protocols/thesis_extractor.py +0 -15
- dialectical_framework-0.7.6/src/dialectical_framework/settings.py +0 -95
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/__init__.py +0 -1
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/causality/causality_sequencer_balanced.py +0 -416
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/causality/causality_sequencer_desirable.py +0 -55
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/causality/causality_sequencer_feasible.py +0 -55
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/causality/causality_sequencer_realistic.py +0 -56
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/concepts/polarity_extractor_basic.py +0 -365
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/concepts/thesis_extractor_basic.py +0 -150
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/dialectical_analysis.py +0 -14
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/dialectical_component.py +0 -105
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/dialectical_components_deck.py +0 -48
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/directed_graph.py +0 -419
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/synthesis.py +0 -7
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/wheel.py +0 -390
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/wheel_segment.py +0 -164
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain/wisdom_unit.py +0 -199
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/polarity/polarity_reasoner.py +0 -701
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/polarity/reason_fast.py +0 -137
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/polarity/reason_fast_and_simple.py +0 -60
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/polarity/reason_fast_polarized_conflict.py +0 -63
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/reverse_engineer.py +0 -401
- dialectical_framework-0.7.6/src/dialectical_framework/synthesist/wheel_builder.py +0 -362
- dialectical_framework-0.7.6/src/dialectical_framework/utils/__init__.py +0 -1
- dialectical_framework-0.7.6/src/dialectical_framework/utils/dc_replace.py +0 -42
- dialectical_framework-0.7.6/src/dialectical_framework/utils/dw_report.py +0 -249
- dialectical_framework-0.7.6/src/dialectical_framework/utils/extend_tpl.py +0 -12
- dialectical_framework-0.7.6/src/dialectical_framework/utils/gm.py +0 -15
- dialectical_framework-0.7.6/src/dialectical_framework/utils/is_async.py +0 -13
- dialectical_framework-0.7.6/src/dialectical_framework/utils/pm.py +0 -27
- dialectical_framework-0.7.6/src/dialectical_framework/utils/use_brain.py +0 -91
- dialectical_framework-0.7.6/src/dialectical_framework/validator/__init__.py +0 -1
- dialectical_framework-0.7.6/src/dialectical_framework/validator/basic_checks.py +0 -75
- dialectical_framework-0.7.6/src/dialectical_framework/validator/check.py +0 -12
- {dialectical_framework-0.7.6 → dialectical_framework-1.1.0}/LICENSE +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/ai_dto → dialectical_framework-1.1.0/src/dialectical_framework}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/analyst/domain → dialectical_framework-1.1.0/src/dialectical_framework/agents}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/enums → dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/protocols → dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/skills}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/synthesist/causality → dialectical_framework-1.1.0/src/dialectical_framework/agents/analyst/tools}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/synthesist/concepts → dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/synthesist/domain → dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/skills}/__init__.py +0 -0
- {dialectical_framework-0.7.6/src/dialectical_framework/synthesist/polarity → dialectical_framework-1.1.0/src/dialectical_framework/agents/explorer/tools}/__init__.py +0 -0
- {dialectical_framework-0.7.6 → dialectical_framework-1.1.0}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: dialectical-framework
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.).
|
|
5
|
+
License: MIT
|
|
6
|
+
Keywords: dialectics,dialectical-reasoning,synthesis,thesis-antithesis,ai,artificial-intelligence,llm,reasoning-framework,philosophy,logic,argumentation,conflict-resolution,decision-making,critical-thinking,semantic-graph,mirascope,pydantic,perspectives,polarity-reasoning
|
|
7
|
+
Author: Evaldas Taroza
|
|
8
|
+
Author-email: evaldas@dialexity.com
|
|
9
|
+
Requires-Python: >=3.11,<4.0
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Framework :: Pydantic
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Education
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Natural Language :: English
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Topic :: Education
|
|
24
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
|
|
27
|
+
Classifier: Topic :: Sociology
|
|
28
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
29
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
30
|
+
Requires-Dist: boto3 (>=1.43.4,<2.0.0)
|
|
31
|
+
Requires-Dist: broadcaster (>=0.3.1,<0.4.0)
|
|
32
|
+
Requires-Dist: dependency-injector (>=4.48.2,<5.0.0)
|
|
33
|
+
Requires-Dist: gqlalchemy (>=1.8.0,<2.0.0)
|
|
34
|
+
Requires-Dist: langfuse (>=4.5.1,<5.0.0)
|
|
35
|
+
Requires-Dist: mirascope[anthropic,openai,ops] (>=2.4.0,<3.0.0)
|
|
36
|
+
Requires-Dist: python-dotenv (>=1.2.1,<2.0.0)
|
|
37
|
+
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
|
38
|
+
Project-URL: Homepage, https://github.com/dialexity/dialectical-framework
|
|
39
|
+
Project-URL: Repository, https://github.com/dialexity/dialectical-framework
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
# Dialectical Framework
|
|
43
|
+
|
|
44
|
+
A reasoning framework for AI applications that need structured dialectical analysis. It curates a graph database through LLM-guided conversation, building up thesis-antithesis-synthesis structures from any domain.
|
|
45
|
+
|
|
46
|
+
The graph database **is** the state. Every interaction — extracting theses, finding oppositions, building wheels — writes semantic nodes and relationships into the graph. The framework is essentially a curation engine: an LLM orchestrator that progressively structures user input into dialectical knowledge graphs.
|
|
47
|
+
|
|
48
|
+
## How It Works
|
|
49
|
+
|
|
50
|
+
1. **Input** — User provides text, URLs, or ideas
|
|
51
|
+
2. **Analysis** — LLM extracts theses, finds antitheses, generates aspects (T+, T-, A+, A-)
|
|
52
|
+
3. **Graph curation** — Each insight is committed as nodes/relationships in the graph database
|
|
53
|
+
4. **Exploration** — Perspectives are combined into Cycles, arranged into Wheels, and Transformations reveal paths toward synthesis
|
|
54
|
+
|
|
55
|
+
The graph accumulates structured reasoning over time. Applications query it, visualize it, or build on it.
|
|
56
|
+
|
|
57
|
+
## Architecture
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Host Application (Chainlit, API, CLI)
|
|
61
|
+
│
|
|
62
|
+
▼
|
|
63
|
+
Orchestrator (LLM + tools)
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
Graph Database (Memgraph / Neo4j)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The Orchestrator is the main entry point. It manages an LLM conversation with tools that read and write the graph. The host app controls persona and session identity; the framework handles reasoning and graph curation.
|
|
70
|
+
|
|
71
|
+
### Core Graph Structure
|
|
72
|
+
|
|
73
|
+
At the heart is the **Dialectical Wheel** — a semantic graph where nodes are statements and edges encode dialectical relationships (opposition, complementarity, transformation).
|
|
74
|
+
|
|
75
|
+
| Structure | Role |
|
|
76
|
+
|-----------|------|
|
|
77
|
+
| **Statement** | Atomic unit of meaning |
|
|
78
|
+
| **Perspective** | T/A opposition with aspects (T+, T-, A+, A-) |
|
|
79
|
+
| **Cycle** | Ordered sequence of Perspectives |
|
|
80
|
+
| **Wheel** | Concrete T-A arrangement implementing a Cycle |
|
|
81
|
+
| **Transformation** | Action-Reflection paths between segments |
|
|
82
|
+
| **Synthesis** | Emergent S+/S- from the Wheel's circular causality |
|
|
83
|
+
|
|
84
|
+
Think of a Wheel as a pizza: segments are slices (T, T+, T-), Perspectives are half-pizzas (thesis + opposing antithesis), and Transitions are the cuts between slices.
|
|
85
|
+
|
|
86
|
+
| Simple | Detailed |
|
|
87
|
+
|--------|----------|
|
|
88
|
+
|  |  |
|
|
89
|
+
|
|
90
|
+
## Integration
|
|
91
|
+
|
|
92
|
+
The framework is designed as a drop-in reasoning engine for AI applications that need dialectical analysis — decision support, systems thinking, mediation, ethical modeling.
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
from dialectical_framework.dialectical_reasoning import DialecticalReasoning
|
|
96
|
+
from dialectical_framework.settings import Settings
|
|
97
|
+
from dialectical_framework.agents.orchestrator.orchestrator import Orchestrator
|
|
98
|
+
|
|
99
|
+
# Initialize once
|
|
100
|
+
DialecticalReasoning.setup(Settings.from_env())
|
|
101
|
+
|
|
102
|
+
# Per-session usage
|
|
103
|
+
orchestrator = Orchestrator(app_preamble="You are a systems thinking coach...")
|
|
104
|
+
|
|
105
|
+
async for event in orchestrator.chat_stream("Analyze the tension between growth and sustainability"):
|
|
106
|
+
# ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
|
|
107
|
+
handle(event)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Setup
|
|
111
|
+
|
|
112
|
+
### Requirements
|
|
113
|
+
|
|
114
|
+
- Python 3.11+
|
|
115
|
+
- Memgraph or Neo4j
|
|
116
|
+
- An LLM provider (OpenAI, Anthropic, or any LiteLLM-compatible)
|
|
117
|
+
|
|
118
|
+
### Install
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
poetry install
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Environment Variables
|
|
125
|
+
|
|
126
|
+
| Variable | Description | Example |
|
|
127
|
+
|----------|-------------|---------|
|
|
128
|
+
| `DIALEXITY_DEFAULT_MODEL` | Model in provider/model format | `bedrock/anthropic.claude-sonnet-4-20250514-v1:0` |
|
|
129
|
+
| `DIALEXITY_GRAPH_DB_VENDOR` | Graph database | `memgraph` (default) or `neo4j` |
|
|
130
|
+
| `DIALEXITY_GRAPH_DB_HOST` | Database host | `127.0.0.1` |
|
|
131
|
+
| `DIALEXITY_GRAPH_DB_PORT` | Database port | `7687` |
|
|
132
|
+
| `DIALEXITY_THINKING_LEVEL` | Extended thinking budget | `medium`, `high`, `max` (optional) |
|
|
133
|
+
|
|
134
|
+
Store in `.env` or export in your environment.
|
|
135
|
+
|
|
136
|
+
### Run Tests
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
poetry run pytest # All tests (LLM mocked)
|
|
140
|
+
poetry run pytest -m llm # Only LLM-path tests (mocked)
|
|
141
|
+
poetry run pytest --real-llm # Hit real LLM provider
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Built With
|
|
145
|
+
|
|
146
|
+
- [Mirascope](https://mirascope.com/) — LLM abstraction
|
|
147
|
+
- [GQLAlchemy](https://memgraph.com/docs/gqlalchemy) — Graph ORM
|
|
148
|
+
- [dependency-injector](https://python-dependency-injector.ets-labs.org/) — DI container
|
|
149
|
+
|
|
150
|
+
## Learn More
|
|
151
|
+
|
|
152
|
+
- [Dialectical Wheels Overview](https://dialexity.com/blog/dialectical-wheels-for-systems-optimization/)
|
|
153
|
+
- [Dialectical Ethics](https://dialexity.com/blog/dialectical-ethics/)
|
|
154
|
+
- [Earlier Work](https://dialexity.com/blog/wp-content/uploads/2023/11/Moral-Wisdom-from-Ontology-1.pdf)
|
|
155
|
+
|
|
156
|
+
## Applications
|
|
157
|
+
|
|
158
|
+
- [Eye Opener](https://app.dialexity.com/aiapps/eye-opener) — Analyze text, reveal hidden assumptions
|
|
159
|
+
- [Argument Inspector](https://app.dialexity.com/aiapps/argument-inspector/) — Deep-dive into case arguments for analysts and mediators
|
|
160
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Dialectical Framework
|
|
2
|
+
|
|
3
|
+
A reasoning framework for AI applications that need structured dialectical analysis. It curates a graph database through LLM-guided conversation, building up thesis-antithesis-synthesis structures from any domain.
|
|
4
|
+
|
|
5
|
+
The graph database **is** the state. Every interaction — extracting theses, finding oppositions, building wheels — writes semantic nodes and relationships into the graph. The framework is essentially a curation engine: an LLM orchestrator that progressively structures user input into dialectical knowledge graphs.
|
|
6
|
+
|
|
7
|
+
## How It Works
|
|
8
|
+
|
|
9
|
+
1. **Input** — User provides text, URLs, or ideas
|
|
10
|
+
2. **Analysis** — LLM extracts theses, finds antitheses, generates aspects (T+, T-, A+, A-)
|
|
11
|
+
3. **Graph curation** — Each insight is committed as nodes/relationships in the graph database
|
|
12
|
+
4. **Exploration** — Perspectives are combined into Cycles, arranged into Wheels, and Transformations reveal paths toward synthesis
|
|
13
|
+
|
|
14
|
+
The graph accumulates structured reasoning over time. Applications query it, visualize it, or build on it.
|
|
15
|
+
|
|
16
|
+
## Architecture
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Host Application (Chainlit, API, CLI)
|
|
20
|
+
│
|
|
21
|
+
▼
|
|
22
|
+
Orchestrator (LLM + tools)
|
|
23
|
+
│
|
|
24
|
+
▼
|
|
25
|
+
Graph Database (Memgraph / Neo4j)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The Orchestrator is the main entry point. It manages an LLM conversation with tools that read and write the graph. The host app controls persona and session identity; the framework handles reasoning and graph curation.
|
|
29
|
+
|
|
30
|
+
### Core Graph Structure
|
|
31
|
+
|
|
32
|
+
At the heart is the **Dialectical Wheel** — a semantic graph where nodes are statements and edges encode dialectical relationships (opposition, complementarity, transformation).
|
|
33
|
+
|
|
34
|
+
| Structure | Role |
|
|
35
|
+
|-----------|------|
|
|
36
|
+
| **Statement** | Atomic unit of meaning |
|
|
37
|
+
| **Perspective** | T/A opposition with aspects (T+, T-, A+, A-) |
|
|
38
|
+
| **Cycle** | Ordered sequence of Perspectives |
|
|
39
|
+
| **Wheel** | Concrete T-A arrangement implementing a Cycle |
|
|
40
|
+
| **Transformation** | Action-Reflection paths between segments |
|
|
41
|
+
| **Synthesis** | Emergent S+/S- from the Wheel's circular causality |
|
|
42
|
+
|
|
43
|
+
Think of a Wheel as a pizza: segments are slices (T, T+, T-), Perspectives are half-pizzas (thesis + opposing antithesis), and Transitions are the cuts between slices.
|
|
44
|
+
|
|
45
|
+
| Simple | Detailed |
|
|
46
|
+
|--------|----------|
|
|
47
|
+
|  |  |
|
|
48
|
+
|
|
49
|
+
## Integration
|
|
50
|
+
|
|
51
|
+
The framework is designed as a drop-in reasoning engine for AI applications that need dialectical analysis — decision support, systems thinking, mediation, ethical modeling.
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
from dialectical_framework.dialectical_reasoning import DialecticalReasoning
|
|
55
|
+
from dialectical_framework.settings import Settings
|
|
56
|
+
from dialectical_framework.agents.orchestrator.orchestrator import Orchestrator
|
|
57
|
+
|
|
58
|
+
# Initialize once
|
|
59
|
+
DialecticalReasoning.setup(Settings.from_env())
|
|
60
|
+
|
|
61
|
+
# Per-session usage
|
|
62
|
+
orchestrator = Orchestrator(app_preamble="You are a systems thinking coach...")
|
|
63
|
+
|
|
64
|
+
async for event in orchestrator.chat_stream("Analyze the tension between growth and sustainability"):
|
|
65
|
+
# ThinkingDelta, TextDelta, ToolStart, ToolResult, ResponseComplete
|
|
66
|
+
handle(event)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Setup
|
|
70
|
+
|
|
71
|
+
### Requirements
|
|
72
|
+
|
|
73
|
+
- Python 3.11+
|
|
74
|
+
- Memgraph or Neo4j
|
|
75
|
+
- An LLM provider (OpenAI, Anthropic, or any LiteLLM-compatible)
|
|
76
|
+
|
|
77
|
+
### Install
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
poetry install
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Environment Variables
|
|
84
|
+
|
|
85
|
+
| Variable | Description | Example |
|
|
86
|
+
|----------|-------------|---------|
|
|
87
|
+
| `DIALEXITY_DEFAULT_MODEL` | Model in provider/model format | `bedrock/anthropic.claude-sonnet-4-20250514-v1:0` |
|
|
88
|
+
| `DIALEXITY_GRAPH_DB_VENDOR` | Graph database | `memgraph` (default) or `neo4j` |
|
|
89
|
+
| `DIALEXITY_GRAPH_DB_HOST` | Database host | `127.0.0.1` |
|
|
90
|
+
| `DIALEXITY_GRAPH_DB_PORT` | Database port | `7687` |
|
|
91
|
+
| `DIALEXITY_THINKING_LEVEL` | Extended thinking budget | `medium`, `high`, `max` (optional) |
|
|
92
|
+
|
|
93
|
+
Store in `.env` or export in your environment.
|
|
94
|
+
|
|
95
|
+
### Run Tests
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
poetry run pytest # All tests (LLM mocked)
|
|
99
|
+
poetry run pytest -m llm # Only LLM-path tests (mocked)
|
|
100
|
+
poetry run pytest --real-llm # Hit real LLM provider
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Built With
|
|
104
|
+
|
|
105
|
+
- [Mirascope](https://mirascope.com/) — LLM abstraction
|
|
106
|
+
- [GQLAlchemy](https://memgraph.com/docs/gqlalchemy) — Graph ORM
|
|
107
|
+
- [dependency-injector](https://python-dependency-injector.ets-labs.org/) — DI container
|
|
108
|
+
|
|
109
|
+
## Learn More
|
|
110
|
+
|
|
111
|
+
- [Dialectical Wheels Overview](https://dialexity.com/blog/dialectical-wheels-for-systems-optimization/)
|
|
112
|
+
- [Dialectical Ethics](https://dialexity.com/blog/dialectical-ethics/)
|
|
113
|
+
- [Earlier Work](https://dialexity.com/blog/wp-content/uploads/2023/11/Moral-Wisdom-from-Ontology-1.pdf)
|
|
114
|
+
|
|
115
|
+
## Applications
|
|
116
|
+
|
|
117
|
+
- [Eye Opener](https://app.dialexity.com/aiapps/eye-opener) — Analyze text, reveal hidden assumptions
|
|
118
|
+
- [Argument Inspector](https://app.dialexity.com/aiapps/argument-inspector/) — Deep-dive into case arguments for analysts and mediators
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "dialectical-framework"
|
|
3
|
-
version = "
|
|
3
|
+
version = "1.1.0"
|
|
4
4
|
description = "A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.)."
|
|
5
5
|
authors = ["Evaldas Taroza <evaldas@dialexity.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -12,7 +12,7 @@ keywords = [
|
|
|
12
12
|
"ai", "artificial-intelligence", "llm", "reasoning-framework",
|
|
13
13
|
"philosophy", "logic", "argumentation", "conflict-resolution",
|
|
14
14
|
"decision-making", "critical-thinking", "semantic-graph",
|
|
15
|
-
"mirascope", "pydantic", "
|
|
15
|
+
"mirascope", "pydantic", "perspectives", "polarity-reasoning"
|
|
16
16
|
]
|
|
17
17
|
classifiers = [
|
|
18
18
|
"Development Status :: 4 - Beta",
|
|
@@ -40,26 +40,25 @@ classifiers = [
|
|
|
40
40
|
include = "dialectical_framework"
|
|
41
41
|
from = "src"
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
43
|
[tool.poetry.dependencies]
|
|
46
44
|
python = "^3.11"
|
|
47
45
|
mirascope = {extras = [
|
|
48
|
-
"azure",
|
|
49
46
|
"openai",
|
|
50
47
|
"anthropic",
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
"tenacity"
|
|
54
|
-
], version = "^1.25.7"}
|
|
48
|
+
"ops"
|
|
49
|
+
], version = "^2.4.0"}
|
|
55
50
|
python-dotenv = "^1.2.1"
|
|
56
51
|
tabulate = "^0.9.0"
|
|
57
52
|
dependency-injector = "^4.48.2"
|
|
58
|
-
|
|
53
|
+
gqlalchemy = "^1.8.0"
|
|
54
|
+
langfuse = "^4.5.1"
|
|
55
|
+
boto3 = "^1.43.4"
|
|
56
|
+
broadcaster = "^0.3.1"
|
|
59
57
|
|
|
60
58
|
[tool.poetry.group.dev.dependencies]
|
|
61
|
-
pytest = "^
|
|
62
|
-
|
|
59
|
+
pytest = "^9.0.3"
|
|
60
|
+
ipykernel = "^7.2.0"
|
|
61
|
+
black = "^26.3.1"
|
|
63
62
|
isort = "^6.0.1"
|
|
64
63
|
#flake8 = "^7.1.2"
|
|
65
64
|
pytest-asyncio = "^1.1.0"
|
|
@@ -72,9 +71,11 @@ build-backend = "poetry.core.masonry.api"
|
|
|
72
71
|
[tool.pytest.ini_options]
|
|
73
72
|
asyncio_mode = "auto"
|
|
74
73
|
asyncio_default_fixture_loop_scope = "function"
|
|
74
|
+
markers = [
|
|
75
|
+
"llm: tests that exercise LLM code paths (mocked by default, real with --real-llm)",
|
|
76
|
+
"real_llm: tests that require a real LLM endpoint (skipped unless --real-llm)",
|
|
77
|
+
]
|
|
75
78
|
filterwarnings = [
|
|
76
|
-
"ignore::DeprecationWarning:mirascope.*",
|
|
77
|
-
"ignore::UserWarning:mirascope.*",
|
|
78
79
|
"ignore::DeprecationWarning:pydantic._internal._config",
|
|
79
80
|
"ignore::DeprecationWarning:httpx._models",
|
|
80
81
|
"ignore::UserWarning:pydantic.main"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Agent context for the dialectical framework.
|
|
3
|
+
|
|
4
|
+
Provides async-safe agent name propagation using contextvars.
|
|
5
|
+
The framework sets the agent name inside chat methods; concerns read it
|
|
6
|
+
for effect logging.
|
|
7
|
+
|
|
8
|
+
Framework layer usage (inside Analyst/Explorer):
|
|
9
|
+
from dialectical_framework.agents.agent_context import agent_scope
|
|
10
|
+
|
|
11
|
+
with agent_scope("analyst"):
|
|
12
|
+
result = await self._conversation.submit(...)
|
|
13
|
+
|
|
14
|
+
Read usage (inside ExecutionReport, EffectLogger):
|
|
15
|
+
from dialectical_framework.agents.agent_context import get_current_agent
|
|
16
|
+
|
|
17
|
+
agent = get_current_agent() # "analyst" or None
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import contextvars
|
|
23
|
+
from typing import Optional
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
_current_agent: contextvars.ContextVar[Optional[str]] = contextvars.ContextVar(
|
|
27
|
+
'current_agent', default=None
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def get_current_agent() -> Optional[str]:
|
|
32
|
+
"""Get the current agent name from context. Returns None if not set."""
|
|
33
|
+
return _current_agent.get()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class _AgentContextManager:
|
|
37
|
+
def __init__(self, name: str) -> None:
|
|
38
|
+
self._name = name
|
|
39
|
+
self._token: Optional[contextvars.Token] = None
|
|
40
|
+
|
|
41
|
+
def __enter__(self) -> str:
|
|
42
|
+
self._token = _current_agent.set(self._name)
|
|
43
|
+
return self._name
|
|
44
|
+
|
|
45
|
+
def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
|
|
46
|
+
if self._token is not None:
|
|
47
|
+
_current_agent.reset(self._token)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def agent_scope(name: str) -> _AgentContextManager:
|
|
51
|
+
"""Context manager for setting agent name within chat methods."""
|
|
52
|
+
return _AgentContextManager(name)
|