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
|
@@ -0,0 +1,727 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Multimodal Capabilities - Vision, Audio, and RAG Integration
|
|
6
|
+
|
|
7
|
+
This module extends agent capabilities beyond text to support vision (image analysis),
|
|
8
|
+
audio processing, and Retrieval-Augmented Generation (RAG) with vector stores.
|
|
9
|
+
|
|
10
|
+
Research Foundations:
|
|
11
|
+
- "Multimodal Agents: A Survey" (arXiv:2404.12390, 2024)
|
|
12
|
+
- GPT-4V vision capabilities and safety considerations
|
|
13
|
+
- "AudioLM: Language Modeling Approach to Audio" (arXiv:2209.03143)
|
|
14
|
+
- RAG patterns from "Retrieval-Augmented Generation for Large Language Models"
|
|
15
|
+
(arXiv:2312.10997, 2023)
|
|
16
|
+
- Vector database integration patterns from Pinecone, Weaviate, ChromaDB docs
|
|
17
|
+
|
|
18
|
+
See docs/RESEARCH_FOUNDATION.md for complete references.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from typing import Any, Dict, List, Optional, Union, Tuple
|
|
22
|
+
from dataclasses import dataclass, field
|
|
23
|
+
from enum import Enum
|
|
24
|
+
from datetime import datetime
|
|
25
|
+
import base64
|
|
26
|
+
import hashlib
|
|
27
|
+
import json
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ModalityType(Enum):
|
|
31
|
+
"""Types of modalities supported"""
|
|
32
|
+
TEXT = "text"
|
|
33
|
+
IMAGE = "image"
|
|
34
|
+
AUDIO = "audio"
|
|
35
|
+
VIDEO = "video"
|
|
36
|
+
MULTIMODAL = "multimodal"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ImageFormat(Enum):
|
|
40
|
+
"""Supported image formats"""
|
|
41
|
+
JPEG = "jpeg"
|
|
42
|
+
PNG = "png"
|
|
43
|
+
GIF = "gif"
|
|
44
|
+
WEBP = "webp"
|
|
45
|
+
BASE64 = "base64"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class AudioFormat(Enum):
|
|
49
|
+
"""Supported audio formats"""
|
|
50
|
+
MP3 = "mp3"
|
|
51
|
+
WAV = "wav"
|
|
52
|
+
OGG = "ogg"
|
|
53
|
+
FLAC = "flac"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class VectorStoreType(Enum):
|
|
57
|
+
"""Supported vector store backends"""
|
|
58
|
+
PINECONE = "pinecone"
|
|
59
|
+
WEAVIATE = "weaviate"
|
|
60
|
+
CHROMA = "chroma"
|
|
61
|
+
QDRANT = "qdrant"
|
|
62
|
+
MILVUS = "milvus"
|
|
63
|
+
IN_MEMORY = "in_memory"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclass
|
|
67
|
+
class ImageInput:
|
|
68
|
+
"""
|
|
69
|
+
Image input for vision capabilities.
|
|
70
|
+
|
|
71
|
+
Attributes:
|
|
72
|
+
image_data: Base64-encoded image or file path
|
|
73
|
+
format: Image format
|
|
74
|
+
url: Optional URL if image is remote
|
|
75
|
+
metadata: Additional metadata (size, dimensions, etc.)
|
|
76
|
+
"""
|
|
77
|
+
image_data: str
|
|
78
|
+
format: ImageFormat
|
|
79
|
+
url: Optional[str] = None
|
|
80
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
81
|
+
|
|
82
|
+
def get_hash(self) -> str:
|
|
83
|
+
"""Get hash of image for caching/deduplication"""
|
|
84
|
+
return hashlib.sha256(self.image_data.encode()).hexdigest()[:16]
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@dataclass
|
|
88
|
+
class AudioInput:
|
|
89
|
+
"""
|
|
90
|
+
Audio input for audio processing.
|
|
91
|
+
|
|
92
|
+
Attributes:
|
|
93
|
+
audio_data: Base64-encoded audio or file path
|
|
94
|
+
format: Audio format
|
|
95
|
+
duration_seconds: Optional duration
|
|
96
|
+
sample_rate: Optional sample rate
|
|
97
|
+
metadata: Additional metadata
|
|
98
|
+
"""
|
|
99
|
+
audio_data: str
|
|
100
|
+
format: AudioFormat
|
|
101
|
+
duration_seconds: Optional[float] = None
|
|
102
|
+
sample_rate: Optional[int] = None
|
|
103
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@dataclass
|
|
107
|
+
class MultimodalInput:
|
|
108
|
+
"""
|
|
109
|
+
Combined multimodal input.
|
|
110
|
+
|
|
111
|
+
Attributes:
|
|
112
|
+
text: Optional text component
|
|
113
|
+
images: List of images
|
|
114
|
+
audio: List of audio inputs
|
|
115
|
+
metadata: Additional metadata
|
|
116
|
+
"""
|
|
117
|
+
text: Optional[str] = None
|
|
118
|
+
images: List[ImageInput] = field(default_factory=list)
|
|
119
|
+
audio: List[AudioInput] = field(default_factory=list)
|
|
120
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
121
|
+
|
|
122
|
+
def get_modalities(self) -> List[ModalityType]:
|
|
123
|
+
"""Get list of modalities present"""
|
|
124
|
+
modalities = []
|
|
125
|
+
if self.text:
|
|
126
|
+
modalities.append(ModalityType.TEXT)
|
|
127
|
+
if self.images:
|
|
128
|
+
modalities.append(ModalityType.IMAGE)
|
|
129
|
+
if self.audio:
|
|
130
|
+
modalities.append(ModalityType.AUDIO)
|
|
131
|
+
return modalities
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
@dataclass
|
|
135
|
+
class VectorDocument:
|
|
136
|
+
"""
|
|
137
|
+
Document with vector embedding for RAG.
|
|
138
|
+
|
|
139
|
+
Attributes:
|
|
140
|
+
doc_id: Unique document identifier
|
|
141
|
+
content: Document content (text)
|
|
142
|
+
embedding: Vector embedding (simplified as list)
|
|
143
|
+
metadata: Document metadata (source, timestamp, etc.)
|
|
144
|
+
"""
|
|
145
|
+
doc_id: str
|
|
146
|
+
content: str
|
|
147
|
+
embedding: List[float]
|
|
148
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
149
|
+
timestamp: datetime = field(default_factory=datetime.now)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class VisionCapability:
|
|
153
|
+
"""
|
|
154
|
+
Vision capabilities for image analysis.
|
|
155
|
+
|
|
156
|
+
Features:
|
|
157
|
+
- Image understanding and description
|
|
158
|
+
- Object detection and recognition
|
|
159
|
+
- Safety filtering for inappropriate content
|
|
160
|
+
- Content moderation
|
|
161
|
+
|
|
162
|
+
Note: This is a governance wrapper. Actual vision processing
|
|
163
|
+
would integrate with GPT-4V, Claude Vision, or similar models.
|
|
164
|
+
|
|
165
|
+
Usage:
|
|
166
|
+
vision = VisionCapability()
|
|
167
|
+
|
|
168
|
+
# Analyze image
|
|
169
|
+
result = vision.analyze_image(
|
|
170
|
+
image=ImageInput(image_data=base64_img, format=ImageFormat.PNG),
|
|
171
|
+
prompt="Describe this image"
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
# Check safety
|
|
175
|
+
safety_check = vision.check_image_safety(image)
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
def __init__(self):
|
|
179
|
+
self._analysis_history: List[Dict[str, Any]] = []
|
|
180
|
+
self._blocked_content_types = ["explicit", "violence", "harmful"]
|
|
181
|
+
|
|
182
|
+
def analyze_image(
|
|
183
|
+
self,
|
|
184
|
+
image: ImageInput,
|
|
185
|
+
prompt: str,
|
|
186
|
+
context: Optional[Dict[str, Any]] = None
|
|
187
|
+
) -> Dict[str, Any]:
|
|
188
|
+
"""
|
|
189
|
+
Analyze an image with a text prompt.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
image: Image to analyze
|
|
193
|
+
prompt: Text prompt for analysis
|
|
194
|
+
context: Additional context
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
Analysis results
|
|
198
|
+
"""
|
|
199
|
+
# Safety check first
|
|
200
|
+
safety_result = self.check_image_safety(image)
|
|
201
|
+
|
|
202
|
+
if not safety_result["safe"]:
|
|
203
|
+
return {
|
|
204
|
+
"success": False,
|
|
205
|
+
"error": "Image failed safety check",
|
|
206
|
+
"safety_violations": safety_result["violations"],
|
|
207
|
+
"blocked": True
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
# In production, would call vision model API here
|
|
211
|
+
# For now, return governance metadata
|
|
212
|
+
analysis = {
|
|
213
|
+
"success": True,
|
|
214
|
+
"image_hash": image.get_hash(),
|
|
215
|
+
"prompt": prompt,
|
|
216
|
+
"analysis": "Image analysis would be performed by vision model",
|
|
217
|
+
"safety_checked": True,
|
|
218
|
+
"timestamp": datetime.now().isoformat()
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
self._analysis_history.append({
|
|
222
|
+
"image_hash": image.get_hash(),
|
|
223
|
+
"prompt": prompt,
|
|
224
|
+
"timestamp": datetime.now().isoformat(),
|
|
225
|
+
"safe": True
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
return analysis
|
|
229
|
+
|
|
230
|
+
def check_image_safety(
|
|
231
|
+
self,
|
|
232
|
+
image: ImageInput
|
|
233
|
+
) -> Dict[str, Any]:
|
|
234
|
+
"""
|
|
235
|
+
Check if an image is safe for processing.
|
|
236
|
+
|
|
237
|
+
This is a governance hook. In production, would integrate
|
|
238
|
+
with content moderation APIs.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
image: Image to check
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
Safety check results
|
|
245
|
+
"""
|
|
246
|
+
# In production, would use actual content moderation
|
|
247
|
+
# For now, implement basic checks
|
|
248
|
+
|
|
249
|
+
violations = []
|
|
250
|
+
|
|
251
|
+
# Check metadata for warnings
|
|
252
|
+
if image.metadata.get("nsfw", False):
|
|
253
|
+
violations.append("explicit")
|
|
254
|
+
|
|
255
|
+
# Check file size (prevent abuse)
|
|
256
|
+
image_size = len(image.image_data)
|
|
257
|
+
if image_size > 10 * 1024 * 1024: # 10MB limit
|
|
258
|
+
violations.append("file_too_large")
|
|
259
|
+
|
|
260
|
+
return {
|
|
261
|
+
"safe": len(violations) == 0,
|
|
262
|
+
"violations": violations,
|
|
263
|
+
"image_hash": image.get_hash(),
|
|
264
|
+
"checked_at": datetime.now().isoformat()
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
def get_supported_formats(self) -> List[str]:
|
|
268
|
+
"""Get list of supported image formats"""
|
|
269
|
+
return [fmt.value for fmt in ImageFormat]
|
|
270
|
+
|
|
271
|
+
def get_analysis_history(self) -> List[Dict[str, Any]]:
|
|
272
|
+
"""Get history of image analyses"""
|
|
273
|
+
return self._analysis_history.copy()
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class AudioCapability:
|
|
277
|
+
"""
|
|
278
|
+
Audio processing capabilities.
|
|
279
|
+
|
|
280
|
+
Features:
|
|
281
|
+
- Audio transcription
|
|
282
|
+
- Audio generation
|
|
283
|
+
- Voice activity detection
|
|
284
|
+
- Content moderation for audio
|
|
285
|
+
|
|
286
|
+
Note: This is a governance wrapper. Actual audio processing
|
|
287
|
+
would integrate with Whisper, ElevenLabs, or similar services.
|
|
288
|
+
|
|
289
|
+
Usage:
|
|
290
|
+
audio = AudioCapability()
|
|
291
|
+
|
|
292
|
+
# Transcribe audio
|
|
293
|
+
result = audio.transcribe(
|
|
294
|
+
audio=AudioInput(audio_data=base64_audio, format=AudioFormat.MP3)
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
# Check safety
|
|
298
|
+
safety_check = audio.check_audio_safety(audio_input)
|
|
299
|
+
"""
|
|
300
|
+
|
|
301
|
+
def __init__(self):
|
|
302
|
+
self._transcription_history: List[Dict[str, Any]] = []
|
|
303
|
+
|
|
304
|
+
def transcribe(
|
|
305
|
+
self,
|
|
306
|
+
audio: AudioInput,
|
|
307
|
+
language: Optional[str] = None
|
|
308
|
+
) -> Dict[str, Any]:
|
|
309
|
+
"""
|
|
310
|
+
Transcribe audio to text.
|
|
311
|
+
|
|
312
|
+
Args:
|
|
313
|
+
audio: Audio to transcribe
|
|
314
|
+
language: Optional language hint
|
|
315
|
+
|
|
316
|
+
Returns:
|
|
317
|
+
Transcription results
|
|
318
|
+
"""
|
|
319
|
+
# Safety check
|
|
320
|
+
safety_result = self.check_audio_safety(audio)
|
|
321
|
+
|
|
322
|
+
if not safety_result["safe"]:
|
|
323
|
+
return {
|
|
324
|
+
"success": False,
|
|
325
|
+
"error": "Audio failed safety check",
|
|
326
|
+
"blocked": True
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
# In production, would call transcription API (e.g., Whisper)
|
|
330
|
+
result = {
|
|
331
|
+
"success": True,
|
|
332
|
+
"transcription": "Audio transcription would be performed by speech model",
|
|
333
|
+
"language": language or "auto-detect",
|
|
334
|
+
"duration": audio.duration_seconds,
|
|
335
|
+
"timestamp": datetime.now().isoformat()
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
self._transcription_history.append({
|
|
339
|
+
"audio_format": audio.format.value,
|
|
340
|
+
"language": language,
|
|
341
|
+
"timestamp": datetime.now().isoformat()
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
return result
|
|
345
|
+
|
|
346
|
+
def check_audio_safety(
|
|
347
|
+
self,
|
|
348
|
+
audio: AudioInput
|
|
349
|
+
) -> Dict[str, Any]:
|
|
350
|
+
"""
|
|
351
|
+
Check if audio is safe for processing.
|
|
352
|
+
|
|
353
|
+
Args:
|
|
354
|
+
audio: Audio to check
|
|
355
|
+
|
|
356
|
+
Returns:
|
|
357
|
+
Safety check results
|
|
358
|
+
"""
|
|
359
|
+
violations = []
|
|
360
|
+
|
|
361
|
+
# Check file size
|
|
362
|
+
audio_size = len(audio.audio_data)
|
|
363
|
+
if audio_size > 25 * 1024 * 1024: # 25MB limit
|
|
364
|
+
violations.append("file_too_large")
|
|
365
|
+
|
|
366
|
+
# Check duration
|
|
367
|
+
if audio.duration_seconds and audio.duration_seconds > 300: # 5 min limit
|
|
368
|
+
violations.append("duration_too_long")
|
|
369
|
+
|
|
370
|
+
return {
|
|
371
|
+
"safe": len(violations) == 0,
|
|
372
|
+
"violations": violations,
|
|
373
|
+
"checked_at": datetime.now().isoformat()
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
def get_supported_formats(self) -> List[str]:
|
|
377
|
+
"""Get list of supported audio formats"""
|
|
378
|
+
return [fmt.value for fmt in AudioFormat]
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
class VectorStoreIntegration:
|
|
382
|
+
"""
|
|
383
|
+
Integration with vector databases for RAG (Retrieval-Augmented Generation).
|
|
384
|
+
|
|
385
|
+
Features:
|
|
386
|
+
- Vector storage and retrieval
|
|
387
|
+
- Semantic search
|
|
388
|
+
- Hybrid search (vector + keyword)
|
|
389
|
+
- Multiple backend support (Pinecone, Weaviate, ChromaDB, etc.)
|
|
390
|
+
|
|
391
|
+
Usage:
|
|
392
|
+
vector_store = VectorStoreIntegration(
|
|
393
|
+
store_type=VectorStoreType.CHROMA,
|
|
394
|
+
collection_name="knowledge_base"
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
# Add documents
|
|
398
|
+
vector_store.add_documents([
|
|
399
|
+
VectorDocument(
|
|
400
|
+
doc_id="doc1",
|
|
401
|
+
content="AI safety is important",
|
|
402
|
+
embedding=[0.1, 0.2, 0.3, ...]
|
|
403
|
+
)
|
|
404
|
+
])
|
|
405
|
+
|
|
406
|
+
# Search
|
|
407
|
+
results = vector_store.search(
|
|
408
|
+
query_embedding=[0.1, 0.2, 0.3, ...],
|
|
409
|
+
top_k=5
|
|
410
|
+
)
|
|
411
|
+
"""
|
|
412
|
+
|
|
413
|
+
def __init__(
|
|
414
|
+
self,
|
|
415
|
+
store_type: VectorStoreType = VectorStoreType.IN_MEMORY,
|
|
416
|
+
collection_name: str = "default",
|
|
417
|
+
config: Optional[Dict[str, Any]] = None
|
|
418
|
+
):
|
|
419
|
+
self.store_type = store_type
|
|
420
|
+
self.collection_name = collection_name
|
|
421
|
+
self.config = config or {}
|
|
422
|
+
|
|
423
|
+
# In-memory storage for simplified implementation
|
|
424
|
+
self._documents: Dict[str, VectorDocument] = {}
|
|
425
|
+
self._index_built = False
|
|
426
|
+
|
|
427
|
+
def add_documents(
|
|
428
|
+
self,
|
|
429
|
+
documents: List[VectorDocument]
|
|
430
|
+
) -> Dict[str, Any]:
|
|
431
|
+
"""
|
|
432
|
+
Add documents to vector store.
|
|
433
|
+
|
|
434
|
+
Args:
|
|
435
|
+
documents: List of documents with embeddings
|
|
436
|
+
|
|
437
|
+
Returns:
|
|
438
|
+
Result with added document IDs
|
|
439
|
+
"""
|
|
440
|
+
added_ids = []
|
|
441
|
+
|
|
442
|
+
for doc in documents:
|
|
443
|
+
self._documents[doc.doc_id] = doc
|
|
444
|
+
added_ids.append(doc.doc_id)
|
|
445
|
+
|
|
446
|
+
self._index_built = False # Mark for reindexing
|
|
447
|
+
|
|
448
|
+
return {
|
|
449
|
+
"success": True,
|
|
450
|
+
"added_count": len(added_ids),
|
|
451
|
+
"document_ids": added_ids
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
def search(
|
|
455
|
+
self,
|
|
456
|
+
query_embedding: List[float],
|
|
457
|
+
top_k: int = 5,
|
|
458
|
+
filter_metadata: Optional[Dict[str, Any]] = None
|
|
459
|
+
) -> List[Dict[str, Any]]:
|
|
460
|
+
"""
|
|
461
|
+
Search for similar documents.
|
|
462
|
+
|
|
463
|
+
Args:
|
|
464
|
+
query_embedding: Query vector
|
|
465
|
+
top_k: Number of results to return
|
|
466
|
+
filter_metadata: Optional metadata filters
|
|
467
|
+
|
|
468
|
+
Returns:
|
|
469
|
+
List of similar documents with scores
|
|
470
|
+
"""
|
|
471
|
+
if not self._documents:
|
|
472
|
+
return []
|
|
473
|
+
|
|
474
|
+
# Calculate similarities (simplified cosine similarity)
|
|
475
|
+
results = []
|
|
476
|
+
|
|
477
|
+
for doc_id, doc in self._documents.items():
|
|
478
|
+
# Apply metadata filters if provided
|
|
479
|
+
if filter_metadata:
|
|
480
|
+
if not self._matches_filters(doc.metadata, filter_metadata):
|
|
481
|
+
continue
|
|
482
|
+
|
|
483
|
+
# Simplified similarity calculation
|
|
484
|
+
similarity = self._calculate_similarity(query_embedding, doc.embedding)
|
|
485
|
+
|
|
486
|
+
results.append({
|
|
487
|
+
"doc_id": doc_id,
|
|
488
|
+
"content": doc.content,
|
|
489
|
+
"similarity": similarity,
|
|
490
|
+
"metadata": doc.metadata
|
|
491
|
+
})
|
|
492
|
+
|
|
493
|
+
# Sort by similarity and return top k
|
|
494
|
+
results.sort(key=lambda x: x["similarity"], reverse=True)
|
|
495
|
+
return results[:top_k]
|
|
496
|
+
|
|
497
|
+
def delete_documents(
|
|
498
|
+
self,
|
|
499
|
+
doc_ids: List[str]
|
|
500
|
+
) -> Dict[str, Any]:
|
|
501
|
+
"""
|
|
502
|
+
Delete documents from vector store.
|
|
503
|
+
|
|
504
|
+
Args:
|
|
505
|
+
doc_ids: List of document IDs to delete
|
|
506
|
+
|
|
507
|
+
Returns:
|
|
508
|
+
Deletion results
|
|
509
|
+
"""
|
|
510
|
+
deleted = []
|
|
511
|
+
not_found = []
|
|
512
|
+
|
|
513
|
+
for doc_id in doc_ids:
|
|
514
|
+
if doc_id in self._documents:
|
|
515
|
+
del self._documents[doc_id]
|
|
516
|
+
deleted.append(doc_id)
|
|
517
|
+
else:
|
|
518
|
+
not_found.append(doc_id)
|
|
519
|
+
|
|
520
|
+
return {
|
|
521
|
+
"success": True,
|
|
522
|
+
"deleted_count": len(deleted),
|
|
523
|
+
"deleted_ids": deleted,
|
|
524
|
+
"not_found": not_found
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
def get_document(self, doc_id: str) -> Optional[VectorDocument]:
|
|
528
|
+
"""Get a document by ID"""
|
|
529
|
+
return self._documents.get(doc_id)
|
|
530
|
+
|
|
531
|
+
def list_documents(
|
|
532
|
+
self,
|
|
533
|
+
limit: Optional[int] = None
|
|
534
|
+
) -> List[Dict[str, Any]]:
|
|
535
|
+
"""
|
|
536
|
+
List documents in the collection.
|
|
537
|
+
|
|
538
|
+
Args:
|
|
539
|
+
limit: Optional limit on number of documents
|
|
540
|
+
|
|
541
|
+
Returns:
|
|
542
|
+
List of document metadata
|
|
543
|
+
"""
|
|
544
|
+
docs = list(self._documents.values())
|
|
545
|
+
|
|
546
|
+
if limit:
|
|
547
|
+
docs = docs[:limit]
|
|
548
|
+
|
|
549
|
+
return [
|
|
550
|
+
{
|
|
551
|
+
"doc_id": doc.doc_id,
|
|
552
|
+
"content_preview": doc.content[:100] + "..." if len(doc.content) > 100 else doc.content,
|
|
553
|
+
"metadata": doc.metadata,
|
|
554
|
+
"timestamp": doc.timestamp.isoformat()
|
|
555
|
+
}
|
|
556
|
+
for doc in docs
|
|
557
|
+
]
|
|
558
|
+
|
|
559
|
+
def get_stats(self) -> Dict[str, Any]:
|
|
560
|
+
"""Get collection statistics"""
|
|
561
|
+
return {
|
|
562
|
+
"store_type": self.store_type.value,
|
|
563
|
+
"collection_name": self.collection_name,
|
|
564
|
+
"document_count": len(self._documents),
|
|
565
|
+
"index_built": self._index_built
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
def _calculate_similarity(
|
|
569
|
+
self,
|
|
570
|
+
vec1: List[float],
|
|
571
|
+
vec2: List[float]
|
|
572
|
+
) -> float:
|
|
573
|
+
"""
|
|
574
|
+
Calculate cosine similarity between two vectors.
|
|
575
|
+
Simplified implementation.
|
|
576
|
+
"""
|
|
577
|
+
if len(vec1) != len(vec2):
|
|
578
|
+
return 0.0
|
|
579
|
+
|
|
580
|
+
# Dot product
|
|
581
|
+
dot_product = sum(a * b for a, b in zip(vec1, vec2))
|
|
582
|
+
|
|
583
|
+
# Magnitudes
|
|
584
|
+
mag1 = sum(a * a for a in vec1) ** 0.5
|
|
585
|
+
mag2 = sum(b * b for b in vec2) ** 0.5
|
|
586
|
+
|
|
587
|
+
if mag1 == 0 or mag2 == 0:
|
|
588
|
+
return 0.0
|
|
589
|
+
|
|
590
|
+
return dot_product / (mag1 * mag2)
|
|
591
|
+
|
|
592
|
+
def _matches_filters(
|
|
593
|
+
self,
|
|
594
|
+
metadata: Dict[str, Any],
|
|
595
|
+
filters: Dict[str, Any]
|
|
596
|
+
) -> bool:
|
|
597
|
+
"""Check if metadata matches filters"""
|
|
598
|
+
for key, value in filters.items():
|
|
599
|
+
if key not in metadata or metadata[key] != value:
|
|
600
|
+
return False
|
|
601
|
+
return True
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
class RAGPipeline:
|
|
605
|
+
"""
|
|
606
|
+
Complete RAG (Retrieval-Augmented Generation) pipeline.
|
|
607
|
+
|
|
608
|
+
Combines vector store retrieval with generation for knowledge-grounded responses.
|
|
609
|
+
|
|
610
|
+
Features:
|
|
611
|
+
- Document retrieval
|
|
612
|
+
- Context assembly
|
|
613
|
+
- Prompt engineering for RAG
|
|
614
|
+
- Citation tracking
|
|
615
|
+
|
|
616
|
+
Usage:
|
|
617
|
+
rag = RAGPipeline(vector_store)
|
|
618
|
+
|
|
619
|
+
# Query with RAG
|
|
620
|
+
response = rag.query(
|
|
621
|
+
"What is AI safety?",
|
|
622
|
+
query_embedding=[...],
|
|
623
|
+
top_k=3
|
|
624
|
+
)
|
|
625
|
+
"""
|
|
626
|
+
|
|
627
|
+
def __init__(self, vector_store: VectorStoreIntegration):
|
|
628
|
+
self.vector_store = vector_store
|
|
629
|
+
self._query_history: List[Dict[str, Any]] = []
|
|
630
|
+
|
|
631
|
+
def query(
|
|
632
|
+
self,
|
|
633
|
+
query_text: str,
|
|
634
|
+
query_embedding: List[float],
|
|
635
|
+
top_k: int = 3,
|
|
636
|
+
context: Optional[Dict[str, Any]] = None
|
|
637
|
+
) -> Dict[str, Any]:
|
|
638
|
+
"""
|
|
639
|
+
Query with RAG pipeline.
|
|
640
|
+
|
|
641
|
+
Args:
|
|
642
|
+
query_text: Query text
|
|
643
|
+
query_embedding: Query vector embedding
|
|
644
|
+
top_k: Number of documents to retrieve
|
|
645
|
+
context: Additional context
|
|
646
|
+
|
|
647
|
+
Returns:
|
|
648
|
+
RAG response with retrieved documents and citations
|
|
649
|
+
"""
|
|
650
|
+
# Retrieve relevant documents
|
|
651
|
+
retrieved_docs = self.vector_store.search(
|
|
652
|
+
query_embedding=query_embedding,
|
|
653
|
+
top_k=top_k
|
|
654
|
+
)
|
|
655
|
+
|
|
656
|
+
# Assemble context from retrieved documents
|
|
657
|
+
context_text = self._assemble_context(retrieved_docs)
|
|
658
|
+
|
|
659
|
+
# Create RAG prompt
|
|
660
|
+
rag_prompt = self._create_rag_prompt(query_text, context_text)
|
|
661
|
+
|
|
662
|
+
# Track query
|
|
663
|
+
self._query_history.append({
|
|
664
|
+
"query": query_text,
|
|
665
|
+
"retrieved_count": len(retrieved_docs),
|
|
666
|
+
"timestamp": datetime.now().isoformat()
|
|
667
|
+
})
|
|
668
|
+
|
|
669
|
+
return {
|
|
670
|
+
"success": True,
|
|
671
|
+
"query": query_text,
|
|
672
|
+
"retrieved_documents": retrieved_docs,
|
|
673
|
+
"context": context_text,
|
|
674
|
+
"rag_prompt": rag_prompt,
|
|
675
|
+
"citations": [doc["doc_id"] for doc in retrieved_docs]
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
def _assemble_context(
|
|
679
|
+
self,
|
|
680
|
+
retrieved_docs: List[Dict[str, Any]]
|
|
681
|
+
) -> str:
|
|
682
|
+
"""Assemble context from retrieved documents"""
|
|
683
|
+
context_parts = []
|
|
684
|
+
|
|
685
|
+
for i, doc in enumerate(retrieved_docs, 1):
|
|
686
|
+
context_parts.append(f"[{i}] {doc['content']}")
|
|
687
|
+
|
|
688
|
+
return "\n\n".join(context_parts)
|
|
689
|
+
|
|
690
|
+
def _create_rag_prompt(
|
|
691
|
+
self,
|
|
692
|
+
query: str,
|
|
693
|
+
context: str
|
|
694
|
+
) -> str:
|
|
695
|
+
"""Create RAG-style prompt"""
|
|
696
|
+
return f"""Use the following context to answer the question. Cite sources using [1], [2], etc.
|
|
697
|
+
|
|
698
|
+
Context:
|
|
699
|
+
{context}
|
|
700
|
+
|
|
701
|
+
Question: {query}
|
|
702
|
+
|
|
703
|
+
Answer:"""
|
|
704
|
+
|
|
705
|
+
def get_query_history(self) -> List[Dict[str, Any]]:
|
|
706
|
+
"""Get query history"""
|
|
707
|
+
return self._query_history.copy()
|
|
708
|
+
|
|
709
|
+
|
|
710
|
+
def create_multimodal_suite() -> Dict[str, Any]:
|
|
711
|
+
"""
|
|
712
|
+
Create a complete multimodal capabilities suite.
|
|
713
|
+
|
|
714
|
+
Returns:
|
|
715
|
+
Dictionary with vision, audio, and RAG capabilities
|
|
716
|
+
"""
|
|
717
|
+
vector_store = VectorStoreIntegration(
|
|
718
|
+
store_type=VectorStoreType.IN_MEMORY,
|
|
719
|
+
collection_name="knowledge_base"
|
|
720
|
+
)
|
|
721
|
+
|
|
722
|
+
return {
|
|
723
|
+
"vision": VisionCapability(),
|
|
724
|
+
"audio": AudioCapability(),
|
|
725
|
+
"vector_store": vector_store,
|
|
726
|
+
"rag_pipeline": RAGPipeline(vector_store)
|
|
727
|
+
}
|