agent_os_kernel 3.1.0__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.
- agent_control_plane/__init__.py +662 -0
- agent_control_plane/a2a_adapter.py +543 -0
- agent_control_plane/adapter.py +417 -0
- agent_control_plane/agent_hibernation.py +394 -0
- agent_control_plane/agent_kernel.py +470 -0
- agent_control_plane/compliance.py +720 -0
- agent_control_plane/constraint_graphs.py +478 -0
- agent_control_plane/control_plane.py +854 -0
- agent_control_plane/example_executors.py +195 -0
- agent_control_plane/execution_engine.py +231 -0
- agent_control_plane/flight_recorder.py +846 -0
- agent_control_plane/governance_layer.py +435 -0
- agent_control_plane/hf_utils.py +563 -0
- agent_control_plane/interfaces/__init__.py +55 -0
- agent_control_plane/interfaces/kernel_interface.py +361 -0
- agent_control_plane/interfaces/plugin_interface.py +497 -0
- agent_control_plane/interfaces/protocol_interfaces.py +387 -0
- agent_control_plane/kernel_space.py +1009 -0
- agent_control_plane/langchain_adapter.py +424 -0
- agent_control_plane/lifecycle.py +3113 -0
- agent_control_plane/mcp_adapter.py +653 -0
- agent_control_plane/ml_safety.py +563 -0
- agent_control_plane/multimodal.py +727 -0
- agent_control_plane/mute_agent.py +422 -0
- agent_control_plane/observability.py +787 -0
- agent_control_plane/orchestrator.py +482 -0
- agent_control_plane/plugin_registry.py +750 -0
- agent_control_plane/policy_engine.py +954 -0
- agent_control_plane/process_isolation.py +777 -0
- agent_control_plane/shadow_mode.py +310 -0
- agent_control_plane/signals.py +493 -0
- agent_control_plane/supervisor_agents.py +430 -0
- agent_control_plane/time_travel_debugger.py +557 -0
- agent_control_plane/tool_registry.py +452 -0
- agent_control_plane/vfs.py +697 -0
- agent_kernel/__init__.py +69 -0
- agent_kernel/analyzer.py +435 -0
- agent_kernel/auditor.py +36 -0
- agent_kernel/completeness_auditor.py +237 -0
- agent_kernel/detector.py +203 -0
- agent_kernel/kernel.py +744 -0
- agent_kernel/memory_manager.py +85 -0
- agent_kernel/models.py +374 -0
- agent_kernel/nudge_mechanism.py +263 -0
- agent_kernel/outcome_analyzer.py +338 -0
- agent_kernel/patcher.py +582 -0
- agent_kernel/semantic_analyzer.py +316 -0
- agent_kernel/semantic_purge.py +349 -0
- agent_kernel/simulator.py +449 -0
- agent_kernel/teacher.py +85 -0
- agent_kernel/triage.py +152 -0
- agent_os/__init__.py +409 -0
- agent_os/_adversarial_impl.py +200 -0
- agent_os/_circuit_breaker_impl.py +232 -0
- agent_os/_mcp_metrics.py +193 -0
- agent_os/adversarial.py +20 -0
- agent_os/agents_compat.py +490 -0
- agent_os/audit_logger.py +135 -0
- agent_os/base_agent.py +651 -0
- agent_os/circuit_breaker.py +34 -0
- agent_os/cli/__init__.py +659 -0
- agent_os/cli/cmd_audit.py +128 -0
- agent_os/cli/cmd_init.py +152 -0
- agent_os/cli/cmd_policy.py +41 -0
- agent_os/cli/cmd_policy_gen.py +180 -0
- agent_os/cli/cmd_validate.py +258 -0
- agent_os/cli/mcp_scan.py +265 -0
- agent_os/cli/output.py +192 -0
- agent_os/cli/policy_checker.py +330 -0
- agent_os/compat.py +74 -0
- agent_os/constraint_graph.py +234 -0
- agent_os/content_governance.py +140 -0
- agent_os/context_budget.py +305 -0
- agent_os/credential_redactor.py +224 -0
- agent_os/diff_policy.py +89 -0
- agent_os/egress_policy.py +159 -0
- agent_os/escalation.py +276 -0
- agent_os/event_bus.py +124 -0
- agent_os/exceptions.py +180 -0
- agent_os/execution_context_policy.py +141 -0
- agent_os/github_enterprise.py +96 -0
- agent_os/health.py +20 -0
- agent_os/integrations/__init__.py +279 -0
- agent_os/integrations/a2a_adapter.py +279 -0
- agent_os/integrations/agent_lightning/__init__.py +30 -0
- agent_os/integrations/anthropic_adapter.py +420 -0
- agent_os/integrations/autogen_adapter.py +620 -0
- agent_os/integrations/base.py +1137 -0
- agent_os/integrations/compat.py +229 -0
- agent_os/integrations/config.py +98 -0
- agent_os/integrations/conversation_guardian.py +957 -0
- agent_os/integrations/crewai_adapter.py +467 -0
- agent_os/integrations/drift_detector.py +425 -0
- agent_os/integrations/dry_run.py +124 -0
- agent_os/integrations/escalation.py +582 -0
- agent_os/integrations/gemini_adapter.py +364 -0
- agent_os/integrations/google_adk_adapter.py +633 -0
- agent_os/integrations/guardrails_adapter.py +394 -0
- agent_os/integrations/health.py +197 -0
- agent_os/integrations/langchain_adapter.py +654 -0
- agent_os/integrations/llamafirewall.py +343 -0
- agent_os/integrations/llamaindex_adapter.py +188 -0
- agent_os/integrations/logging.py +191 -0
- agent_os/integrations/maf_adapter.py +631 -0
- agent_os/integrations/mistral_adapter.py +365 -0
- agent_os/integrations/openai_adapter.py +816 -0
- agent_os/integrations/openai_agents_sdk.py +406 -0
- agent_os/integrations/policy_compose.py +171 -0
- agent_os/integrations/profiling.py +144 -0
- agent_os/integrations/pydantic_ai_adapter.py +420 -0
- agent_os/integrations/rate_limiter.py +130 -0
- agent_os/integrations/rbac.py +143 -0
- agent_os/integrations/registry.py +113 -0
- agent_os/integrations/scope_guard.py +303 -0
- agent_os/integrations/semantic_kernel_adapter.py +769 -0
- agent_os/integrations/smolagents_adapter.py +629 -0
- agent_os/integrations/templates.py +178 -0
- agent_os/integrations/token_budget.py +134 -0
- agent_os/integrations/tool_aliases.py +190 -0
- agent_os/integrations/webhooks.py +177 -0
- agent_os/lite.py +208 -0
- agent_os/mcp_gateway.py +385 -0
- agent_os/mcp_message_signer.py +273 -0
- agent_os/mcp_protocols.py +161 -0
- agent_os/mcp_response_scanner.py +232 -0
- agent_os/mcp_security.py +924 -0
- agent_os/mcp_session_auth.py +231 -0
- agent_os/mcp_sliding_rate_limiter.py +184 -0
- agent_os/memory_guard.py +409 -0
- agent_os/metrics.py +134 -0
- agent_os/mute.py +428 -0
- agent_os/mute_agent.py +209 -0
- agent_os/policies/__init__.py +77 -0
- agent_os/policies/async_evaluator.py +275 -0
- agent_os/policies/backends.py +670 -0
- agent_os/policies/bridge.py +169 -0
- agent_os/policies/budget.py +85 -0
- agent_os/policies/cli.py +294 -0
- agent_os/policies/conflict_resolution.py +270 -0
- agent_os/policies/data_classification.py +252 -0
- agent_os/policies/evaluator.py +239 -0
- agent_os/policies/policy_schema.json +228 -0
- agent_os/policies/rate_limiting.py +145 -0
- agent_os/policies/schema.py +115 -0
- agent_os/policies/shared.py +331 -0
- agent_os/prompt_injection.py +694 -0
- agent_os/providers.py +182 -0
- agent_os/py.typed +0 -0
- agent_os/retry.py +81 -0
- agent_os/reversibility.py +251 -0
- agent_os/sandbox.py +432 -0
- agent_os/sandbox_provider.py +140 -0
- agent_os/secure_codegen.py +525 -0
- agent_os/security_skills.py +538 -0
- agent_os/semantic_policy.py +422 -0
- agent_os/server/__init__.py +15 -0
- agent_os/server/__main__.py +25 -0
- agent_os/server/app.py +277 -0
- agent_os/server/models.py +104 -0
- agent_os/shift_left_metrics.py +130 -0
- agent_os/stateless.py +742 -0
- agent_os/supervisor.py +148 -0
- agent_os/task_outcome.py +148 -0
- agent_os/transparency.py +181 -0
- agent_os/trust_root.py +128 -0
- agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
- agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
- agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
- agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
- agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
- agent_os_observability/__init__.py +27 -0
- agent_os_observability/dashboards.py +898 -0
- agent_os_observability/metrics.py +398 -0
- agent_os_observability/server.py +223 -0
- agent_os_observability/tracer.py +232 -0
- agent_primitives/__init__.py +24 -0
- agent_primitives/failures.py +84 -0
- agent_primitives/py.typed +0 -0
- amb_core/__init__.py +177 -0
- amb_core/adapters/__init__.py +57 -0
- amb_core/adapters/aws_sqs_broker.py +376 -0
- amb_core/adapters/azure_servicebus_broker.py +340 -0
- amb_core/adapters/kafka_broker.py +260 -0
- amb_core/adapters/nats_broker.py +285 -0
- amb_core/adapters/rabbitmq_broker.py +235 -0
- amb_core/adapters/redis_broker.py +262 -0
- amb_core/broker.py +145 -0
- amb_core/bus.py +481 -0
- amb_core/cloudevents.py +509 -0
- amb_core/dlq.py +345 -0
- amb_core/hf_utils.py +536 -0
- amb_core/memory_broker.py +410 -0
- amb_core/models.py +141 -0
- amb_core/persistence.py +529 -0
- amb_core/schema.py +294 -0
- amb_core/tracing.py +358 -0
- atr/__init__.py +640 -0
- atr/access.py +348 -0
- atr/composition.py +645 -0
- atr/decorator.py +357 -0
- atr/executor.py +384 -0
- atr/health.py +557 -0
- atr/hf_utils.py +449 -0
- atr/injection.py +422 -0
- atr/metrics.py +440 -0
- atr/policies.py +403 -0
- atr/py.typed +2 -0
- atr/registry.py +452 -0
- atr/schema.py +480 -0
- atr/tools/safe/__init__.py +75 -0
- atr/tools/safe/calculator.py +467 -0
- atr/tools/safe/datetime_tool.py +443 -0
- atr/tools/safe/file_reader.py +402 -0
- atr/tools/safe/http_client.py +316 -0
- atr/tools/safe/json_parser.py +374 -0
- atr/tools/safe/text_tool.py +537 -0
- atr/tools/safe/toolkit.py +175 -0
- caas/__init__.py +162 -0
- caas/api/__init__.py +7 -0
- caas/api/server.py +1328 -0
- caas/caching.py +834 -0
- caas/cli.py +210 -0
- caas/conversation.py +223 -0
- caas/decay.py +72 -0
- caas/detection/__init__.py +9 -0
- caas/detection/detector.py +238 -0
- caas/enrichment.py +130 -0
- caas/gateway/__init__.py +27 -0
- caas/gateway/trust_gateway.py +474 -0
- caas/hf_utils.py +479 -0
- caas/ingestion/__init__.py +23 -0
- caas/ingestion/processors.py +253 -0
- caas/ingestion/structure_parser.py +188 -0
- caas/models.py +356 -0
- caas/pragmatic_truth.py +444 -0
- caas/routing/__init__.py +10 -0
- caas/routing/heuristic_router.py +58 -0
- caas/storage/__init__.py +9 -0
- caas/storage/store.py +389 -0
- caas/triad.py +213 -0
- caas/tuning/__init__.py +9 -0
- caas/tuning/tuner.py +329 -0
- caas/vfs/__init__.py +14 -0
- caas/vfs/filesystem.py +452 -0
- cmvk/__init__.py +218 -0
- cmvk/audit.py +402 -0
- cmvk/benchmarks.py +478 -0
- cmvk/constitutional.py +904 -0
- cmvk/hf_utils.py +301 -0
- cmvk/metrics.py +473 -0
- cmvk/profiles.py +300 -0
- cmvk/py.typed +0 -0
- cmvk/types.py +12 -0
- cmvk/verification.py +956 -0
- emk/__init__.py +89 -0
- emk/causal.py +352 -0
- emk/hf_utils.py +421 -0
- emk/indexer.py +83 -0
- emk/py.typed +0 -0
- emk/schema.py +204 -0
- emk/sleep_cycle.py +347 -0
- emk/store.py +281 -0
- iatp/__init__.py +166 -0
- iatp/attestation.py +461 -0
- iatp/cli.py +317 -0
- iatp/hf_utils.py +472 -0
- iatp/ipc_pipes.py +580 -0
- iatp/main.py +412 -0
- iatp/models/__init__.py +447 -0
- iatp/policy_engine.py +337 -0
- iatp/py.typed +2 -0
- iatp/recovery.py +321 -0
- iatp/security/__init__.py +270 -0
- iatp/sidecar/__init__.py +519 -0
- iatp/telemetry/__init__.py +164 -0
- iatp/tests/__init__.py +1 -0
- iatp/tests/test_attestation.py +370 -0
- iatp/tests/test_cli.py +131 -0
- iatp/tests/test_ed25519_attestation.py +211 -0
- iatp/tests/test_models.py +130 -0
- iatp/tests/test_policy_engine.py +347 -0
- iatp/tests/test_recovery.py +281 -0
- iatp/tests/test_security.py +222 -0
- iatp/tests/test_sidecar.py +167 -0
- iatp/tests/test_telemetry.py +175 -0
- mcp_kernel_server/__init__.py +28 -0
- mcp_kernel_server/cli.py +274 -0
- mcp_kernel_server/resources.py +217 -0
- mcp_kernel_server/server.py +564 -0
- mcp_kernel_server/tools.py +1174 -0
- mute_agent/__init__.py +68 -0
- mute_agent/core/__init__.py +1 -0
- mute_agent/core/execution_agent.py +166 -0
- mute_agent/core/handshake_protocol.py +201 -0
- mute_agent/core/reasoning_agent.py +238 -0
- mute_agent/knowledge_graph/__init__.py +1 -0
- mute_agent/knowledge_graph/graph_elements.py +65 -0
- mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
- mute_agent/knowledge_graph/subgraph.py +224 -0
- mute_agent/listener/__init__.py +43 -0
- mute_agent/listener/adapters/__init__.py +31 -0
- mute_agent/listener/adapters/base_adapter.py +189 -0
- mute_agent/listener/adapters/caas_adapter.py +344 -0
- mute_agent/listener/adapters/control_plane_adapter.py +436 -0
- mute_agent/listener/adapters/iatp_adapter.py +332 -0
- mute_agent/listener/adapters/scak_adapter.py +251 -0
- mute_agent/listener/listener.py +610 -0
- mute_agent/listener/state_observer.py +436 -0
- mute_agent/listener/threshold_config.py +313 -0
- mute_agent/super_system/__init__.py +1 -0
- mute_agent/super_system/router.py +204 -0
- mute_agent/visualization/__init__.py +10 -0
- mute_agent/visualization/graph_debugger.py +502 -0
- nexus/README.md +60 -0
- nexus/__init__.py +51 -0
- nexus/arbiter.py +359 -0
- nexus/client.py +466 -0
- nexus/dmz.py +444 -0
- nexus/escrow.py +430 -0
- nexus/exceptions.py +286 -0
- nexus/pyproject.toml +36 -0
- nexus/registry.py +393 -0
- nexus/reputation.py +425 -0
- nexus/schemas/__init__.py +51 -0
- nexus/schemas/compliance.py +276 -0
- nexus/schemas/escrow.py +251 -0
- nexus/schemas/manifest.py +225 -0
- nexus/schemas/receipt.py +208 -0
- nexus/tests/__init__.py +0 -0
- nexus/tests/conftest.py +146 -0
- nexus/tests/test_arbiter.py +192 -0
- nexus/tests/test_dmz.py +194 -0
- nexus/tests/test_escrow.py +276 -0
- nexus/tests/test_exceptions.py +225 -0
- nexus/tests/test_registry.py +232 -0
- nexus/tests/test_reputation.py +328 -0
- nexus/tests/test_schemas.py +295 -0
caas/tuning/tuner.py
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
Auto-tuning module for optimizing context weights.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import re
|
|
8
|
+
from typing import Dict, List, Any
|
|
9
|
+
from collections import Counter
|
|
10
|
+
|
|
11
|
+
from caas.models import Document, DocumentType, Section, ContentTier
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Basic tier weight mapping (replaces StructureParser.get_tier_base_weight)
|
|
15
|
+
_TIER_WEIGHTS = {
|
|
16
|
+
ContentTier.TIER_1_HIGH: 2.0,
|
|
17
|
+
ContentTier.TIER_2_MEDIUM: 1.0,
|
|
18
|
+
ContentTier.TIER_3_LOW: 0.5,
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class WeightTuner:
|
|
23
|
+
"""Automatically tunes weights for document sections."""
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
"""Initialize the weight tuner."""
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
# Base weights for different document types
|
|
30
|
+
TYPE_SPECIFIC_WEIGHTS = {
|
|
31
|
+
DocumentType.LEGAL_CONTRACT: {
|
|
32
|
+
"definitions": 2.0,
|
|
33
|
+
"terms": 1.8,
|
|
34
|
+
"obligations": 1.7,
|
|
35
|
+
"termination": 1.5,
|
|
36
|
+
"liability": 1.6,
|
|
37
|
+
"governing law": 1.4,
|
|
38
|
+
"default": 1.0,
|
|
39
|
+
},
|
|
40
|
+
DocumentType.TECHNICAL_DOCUMENTATION: {
|
|
41
|
+
"api": 1.8,
|
|
42
|
+
"parameters": 1.6,
|
|
43
|
+
"examples": 1.7,
|
|
44
|
+
"configuration": 1.5,
|
|
45
|
+
"installation": 1.4,
|
|
46
|
+
"quickstart": 1.9,
|
|
47
|
+
"default": 1.0,
|
|
48
|
+
},
|
|
49
|
+
DocumentType.SOURCE_CODE: {
|
|
50
|
+
"class": 1.6,
|
|
51
|
+
"function": 1.5,
|
|
52
|
+
"main": 1.8,
|
|
53
|
+
"api": 1.7,
|
|
54
|
+
"default": 1.0,
|
|
55
|
+
},
|
|
56
|
+
DocumentType.RESEARCH_PAPER: {
|
|
57
|
+
"abstract": 2.0,
|
|
58
|
+
"introduction": 1.5,
|
|
59
|
+
"methodology": 1.4,
|
|
60
|
+
"results": 1.7,
|
|
61
|
+
"conclusion": 1.8,
|
|
62
|
+
"default": 1.0,
|
|
63
|
+
},
|
|
64
|
+
DocumentType.TUTORIAL: {
|
|
65
|
+
"getting started": 1.9,
|
|
66
|
+
"step": 1.6,
|
|
67
|
+
"example": 1.7,
|
|
68
|
+
"exercise": 1.4,
|
|
69
|
+
"default": 1.0,
|
|
70
|
+
},
|
|
71
|
+
DocumentType.API_DOCUMENTATION: {
|
|
72
|
+
"endpoint": 1.8,
|
|
73
|
+
"authentication": 1.9,
|
|
74
|
+
"request": 1.6,
|
|
75
|
+
"response": 1.6,
|
|
76
|
+
"example": 1.7,
|
|
77
|
+
"default": 1.0,
|
|
78
|
+
},
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
def tune(self, document: Document) -> Document:
|
|
82
|
+
"""
|
|
83
|
+
Auto-tune weights for document sections based on content analysis.
|
|
84
|
+
|
|
85
|
+
Uses structure-aware indexing to assign tiers and calculate weights.
|
|
86
|
+
Tier 1 (High): Titles, Headers, Class Definitions, API Contracts
|
|
87
|
+
Tier 2 (Medium): Body text, Function logic
|
|
88
|
+
Tier 3 (Low): Footnotes, Comments, Disclaimers
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
document: The document to tune
|
|
92
|
+
|
|
93
|
+
Returns:
|
|
94
|
+
Document with optimized weights
|
|
95
|
+
"""
|
|
96
|
+
# Assign default tier to sections that don't have one
|
|
97
|
+
for section in document.sections:
|
|
98
|
+
if not section.tier:
|
|
99
|
+
section.tier = ContentTier.TIER_2_MEDIUM
|
|
100
|
+
|
|
101
|
+
# Get base weights for document type
|
|
102
|
+
base_weights = self.TYPE_SPECIFIC_WEIGHTS.get(
|
|
103
|
+
document.detected_type,
|
|
104
|
+
{"default": 1.0}
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Calculate weights for each section
|
|
108
|
+
for section in document.sections:
|
|
109
|
+
weight = self._calculate_section_weight(
|
|
110
|
+
section,
|
|
111
|
+
document.detected_type,
|
|
112
|
+
base_weights,
|
|
113
|
+
document
|
|
114
|
+
)
|
|
115
|
+
section.weight = weight
|
|
116
|
+
section.importance_score = self._calculate_importance_score(section)
|
|
117
|
+
|
|
118
|
+
# Store overall weights in document
|
|
119
|
+
document.weights = {
|
|
120
|
+
section.title: section.weight
|
|
121
|
+
for section in document.sections
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return document
|
|
125
|
+
|
|
126
|
+
def _calculate_section_weight(
|
|
127
|
+
self,
|
|
128
|
+
section: Section,
|
|
129
|
+
doc_type: DocumentType,
|
|
130
|
+
base_weights: Dict[str, float],
|
|
131
|
+
document: Document
|
|
132
|
+
) -> float:
|
|
133
|
+
"""Calculate weight for a specific section using tier-based approach."""
|
|
134
|
+
title_lower = section.title.lower()
|
|
135
|
+
|
|
136
|
+
# Start with tier-based base weight
|
|
137
|
+
if section.tier:
|
|
138
|
+
weight = _TIER_WEIGHTS.get(section.tier, 1.0)
|
|
139
|
+
else:
|
|
140
|
+
# Fallback to default if tier not assigned
|
|
141
|
+
weight = base_weights.get("default", 1.0)
|
|
142
|
+
|
|
143
|
+
# Apply type-specific keyword boosts on top of tier weight (additive, not multiplicative)
|
|
144
|
+
keyword_boost = 0.0
|
|
145
|
+
for keyword, keyword_weight in base_weights.items():
|
|
146
|
+
if keyword != "default" and keyword in title_lower:
|
|
147
|
+
keyword_boost = max(keyword_boost, keyword_weight - 1.0)
|
|
148
|
+
break # Only apply one keyword boost
|
|
149
|
+
|
|
150
|
+
# Add keyword boost instead of multiplying (prevents excessive amplification)
|
|
151
|
+
weight = weight + keyword_boost
|
|
152
|
+
|
|
153
|
+
# Adjust based on content analysis
|
|
154
|
+
content_factors = self._analyze_content_factors(section)
|
|
155
|
+
|
|
156
|
+
# Apply content-based adjustments
|
|
157
|
+
if content_factors["has_code_examples"]:
|
|
158
|
+
weight *= 1.2
|
|
159
|
+
|
|
160
|
+
if content_factors["has_definitions"]:
|
|
161
|
+
weight *= 1.3
|
|
162
|
+
|
|
163
|
+
if content_factors["has_important_markers"]:
|
|
164
|
+
weight *= 1.15
|
|
165
|
+
|
|
166
|
+
# Boost weight for longer, more substantial sections (but not for Tier 3)
|
|
167
|
+
if len(section.content) > 500 and section.tier != ContentTier.TIER_3_LOW:
|
|
168
|
+
weight *= 1.1
|
|
169
|
+
|
|
170
|
+
# Position-based adjustment (first and last sections often important)
|
|
171
|
+
section_index = document.sections.index(section)
|
|
172
|
+
total_sections = len(document.sections)
|
|
173
|
+
|
|
174
|
+
if section_index == 0 and section.tier != ContentTier.TIER_3_LOW:
|
|
175
|
+
weight *= 1.15
|
|
176
|
+
elif section_index == total_sections - 1 and section.tier != ContentTier.TIER_3_LOW:
|
|
177
|
+
weight *= 1.1
|
|
178
|
+
|
|
179
|
+
return round(weight, 2)
|
|
180
|
+
|
|
181
|
+
def _calculate_importance_score(self, section: Section) -> float:
|
|
182
|
+
"""Calculate an importance score for a section (0-1)."""
|
|
183
|
+
factors = self._analyze_content_factors(section)
|
|
184
|
+
|
|
185
|
+
score = 0.5 # Base score
|
|
186
|
+
|
|
187
|
+
if factors["has_code_examples"]:
|
|
188
|
+
score += 0.15
|
|
189
|
+
if factors["has_definitions"]:
|
|
190
|
+
score += 0.15
|
|
191
|
+
if factors["has_important_markers"]:
|
|
192
|
+
score += 0.1
|
|
193
|
+
if factors["keyword_density"] > 0.02:
|
|
194
|
+
score += 0.1
|
|
195
|
+
|
|
196
|
+
# Length factor
|
|
197
|
+
if len(section.content) > 300:
|
|
198
|
+
score += 0.05
|
|
199
|
+
|
|
200
|
+
return min(1.0, score)
|
|
201
|
+
|
|
202
|
+
def _analyze_content_factors(self, section: Section) -> Dict[str, Any]:
|
|
203
|
+
"""Analyze content to identify important factors."""
|
|
204
|
+
content = section.content.lower()
|
|
205
|
+
|
|
206
|
+
# Check for code examples
|
|
207
|
+
has_code = bool(
|
|
208
|
+
re.search(r'```|<code>|def |function |class ', content)
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
# Check for definitions
|
|
212
|
+
has_definitions = bool(
|
|
213
|
+
re.search(r'defined as|definition|means|refers to', content)
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# Check for importance markers
|
|
217
|
+
has_important = bool(
|
|
218
|
+
re.search(r'\b(important|critical|must|required|essential)\b', content)
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
# Calculate keyword density
|
|
222
|
+
important_words = [
|
|
223
|
+
'important', 'critical', 'must', 'required', 'key', 'essential'
|
|
224
|
+
]
|
|
225
|
+
words = content.split()
|
|
226
|
+
keyword_count = sum(1 for w in words if w in important_words)
|
|
227
|
+
keyword_density = keyword_count / len(words) if words else 0
|
|
228
|
+
|
|
229
|
+
return {
|
|
230
|
+
"has_code_examples": has_code,
|
|
231
|
+
"has_definitions": has_definitions,
|
|
232
|
+
"has_important_markers": has_important,
|
|
233
|
+
"keyword_density": keyword_density,
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
class CorpusAnalyzer:
|
|
238
|
+
"""Analyzes corpus of documents to optimize global weights."""
|
|
239
|
+
|
|
240
|
+
def __init__(self):
|
|
241
|
+
self.documents: List[Document] = []
|
|
242
|
+
|
|
243
|
+
def add_document(self, document: Document):
|
|
244
|
+
"""Add a document to the corpus."""
|
|
245
|
+
self.documents.append(document)
|
|
246
|
+
|
|
247
|
+
def analyze_corpus(self) -> Dict[str, Any]:
|
|
248
|
+
"""
|
|
249
|
+
Analyze the entire corpus to identify patterns.
|
|
250
|
+
|
|
251
|
+
Returns:
|
|
252
|
+
Analysis results including common patterns and optimization suggestions
|
|
253
|
+
"""
|
|
254
|
+
if not self.documents:
|
|
255
|
+
return {"status": "empty_corpus"}
|
|
256
|
+
|
|
257
|
+
# Count document types
|
|
258
|
+
type_counts = Counter(doc.detected_type for doc in self.documents)
|
|
259
|
+
|
|
260
|
+
# Analyze section patterns
|
|
261
|
+
section_patterns = self._analyze_section_patterns()
|
|
262
|
+
|
|
263
|
+
# Calculate average weights
|
|
264
|
+
average_weights = self._calculate_average_weights()
|
|
265
|
+
|
|
266
|
+
return {
|
|
267
|
+
"total_documents": len(self.documents),
|
|
268
|
+
"document_types": dict(type_counts),
|
|
269
|
+
"common_sections": section_patterns,
|
|
270
|
+
"average_weights": average_weights,
|
|
271
|
+
"optimization_suggestions": self._generate_suggestions(),
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
def _analyze_section_patterns(self) -> Dict[str, int]:
|
|
275
|
+
"""Analyze common section patterns across documents."""
|
|
276
|
+
section_counter = Counter()
|
|
277
|
+
|
|
278
|
+
for doc in self.documents:
|
|
279
|
+
for section in doc.sections:
|
|
280
|
+
# Normalize section title
|
|
281
|
+
normalized = section.title.lower().strip()
|
|
282
|
+
section_counter[normalized] += 1
|
|
283
|
+
|
|
284
|
+
# Return top 10 most common sections
|
|
285
|
+
return dict(section_counter.most_common(10))
|
|
286
|
+
|
|
287
|
+
def _calculate_average_weights(self) -> Dict[str, float]:
|
|
288
|
+
"""Calculate average weights across all documents."""
|
|
289
|
+
weight_sums: Dict[str, List[float]] = {}
|
|
290
|
+
|
|
291
|
+
for doc in self.documents:
|
|
292
|
+
for section in doc.sections:
|
|
293
|
+
title = section.title.lower()
|
|
294
|
+
if title not in weight_sums:
|
|
295
|
+
weight_sums[title] = []
|
|
296
|
+
weight_sums[title].append(section.weight)
|
|
297
|
+
|
|
298
|
+
# Calculate averages
|
|
299
|
+
averages = {}
|
|
300
|
+
for title, weights in weight_sums.items():
|
|
301
|
+
if weights:
|
|
302
|
+
averages[title] = round(sum(weights) / len(weights), 2)
|
|
303
|
+
|
|
304
|
+
return averages
|
|
305
|
+
|
|
306
|
+
def _generate_suggestions(self) -> List[str]:
|
|
307
|
+
"""Generate optimization suggestions based on corpus analysis."""
|
|
308
|
+
suggestions = []
|
|
309
|
+
|
|
310
|
+
if len(self.documents) < 5:
|
|
311
|
+
suggestions.append(
|
|
312
|
+
"Add more documents to improve weight optimization accuracy"
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
# Check for document type diversity
|
|
316
|
+
type_counts = Counter(doc.detected_type for doc in self.documents)
|
|
317
|
+
if len(type_counts) == 1:
|
|
318
|
+
suggestions.append(
|
|
319
|
+
"Corpus contains only one document type; consider adding variety"
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
# Check for common patterns
|
|
323
|
+
section_patterns = self._analyze_section_patterns()
|
|
324
|
+
if len(section_patterns) > 20:
|
|
325
|
+
suggestions.append(
|
|
326
|
+
"High section diversity detected; consider standardizing section names"
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
return suggestions
|
caas/vfs/__init__.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
Virtual File System module for Context-as-a-Service.
|
|
5
|
+
|
|
6
|
+
Provides a lightweight in-memory file system that maintains project state
|
|
7
|
+
shared across multiple SDLC agents, allowing agents to see each other's edits.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from caas.vfs.filesystem import VirtualFileSystem
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"VirtualFileSystem",
|
|
14
|
+
]
|