dialectical-framework 2.0.12__tar.gz → 2.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-2.0.12 → dialectical_framework-2.1.0}/PKG-INFO +1 -1
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/pyproject.toml +1 -1
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/settings.py +20 -2
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/bedrock_provider.py +146 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/LICENSE +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/PATENTS +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/README.md +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/advisor.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/build_policy.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/migration.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/reply_hygiene.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/system_prompts.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/deepen.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/explore.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/note.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/record_decision.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/scoped.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/advisor/tools/sync.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/agent_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/analyst.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/sketch_tetrad.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/system_prompts.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/app_spec.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/apps.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/consultant/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/consultant/consultant.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/execution_report.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/audit_feasibility.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/stream_events.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/toolsets.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/agents/turn_timing.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/ac_re_taxonomy.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/action_extraction.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/add_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/build_status.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/create_nexus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/decision_coherence_check.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/decision_confirmation_check.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/dialectical_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/discard.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/record_decision.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/source_digest.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/statement_classification.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/statement_headline.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/statement_placement.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/tetrad_candidates.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/tetrad_grounding.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/tetrad_sketch.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/transformation_sketch.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/concerns/view_sketch.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/dialectical_reasoning.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/enums/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/enums/causality_preset.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/enums/di.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/events/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/events/graph_event.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/events/graph_event_bus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/events/progress_event.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/exceptions/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/exceptions/node_errors.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/exceptions/provider_errors.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/estimation_manager.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/case.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/decision.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/input.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/note.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/statement.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/synthesis.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/transformation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/transition.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/nodes/wheel.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationship_manager.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/grounded_in_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/rendering.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/decision_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/note_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/transformation_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/repositories/wheel_repository.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/scope_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/views.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/wheel_segment.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/protocols/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/protocols/has_config.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/protocols/input_resolver.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/py.typed +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/settings_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/__init__.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/async_drain.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/call_census.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/chunking.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/concurrency.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/dc_replace.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/edge_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/effect_logger.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/format_compat.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/input_context.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/order_transitions.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/progress.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/retry_accounting.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/sequence_generation.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/thinking_compat.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/use_brain.py +0 -0
- {dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/utils/utterance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dialectical-framework
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.1.0
|
|
4
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
5
|
License: MIT
|
|
6
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "dialectical-framework"
|
|
3
|
-
version = "2.0
|
|
3
|
+
version = "2.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"
|
{dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/settings.py
RENAMED
|
@@ -288,8 +288,10 @@ class Settings(BaseModel):
|
|
|
288
288
|
# so this is a ceiling on one generation; on a streamed round it is the gap
|
|
289
289
|
# between two chunks, and a thinking turn streams its deltas (the
|
|
290
290
|
# facilitator asks for `include_thoughts`), so the long silence is the
|
|
291
|
-
# non-streamed case only.
|
|
292
|
-
#
|
|
291
|
+
# non-streamed case only. Since `llm_stream_awaited_calls` (below) every
|
|
292
|
+
# awaited call is streamed too, so this bounds the wait for the first
|
|
293
|
+
# content; a hang is caught earlier, when the response fails to open.
|
|
294
|
+
# 120s clears every unstalled generation in the archive (the longest measured conversational rounds sit under a minute on
|
|
293
295
|
# Sonnet 5 with thinking) while cutting a stall from 600s to two minutes. A
|
|
294
296
|
# host whose calls are short sets it lower: the first app's draws run ~15s,
|
|
295
297
|
# texts ~8s, structured calls ~3s on Sonnet 5.5, and it runs at 30s. Too
|
|
@@ -299,6 +301,21 @@ class Settings(BaseModel):
|
|
|
299
301
|
# timeout, when the provider registers.
|
|
300
302
|
llm_read_timeout_s: float = Field(default=120.0, description="Read timeout for LLM calls, in seconds: the longest one call may wait for the provider's next byte. Lower where every call is short; a stall then surfaces as a timeout instead of holding the caller.")
|
|
301
303
|
|
|
304
|
+
# Every awaited Bedrock call (`BedrockAnthropicProvider._create_async`) is
|
|
305
|
+
# sent as a stream and assembled into the same `Message` before Mirascope
|
|
306
|
+
# decodes it, so a stall is caught where it happens instead of at the whole
|
|
307
|
+
# read timeout: the response must OPEN within 5s (`_STREAM_HEADERS_TIMEOUT_S`),
|
|
308
|
+
# content must start within `llm_read_timeout_s`, and a gap past 5s once it
|
|
309
|
+
# flows is a stall. Measured on the first app's promise run (2026-10-12,
|
|
310
|
+
# Sonnet 5.5, 59 cases, read timeout 20s): ~5.5% of calls hang, ALL before
|
|
311
|
+
# the response opens, while healthy calls open in a median 1.2s whatever
|
|
312
|
+
# their size; against a same-day baseline, cards drawn 43 -> 51, cards past
|
|
313
|
+
# the app's deadline 9 -> 0, p90 53s -> 33s, cost unchanged. The switch
|
|
314
|
+
# exists as an off switch for a model or provider the measurement did not
|
|
315
|
+
# cover (`docs/dev-notes/streaming-latency-and-retry.md`, "Hangs are caught
|
|
316
|
+
# at the opening"). Per request.
|
|
317
|
+
llm_stream_awaited_calls: bool = Field(default=True, description="Send awaited provider calls as streams and assemble the message, so a hung call is caught when the response fails to open (5s) rather than at the whole read timeout. On by default; off only for a model or provider where streaming misbehaves.")
|
|
318
|
+
|
|
302
319
|
@classmethod
|
|
303
320
|
def from_partial(cls, partial_settings: Optional[Settings] = None) -> Self:
|
|
304
321
|
"""
|
|
@@ -377,5 +394,6 @@ class Settings(BaseModel):
|
|
|
377
394
|
**_env_thinking_level(),
|
|
378
395
|
llm_connect_timeout_s=float(os.getenv("DIALEXITY_LLM_CONNECT_TIMEOUT_S", 30.0)),
|
|
379
396
|
llm_read_timeout_s=float(os.getenv("DIALEXITY_LLM_READ_TIMEOUT_S", 120.0)),
|
|
397
|
+
llm_stream_awaited_calls=os.getenv("DIALEXITY_LLM_STREAM_AWAITED_CALLS", "true").lower() == "true",
|
|
380
398
|
effect_log_dir=os.getenv("DIALEXITY_GRAPH_LOG_DIR"),
|
|
381
399
|
)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
4
|
+
import logging
|
|
5
|
+
import time
|
|
3
6
|
from collections.abc import Mapping, Sequence
|
|
4
7
|
from typing import TYPE_CHECKING, Any, cast
|
|
5
8
|
|
|
@@ -18,6 +21,7 @@ from typing_extensions import Unpack
|
|
|
18
21
|
from dialectical_framework.enums.di import DI
|
|
19
22
|
from dialectical_framework.exceptions.provider_errors import ModelRefusal
|
|
20
23
|
from dialectical_framework.settings import Settings
|
|
24
|
+
from dialectical_framework.settings_context import get_current_settings
|
|
21
25
|
from dialectical_framework.utils.format_compat import (
|
|
22
26
|
learn_format_mode_from_error,
|
|
23
27
|
structured_output_format,
|
|
@@ -375,6 +379,135 @@ def raise_on_refusal(response: Any, model_name: str) -> None:
|
|
|
375
379
|
)
|
|
376
380
|
|
|
377
381
|
|
|
382
|
+
logger = logging.getLogger(__name__)
|
|
383
|
+
|
|
384
|
+
#: Once a streamed awaited call has started writing content, the longest it may
|
|
385
|
+
#: go without another event before it counts as a stall. Generation is a steady
|
|
386
|
+
#: flow of deltas, so a silence this long mid-content is a hang rather than a
|
|
387
|
+
#: slow token. Before the first content delta the wait is the read timeout:
|
|
388
|
+
#: that window holds queueing, prefill and (where a call thinks) the thinking
|
|
389
|
+
#: block. Fired once in 2,700 streamed calls on the first app's promise runs,
|
|
390
|
+
#: so it is a backstop; the measured hangs are all caught at the opening.
|
|
391
|
+
_STREAM_GAP_TIMEOUT_S = 5.0
|
|
392
|
+
|
|
393
|
+
#: How long a streamed awaited call may wait for the response to OPEN (headers,
|
|
394
|
+
#: `message_start`) before it counts as a stall. Measured on the first app's
|
|
395
|
+
#: promise run (2026-10-12, Sonnet 5.5, 890 streamed calls): every stall (48,
|
|
396
|
+
#: 5.4%) hung before the headers, while healthy calls opened at a median 1.2s,
|
|
397
|
+
#: p99 3.6s, whatever their size (6 of 842 past 5s). Streamed, the opening is
|
|
398
|
+
#: the one wait that does not grow with the output, so it is where a hang is
|
|
399
|
+
#: caught: here at 5s rather than at the whole read timeout.
|
|
400
|
+
_STREAM_HEADERS_TIMEOUT_S = 5.0
|
|
401
|
+
|
|
402
|
+
#: Deltas that are the answer being written, as opposed to thinking or
|
|
403
|
+
#: bookkeeping. The SDK's stream yields both the raw `content_block_delta` and
|
|
404
|
+
#: a synthesized event per delta kind.
|
|
405
|
+
_CONTENT_DELTAS = frozenset({"text_delta", "input_json_delta"})
|
|
406
|
+
_CONTENT_EVENTS = frozenset({"text", "input_json"})
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
class StreamReadTimeout(httpx.ReadTimeout):
|
|
410
|
+
"""A streamed awaited call went quiet past its budget.
|
|
411
|
+
|
|
412
|
+
Subclasses `httpx.ReadTimeout` so `use_brain._is_stall_error` reads it as a
|
|
413
|
+
stall (the name ends in `ReadTimeout`) and re-asks it once, exactly like a
|
|
414
|
+
socket read timeout on the non-streamed path.
|
|
415
|
+
"""
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def _is_content_event(event: Any) -> bool:
|
|
419
|
+
kind = getattr(event, "type", None)
|
|
420
|
+
if kind in _CONTENT_EVENTS:
|
|
421
|
+
return True
|
|
422
|
+
if kind == "content_block_delta":
|
|
423
|
+
return getattr(getattr(event, "delta", None), "type", None) in _CONTENT_DELTAS
|
|
424
|
+
return False
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
async def _stream_to_message(
|
|
428
|
+
manager: _LearningStreamManager, model_name: str, read_timeout_s: float
|
|
429
|
+
) -> AnthropicMessage:
|
|
430
|
+
"""Consume one stream and return the assembled `Message`, policing silence.
|
|
431
|
+
|
|
432
|
+
Three budgets: the response must OPEN within `_STREAM_HEADERS_TIMEOUT_S`
|
|
433
|
+
(where the measured hangs are), the first content must follow within the
|
|
434
|
+
read timeout (queueing, prefill, thinking), and once content flows a gap
|
|
435
|
+
longer than `_STREAM_GAP_TIMEOUT_S` is a stall.
|
|
436
|
+
|
|
437
|
+
The provider's `ping`s do not count as progress: a stream that only pings
|
|
438
|
+
is a hang the socket's read timeout would never see. Every stall is logged
|
|
439
|
+
with the phase it happened in: the phase is what chose the opening as the
|
|
440
|
+
place to police (all 137 measured hangs were there), and a shift in it is
|
|
441
|
+
the first sign that choice needs revisiting.
|
|
442
|
+
"""
|
|
443
|
+
loop = asyncio.get_running_loop()
|
|
444
|
+
started = time.monotonic()
|
|
445
|
+
headers_budget = min(_STREAM_HEADERS_TIMEOUT_S, read_timeout_s)
|
|
446
|
+
try:
|
|
447
|
+
stream = await asyncio.wait_for(manager.__aenter__(), timeout=headers_budget)
|
|
448
|
+
except asyncio.TimeoutError as e:
|
|
449
|
+
logger.warning(
|
|
450
|
+
"Stream stalled on %s before headers (%.1fs)",
|
|
451
|
+
model_name, time.monotonic() - started,
|
|
452
|
+
)
|
|
453
|
+
raise StreamReadTimeout(
|
|
454
|
+
f"stream did not open within {headers_budget:.0f}s"
|
|
455
|
+
) from e
|
|
456
|
+
except Exception as e:
|
|
457
|
+
if type(e).__name__.endswith(("TimeoutError", "ReadTimeout")):
|
|
458
|
+
logger.warning(
|
|
459
|
+
"Stream stalled on %s before headers (%.1fs)",
|
|
460
|
+
model_name, time.monotonic() - started,
|
|
461
|
+
)
|
|
462
|
+
raise
|
|
463
|
+
events = 0
|
|
464
|
+
first_content_s: float | None = None
|
|
465
|
+
try:
|
|
466
|
+
iterator = stream.__aiter__()
|
|
467
|
+
deadline = loop.time() + read_timeout_s
|
|
468
|
+
while True:
|
|
469
|
+
try:
|
|
470
|
+
event = await asyncio.wait_for(
|
|
471
|
+
iterator.__anext__(), timeout=max(deadline - loop.time(), 0.0)
|
|
472
|
+
)
|
|
473
|
+
except StopAsyncIteration:
|
|
474
|
+
break
|
|
475
|
+
except Exception as e:
|
|
476
|
+
timed_out_here = isinstance(e, asyncio.TimeoutError)
|
|
477
|
+
if not timed_out_here and not type(e).__name__.endswith(
|
|
478
|
+
("Timeout", "TimeoutError")
|
|
479
|
+
):
|
|
480
|
+
raise
|
|
481
|
+
elapsed = time.monotonic() - started
|
|
482
|
+
phase = (
|
|
483
|
+
"before first content"
|
|
484
|
+
if first_content_s is None
|
|
485
|
+
else f"mid-content (first content at {first_content_s:.1f}s)"
|
|
486
|
+
)
|
|
487
|
+
logger.warning(
|
|
488
|
+
"Stream stalled on %s %s: %.1fs, %d events",
|
|
489
|
+
model_name, phase, elapsed, events,
|
|
490
|
+
)
|
|
491
|
+
if not timed_out_here:
|
|
492
|
+
raise
|
|
493
|
+
raise StreamReadTimeout(
|
|
494
|
+
f"stream went quiet {phase} after {elapsed:.1f}s and {events} events"
|
|
495
|
+
) from e
|
|
496
|
+
if getattr(event, "type", None) == "ping":
|
|
497
|
+
continue
|
|
498
|
+
events += 1
|
|
499
|
+
if first_content_s is None and _is_content_event(event):
|
|
500
|
+
first_content_s = time.monotonic() - started
|
|
501
|
+
budget = read_timeout_s if first_content_s is None else _STREAM_GAP_TIMEOUT_S
|
|
502
|
+
deadline = loop.time() + budget
|
|
503
|
+
message = await stream.get_final_message()
|
|
504
|
+
except BaseException as e:
|
|
505
|
+
await manager.__aexit__(type(e), e, e.__traceback__)
|
|
506
|
+
raise
|
|
507
|
+
await manager.__aexit__(None, None, None)
|
|
508
|
+
return message
|
|
509
|
+
|
|
510
|
+
|
|
378
511
|
class BedrockAnthropicProvider(AnthropicProvider):
|
|
379
512
|
"""Mirascope v2 provider that routes through AnthropicBedrock client (async-native).
|
|
380
513
|
|
|
@@ -394,6 +527,7 @@ class BedrockAnthropicProvider(AnthropicProvider):
|
|
|
394
527
|
) -> None:
|
|
395
528
|
# Skip super().__init__() — parent creates Anthropic/AsyncAnthropic clients we don't need
|
|
396
529
|
timeout = _client_timeout(connect_timeout_s, read_timeout_s)
|
|
530
|
+
self._read_timeout_s = timeout.read or 120.0
|
|
397
531
|
self.client = AnthropicBedrock(timeout=timeout, max_retries=_SDK_MAX_RETRIES)
|
|
398
532
|
self.async_client = AsyncAnthropicBedrock(
|
|
399
533
|
timeout=timeout, max_retries=_SDK_MAX_RETRIES
|
|
@@ -468,8 +602,20 @@ class BedrockAnthropicProvider(AnthropicProvider):
|
|
|
468
602
|
models reject. `with_thinking_compat` translates by model name; if the
|
|
469
603
|
name heuristic is wrong the 400 itself says which shape is wanted, so
|
|
470
604
|
one retry is both sufficient and self-correcting. See thinking_compat.
|
|
605
|
+
|
|
606
|
+
With `Settings.llm_stream_awaited_calls` the same request goes out as a
|
|
607
|
+
stream and comes back as the same assembled `Message`, so a stall is
|
|
608
|
+
caught by the gap between chunks (`_stream_to_message`) instead of by a
|
|
609
|
+
ceiling on the whole generation. The stream manager learns the thinking
|
|
610
|
+
shape the same way.
|
|
471
611
|
"""
|
|
472
612
|
model_name = kwargs["model"]
|
|
613
|
+
if get_current_settings().llm_stream_awaited_calls:
|
|
614
|
+
return await _stream_to_message(
|
|
615
|
+
_LearningStreamManager(self.async_client, kwargs, params),
|
|
616
|
+
model_name,
|
|
617
|
+
self._read_timeout_s,
|
|
618
|
+
)
|
|
473
619
|
try:
|
|
474
620
|
return await self.async_client.messages.create(
|
|
475
621
|
**with_thinking_compat(model_name, kwargs, params)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dialectical_framework-2.0.12 → dialectical_framework-2.1.0}/src/dialectical_framework/enums/di.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|