From 93aae0edb3e43fa027399138a64f5dc364bcd19c Mon Sep 17 00:00:00 2001 From: oib Date: Sat, 7 Mar 2026 15:11:42 +0100 Subject: [PATCH] refactor: replace SessionDep with explicit Annotated[Session, Depends(get_session)] across all routers - Replace SessionDep type alias with explicit Annotated[Session, Depends(get_session)] - Add missing imports for Session and Annotated types - Update all endpoint function signatures to use explicit dependency annotation - Apply changes consistently across all router files (admin, agent, marketplace, etc.) - Add marketplace_gpu router to main.py router includes --- apps/coordinator-api/src/app/main.py | 4 ++ .../app/routers/adaptive_learning_health.py | 7 +-- apps/coordinator-api/src/app/routers/admin.py | 12 +++--- .../src/app/routers/agent_creativity.py | 14 +++--- .../app/routers/agent_integration_router.py | 34 ++++++++------- .../src/app/routers/agent_performance.py | 30 +++++++------ .../src/app/routers/agent_router.py | 28 ++++++------ .../src/app/routers/agent_security_router.py | 38 ++++++++-------- .../src/app/routers/analytics.py | 26 +++++------ .../coordinator-api/src/app/routers/bounty.py | 35 +++++++-------- .../src/app/routers/certification.py | 38 ++++++++-------- .../coordinator-api/src/app/routers/client.py | 22 +++++----- .../src/app/routers/community.py | 22 +++++----- .../src/app/routers/dynamic_pricing.py | 4 +- .../src/app/routers/ecosystem_dashboard.py | 37 ++++++++-------- .../src/app/routers/edge_gpu.py | 6 ++- .../src/app/routers/explorer.py | 14 +++--- .../src/app/routers/governance.py | 18 ++++---- .../src/app/routers/gpu_multimodal_health.py | 7 +-- .../src/app/routers/marketplace.py | 16 ++++--- .../src/app/routers/marketplace_enhanced.py | 14 +++--- .../app/routers/marketplace_enhanced_app.py | 6 ++- .../routers/marketplace_enhanced_health.py | 7 +-- .../routers/marketplace_enhanced_simple.py | 14 +++--- .../src/app/routers/marketplace_gpu.py | 31 +++++++------ .../src/app/routers/marketplace_offers.py | 8 ++-- .../app/routers/marketplace_performance.py | 4 +- apps/coordinator-api/src/app/routers/miner.py | 22 +++++----- .../src/app/routers/ml_zk_proofs.py | 4 +- .../routers/modality_optimization_health.py | 7 +-- .../src/app/routers/monitoring_dashboard.py | 5 ++- .../src/app/routers/multi_modal_rl.py | 30 +++++++------ .../src/app/routers/multimodal_health.py | 7 +-- .../src/app/routers/openclaw_enhanced.py | 18 ++++---- .../src/app/routers/openclaw_enhanced_app.py | 6 ++- .../app/routers/openclaw_enhanced_health.py | 7 +-- .../app/routers/openclaw_enhanced_simple.py | 18 ++++---- .../src/app/routers/partners.py | 16 ++++--- .../src/app/routers/payments.py | 16 ++++--- .../src/app/routers/reputation.py | 36 ++++++++-------- .../src/app/routers/rewards.py | 26 +++++------ .../src/app/routers/services.py | 22 +++++----- .../src/app/routers/staking.py | 43 ++++++++++--------- .../src/app/routers/trading.py | 30 +++++++------ apps/coordinator-api/src/app/routers/users.py | 14 +++--- .../src/app/routers/zk_applications.py | 14 +++--- .../src/app/services/adaptive_learning.py | 7 ++- .../src/app/services/adaptive_learning_app.py | 14 +++--- .../src/app/services/advanced_ai_service.py | 6 ++- .../src/app/services/edge_gpu_service.py | 7 ++- .../src/app/services/gpu_multimodal.py | 7 ++- .../src/app/services/gpu_multimodal_app.py | 8 ++-- .../src/app/services/memory_manager.py | 5 ++- .../src/app/services/modality_optimization.py | 13 +++--- .../app/services/modality_optimization_app.py | 10 +++-- .../src/app/services/multimodal_agent.py | 7 ++- .../src/app/services/multimodal_app.py | 8 ++-- .../src/app/services/payments.py | 7 ++- .../src/app/storage/__init__.py | 9 +++- apps/coordinator-api/src/app/storage/db.py | 10 ++--- cli/aitbc_cli/commands/marketplace.py | 6 +-- 61 files changed, 542 insertions(+), 419 deletions(-) diff --git a/apps/coordinator-api/src/app/main.py b/apps/coordinator-api/src/app/main.py index a964b2e4..6a7892a8 100755 --- a/apps/coordinator-api/src/app/main.py +++ b/apps/coordinator-api/src/app/main.py @@ -251,6 +251,10 @@ def create_app() -> FastAPI: app.include_router(payments, prefix="/v1") app.include_router(web_vitals, prefix="/v1") app.include_router(edge_gpu) + + # Add standalone routers for tasks and payments + app.include_router(marketplace_gpu, prefix="/v1") + if ml_zk_proofs: app.include_router(ml_zk_proofs) app.include_router(marketplace_enhanced, prefix="/v1") diff --git a/apps/coordinator-api/src/app/routers/adaptive_learning_health.py b/apps/coordinator-api/src/app/routers/adaptive_learning_health.py index 828d5a7f..4e32b508 100755 --- a/apps/coordinator-api/src/app/routers/adaptive_learning_health.py +++ b/apps/coordinator-api/src/app/routers/adaptive_learning_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Adaptive Learning Service Health Check Router Provides health monitoring for reinforcement learning frameworks @@ -10,7 +11,7 @@ import sys import psutil from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.adaptive_learning import AdaptiveLearningService from ..logging import get_logger @@ -19,7 +20,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="Adaptive Learning Service Health") -async def adaptive_learning_health(session: SessionDep) -> Dict[str, Any]: +async def adaptive_learning_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for Adaptive Learning Service (Port 8005) """ @@ -104,7 +105,7 @@ async def adaptive_learning_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep Adaptive Learning Service Health") -async def adaptive_learning_deep_health(session: SessionDep) -> Dict[str, Any]: +async def adaptive_learning_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with learning framework validation """ diff --git a/apps/coordinator-api/src/app/routers/admin.py b/apps/coordinator-api/src/app/routers/admin.py index a64490b1..d73b5525 100755 --- a/apps/coordinator-api/src/app/routers/admin.py +++ b/apps/coordinator-api/src/app/routers/admin.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated from fastapi import APIRouter, Depends, HTTPException, status, Request, Header from sqlmodel import select from slowapi import Limiter @@ -6,7 +8,7 @@ from datetime import datetime from ..deps import require_admin_key from ..services import JobService, MinerService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..utils.cache import cached, get_cache_config from ..config import settings from aitbc.logging import get_logger @@ -46,7 +48,7 @@ async def test_key( @cached(**get_cache_config("job_list")) # Cache admin stats for 1 minute async def get_stats( request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str = Header(default=None, alias="X-Api-Key") ) -> dict[str, int]: # type: ignore[arg-type] # Temporary debug: bypass dependency and validate directly @@ -79,7 +81,7 @@ async def get_stats( @router.get("/jobs", summary="List jobs") -async def list_jobs(session: SessionDep, admin_key: str = Depends(require_admin_key())) -> dict[str, list[dict]]: # type: ignore[arg-type] +async def list_jobs(session: Annotated[Session, Depends(get_session)] = Depends(), admin_key: str = Depends(require_admin_key())) -> dict[str, list[dict]]: # type: ignore[arg-type] from ..domain import Job jobs = session.execute(select(Job).order_by(Job.requested_at.desc()).limit(100)).all() @@ -98,7 +100,7 @@ async def list_jobs(session: SessionDep, admin_key: str = Depends(require_admin_ @router.get("/miners", summary="List miners") -async def list_miners(session: SessionDep, admin_key: str = Depends(require_admin_key())) -> dict[str, list[dict]]: # type: ignore[arg-type] +async def list_miners(session: Annotated[Session, Depends(get_session)] = Depends(), admin_key: str = Depends(require_admin_key())) -> dict[str, list[dict]]: # type: ignore[arg-type] miner_service = MinerService(session) miners = [ { @@ -121,7 +123,7 @@ async def list_miners(session: SessionDep, admin_key: str = Depends(require_admi @router.get("/status", summary="Get system status", response_model=None) async def get_system_status( request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), admin_key: str = Depends(require_admin_key()) ) -> dict[str, any]: # type: ignore[arg-type] """Get comprehensive system status for admin dashboard""" diff --git a/apps/coordinator-api/src/app/routers/agent_creativity.py b/apps/coordinator-api/src/app/routers/agent_creativity.py index 5fdfeeef..436e94d1 100755 --- a/apps/coordinator-api/src/app/routers/agent_creativity.py +++ b/apps/coordinator-api/src/app/routers/agent_creativity.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Agent Creativity API Endpoints REST API for agent creativity enhancement, ideation, and cross-domain synthesis @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query, Body from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.creative_capabilities_service import ( CreativityEnhancementEngine, IdeationAlgorithm, CrossDomainCreativeIntegrator ) @@ -66,7 +68,7 @@ class SynthesisRequest(BaseModel): @router.post("/capabilities", response_model=CreativeCapabilityResponse) async def create_creative_capability( request: CreativeCapabilityCreate, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """Initialize a new creative capability for an agent""" engine = CreativityEnhancementEngine() @@ -90,7 +92,7 @@ async def create_creative_capability( async def enhance_creativity( capability_id: str, request: EnhanceCreativityRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """Enhance a specific creative capability using specified algorithm""" engine = CreativityEnhancementEngine() @@ -113,7 +115,7 @@ async def enhance_creativity( async def evaluate_creation( capability_id: str, request: EvaluateCreationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """Evaluate a creative output and update agent capability metrics""" engine = CreativityEnhancementEngine() @@ -153,7 +155,7 @@ async def generate_ideas(request: IdeationRequest): @router.post("/synthesis/cross-domain") async def synthesize_cross_domain( request: SynthesisRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """Synthesize concepts from multiple domains to create novel outputs""" integrator = CrossDomainCreativeIntegrator() @@ -176,7 +178,7 @@ async def synthesize_cross_domain( @router.get("/capabilities/{agent_id}") async def list_agent_creative_capabilities( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """List all creative capabilities for a specific agent""" try: diff --git a/apps/coordinator-api/src/app/routers/agent_integration_router.py b/apps/coordinator-api/src/app/routers/agent_integration_router.py index 4d1e6648..027eb272 100755 --- a/apps/coordinator-api/src/app/routers/agent_integration_router.py +++ b/apps/coordinator-api/src/app/routers/agent_integration_router.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Agent Integration and Deployment API Router for Verifiable AI Agent Orchestration Provides REST API endpoints for production deployment and integration management @@ -14,7 +16,7 @@ from ..services.agent_integration import ( AgentIntegrationManager, AgentDeploymentManager, AgentMonitoringManager, AgentProductionManager, DeploymentStatus, AgentDeploymentConfig, AgentDeploymentInstance ) -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from sqlmodel import Session, select from datetime import datetime @@ -29,7 +31,7 @@ async def create_deployment_config( workflow_id: str, deployment_name: str, deployment_config: dict, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create deployment configuration for agent workflow""" @@ -64,7 +66,7 @@ async def create_deployment_config( async def list_deployment_configs( workflow_id: Optional[str] = None, status: Optional[DeploymentStatus] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List deployment configurations with filtering""" @@ -97,7 +99,7 @@ async def list_deployment_configs( @router.get("/deployments/configs/{config_id}", response_model=AgentDeploymentConfig) async def get_deployment_config( config_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get specific deployment configuration""" @@ -125,7 +127,7 @@ async def get_deployment_config( async def deploy_workflow( config_id: str, target_environment: str = "production", - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Deploy agent workflow to target environment""" @@ -159,7 +161,7 @@ async def deploy_workflow( @router.get("/deployments/{config_id}/health") async def get_deployment_health( config_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get health status of deployment""" @@ -190,7 +192,7 @@ async def get_deployment_health( async def scale_deployment( config_id: str, target_instances: int, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Scale deployment to target number of instances""" @@ -224,7 +226,7 @@ async def scale_deployment( @router.post("/deployments/{config_id}/rollback") async def rollback_deployment( config_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Rollback deployment to previous version""" @@ -257,7 +259,7 @@ async def list_deployment_instances( deployment_id: Optional[str] = None, environment: Optional[str] = None, status: Optional[DeploymentStatus] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List deployment instances with filtering""" @@ -295,7 +297,7 @@ async def list_deployment_instances( @router.get("/deployments/instances/{instance_id}", response_model=AgentDeploymentInstance) async def get_deployment_instance( instance_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get specific deployment instance""" @@ -327,7 +329,7 @@ async def get_deployment_instance( async def integrate_with_zk_system( execution_id: str, verification_level: VerificationLevel = VerificationLevel.BASIC, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Integrate agent execution with ZK proof system""" @@ -362,7 +364,7 @@ async def integrate_with_zk_system( async def get_deployment_metrics( deployment_id: str, time_range: str = "1h", - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get metrics for deployment over time range""" @@ -397,7 +399,7 @@ async def deploy_to_production( workflow_id: str, deployment_config: dict, integration_config: Optional[dict] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Deploy agent workflow to production with full integration""" @@ -430,7 +432,7 @@ async def deploy_to_production( @router.get("/production/dashboard") async def get_production_dashboard( - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get comprehensive production dashboard data""" @@ -487,7 +489,7 @@ async def get_production_dashboard( @router.get("/production/health") async def get_production_health( - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get overall production health status""" @@ -560,7 +562,7 @@ async def get_production_health( async def get_production_alerts( severity: Optional[str] = None, limit: int = 50, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get production alerts and notifications""" diff --git a/apps/coordinator-api/src/app/routers/agent_performance.py b/apps/coordinator-api/src/app/routers/agent_performance.py index 8c468bfd..6ec57727 100755 --- a/apps/coordinator-api/src/app/routers/agent_performance.py +++ b/apps/coordinator-api/src/app/routers/agent_performance.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Advanced Agent Performance API Endpoints REST API for meta-learning, resource optimization, and performance enhancement @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.agent_performance_service import ( AgentPerformanceService, MetaLearningEngine, ResourceManager, PerformanceOptimizer ) @@ -151,7 +153,7 @@ class CapabilityResponse(BaseModel): @router.post("/profiles", response_model=PerformanceProfileResponse) async def create_performance_profile( profile_request: PerformanceProfileRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> PerformanceProfileResponse: """Create agent performance profile""" @@ -190,7 +192,7 @@ async def create_performance_profile( @router.get("/profiles/{agent_id}", response_model=Dict[str, Any]) async def get_performance_profile( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get agent performance profile""" @@ -216,7 +218,7 @@ async def update_performance_metrics( agent_id: str, metrics: Dict[str, float], task_context: Optional[Dict[str, Any]] = None, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Update agent performance metrics""" @@ -245,7 +247,7 @@ async def update_performance_metrics( @router.post("/meta-learning/models", response_model=MetaLearningResponse) async def create_meta_learning_model( model_request: MetaLearningRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> MetaLearningResponse: """Create meta-learning model""" @@ -284,7 +286,7 @@ async def adapt_model_to_task( model_id: str, task_data: Dict[str, Any], adaptation_steps: int = Query(default=10, ge=1, le=50), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Adapt meta-learning model to new task""" @@ -317,7 +319,7 @@ async def list_meta_learning_models( status: Optional[str] = Query(default=None, description="Filter by status"), meta_strategy: Optional[str] = Query(default=None, description="Filter by meta strategy"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """List meta-learning models""" @@ -360,7 +362,7 @@ async def list_meta_learning_models( @router.post("/resources/allocate", response_model=ResourceAllocationResponse) async def allocate_resources( allocation_request: ResourceAllocationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> ResourceAllocationResponse: """Allocate resources for agent task""" @@ -398,7 +400,7 @@ async def get_resource_allocations( agent_id: str, status: Optional[str] = Query(default=None, description="Filter by status"), limit: int = Query(default=20, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get resource allocations for agent""" @@ -443,7 +445,7 @@ async def get_resource_allocations( @router.post("/optimization/optimize", response_model=PerformanceOptimizationResponse) async def optimize_performance( optimization_request: PerformanceOptimizationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> PerformanceOptimizationResponse: """Optimize agent performance""" @@ -482,7 +484,7 @@ async def get_optimization_history( status: Optional[str] = Query(default=None, description="Filter by status"), target_metric: Optional[str] = Query(default=None, description="Filter by target metric"), limit: int = Query(default=20, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get optimization history for agent""" @@ -530,7 +532,7 @@ async def get_optimization_history( @router.post("/capabilities", response_model=CapabilityResponse) async def create_capability( capability_request: CapabilityRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> CapabilityResponse: """Create agent capability""" @@ -577,7 +579,7 @@ async def get_agent_capabilities( capability_type: Optional[str] = Query(default=None, description="Filter by capability type"), domain_area: Optional[str] = Query(default=None, description="Filter by domain area"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get agent capabilities""" @@ -629,7 +631,7 @@ async def get_performance_summary( agent_ids: List[str] = Query(default=[], description="List of agent IDs"), metric: Optional[str] = Query(default="overall_score", description="Metric to summarize"), period: str = Query(default="7d", description="Time period"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get performance summary for agents""" diff --git a/apps/coordinator-api/src/app/routers/agent_router.py b/apps/coordinator-api/src/app/routers/agent_router.py index 583acfef..bc966147 100755 --- a/apps/coordinator-api/src/app/routers/agent_router.py +++ b/apps/coordinator-api/src/app/routers/agent_router.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ AI Agent API Router for Verifiable AI Agent Orchestration Provides REST API endpoints for agent workflow management and execution @@ -14,7 +16,7 @@ from ..domain.agent import ( AgentStatus, VerificationLevel ) from ..services.agent_service import AIAgentOrchestrator -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from sqlmodel import Session, select @@ -26,7 +28,7 @@ router = APIRouter(prefix="/agents", tags=["AI Agents"]) @router.post("/workflows", response_model=AIAgentWorkflow) async def create_workflow( workflow_data: AgentWorkflowCreate, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create a new AI agent workflow""" @@ -54,7 +56,7 @@ async def list_workflows( owner_id: Optional[str] = None, is_public: Optional[bool] = None, tags: Optional[List[str]] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List agent workflows with filtering""" @@ -91,7 +93,7 @@ async def list_workflows( @router.get("/workflows/{workflow_id}", response_model=AIAgentWorkflow) async def get_workflow( workflow_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get a specific agent workflow""" @@ -118,7 +120,7 @@ async def get_workflow( async def update_workflow( workflow_id: str, workflow_data: AgentWorkflowUpdate, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Update an agent workflow""" @@ -154,7 +156,7 @@ async def update_workflow( @router.delete("/workflows/{workflow_id}") async def delete_workflow( workflow_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Delete an agent workflow""" @@ -186,7 +188,7 @@ async def execute_workflow( workflow_id: str, execution_request: AgentExecutionRequest, background_tasks: BackgroundTasks, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Execute an AI agent workflow""" @@ -229,7 +231,7 @@ async def execute_workflow( @router.get("/executions/{execution_id}/status", response_model=AgentExecutionStatus) async def get_execution_status( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get execution status""" @@ -263,7 +265,7 @@ async def list_executions( status: Optional[AgentStatus] = None, limit: int = 50, offset: int = 0, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List agent executions with filtering""" @@ -321,7 +323,7 @@ async def list_executions( @router.post("/executions/{execution_id}/cancel") async def cancel_execution( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Cancel an ongoing execution""" @@ -365,7 +367,7 @@ async def cancel_execution( @router.get("/executions/{execution_id}/logs") async def get_execution_logs( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get execution logs""" @@ -427,7 +429,7 @@ async def test_endpoint(): @router.post("/networks", response_model=dict, status_code=201) async def create_agent_network( network_data: dict, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create a new agent network for collaborative processing""" @@ -467,7 +469,7 @@ async def create_agent_network( @router.get("/executions/{execution_id}/receipt") async def get_execution_receipt( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get verifiable receipt for completed execution""" diff --git a/apps/coordinator-api/src/app/routers/agent_security_router.py b/apps/coordinator-api/src/app/routers/agent_security_router.py index 60726d39..4219ac43 100755 --- a/apps/coordinator-api/src/app/routers/agent_security_router.py +++ b/apps/coordinator-api/src/app/routers/agent_security_router.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Agent Security API Router for Verifiable AI Agent Orchestration Provides REST API endpoints for security management and auditing @@ -15,7 +17,7 @@ from ..services.agent_security import ( SecurityLevel, AuditEventType, AgentSecurityPolicy, AgentTrustScore, AgentSandboxConfig, AgentAuditLog ) -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from sqlmodel import Session, select @@ -30,7 +32,7 @@ async def create_security_policy( description: str, security_level: SecurityLevel, policy_rules: dict, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create a new security policy""" @@ -56,7 +58,7 @@ async def create_security_policy( async def list_security_policies( security_level: Optional[SecurityLevel] = None, is_active: Optional[bool] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List security policies with filtering""" @@ -81,7 +83,7 @@ async def list_security_policies( @router.get("/policies/{policy_id}", response_model=AgentSecurityPolicy) async def get_security_policy( policy_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get a specific security policy""" @@ -104,7 +106,7 @@ async def get_security_policy( async def update_security_policy( policy_id: str, policy_updates: dict, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Update a security policy""" @@ -146,7 +148,7 @@ async def update_security_policy( @router.delete("/policies/{policy_id}") async def delete_security_policy( policy_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Delete a security policy""" @@ -182,7 +184,7 @@ async def delete_security_policy( @router.post("/validate-workflow/{workflow_id}") async def validate_workflow_security( workflow_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Validate workflow security requirements""" @@ -222,7 +224,7 @@ async def list_audit_logs( risk_score_max: Optional[int] = None, limit: int = 100, offset: int = 0, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List audit logs with filtering""" @@ -265,7 +267,7 @@ async def list_audit_logs( @router.get("/audit-logs/{audit_id}", response_model=AgentAuditLog) async def get_audit_log( audit_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get a specific audit log entry""" @@ -294,7 +296,7 @@ async def list_trust_scores( max_score: Optional[float] = None, limit: int = 100, offset: int = 0, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """List trust scores with filtering""" @@ -330,7 +332,7 @@ async def list_trust_scores( async def get_trust_score( entity_type: str, entity_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get trust score for specific entity""" @@ -365,7 +367,7 @@ async def update_trust_score( execution_time: Optional[float] = None, security_violation: bool = False, policy_violation: bool = False, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Update trust score based on execution results""" @@ -411,7 +413,7 @@ async def create_sandbox( execution_id: str, security_level: SecurityLevel = SecurityLevel.PUBLIC, workflow_requirements: Optional[dict] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create sandbox environment for agent execution""" @@ -449,7 +451,7 @@ async def create_sandbox( @router.get("/sandbox/{execution_id}/monitor") async def monitor_sandbox( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Monitor sandbox execution for security violations""" @@ -468,7 +470,7 @@ async def monitor_sandbox( @router.post("/sandbox/{execution_id}/cleanup") async def cleanup_sandbox( execution_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Clean up sandbox environment after execution""" @@ -498,7 +500,7 @@ async def cleanup_sandbox( async def monitor_execution_security( execution_id: str, workflow_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Monitor execution for security violations""" @@ -518,7 +520,7 @@ async def monitor_execution_security( @router.get("/security-dashboard") async def get_security_dashboard( - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get comprehensive security dashboard data""" @@ -586,7 +588,7 @@ async def get_security_dashboard( @router.get("/security-stats") async def get_security_statistics( - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get security statistics and metrics""" diff --git a/apps/coordinator-api/src/app/routers/analytics.py b/apps/coordinator-api/src/app/routers/analytics.py index f2148f81..c0900ade 100755 --- a/apps/coordinator-api/src/app/routers/analytics.py +++ b/apps/coordinator-api/src/app/routers/analytics.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Marketplace Analytics API Endpoints REST API for analytics, insights, reporting, and dashboards @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.analytics_service import MarketplaceAnalytics from ..domain.analytics import ( MarketMetric, MarketInsight, AnalyticsReport, DashboardConfig, @@ -109,7 +111,7 @@ class AnalyticsSummaryResponse(BaseModel): @router.post("/data-collection", response_model=AnalyticsSummaryResponse) async def collect_market_data( period_type: AnalyticsPeriod = Query(default=AnalyticsPeriod.DAILY, description="Collection period"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> AnalyticsSummaryResponse: """Collect market data for analytics""" @@ -131,7 +133,7 @@ async def get_market_insights( insight_type: Optional[str] = Query(default=None, description="Filter by insight type"), impact_level: Optional[str] = Query(default=None, description="Filter by impact level"), limit: int = Query(default=20, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get market insights and analysis""" @@ -169,7 +171,7 @@ async def get_market_metrics( category: Optional[str] = Query(default=None, description="Filter by category"), geographic_region: Optional[str] = Query(default=None, description="Filter by region"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[MetricResponse]: """Get market metrics with filters""" @@ -213,7 +215,7 @@ async def get_market_metrics( @router.get("/overview", response_model=MarketOverviewResponse) async def get_market_overview( - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> MarketOverviewResponse: """Get comprehensive market overview""" @@ -234,7 +236,7 @@ async def create_dashboard( owner_id: str, dashboard_type: str = Query(default="default", description="Dashboard type: default, executive"), name: Optional[str] = Query(default=None, description="Custom dashboard name"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> DashboardResponse: """Create analytics dashboard""" @@ -275,7 +277,7 @@ async def create_dashboard( @router.get("/dashboards/{dashboard_id}", response_model=DashboardResponse) async def get_dashboard( dashboard_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> DashboardResponse: """Get dashboard configuration""" @@ -316,7 +318,7 @@ async def list_dashboards( dashboard_type: Optional[str] = Query(default=None, description="Filter by dashboard type"), status: Optional[str] = Query(default=None, description="Filter by status"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[DashboardResponse]: """List analytics dashboards with filters""" @@ -361,7 +363,7 @@ async def list_dashboards( @router.post("/reports", response_model=Dict[str, Any]) async def generate_report( report_request: ReportRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Generate analytics report""" @@ -435,7 +437,7 @@ async def generate_report( async def get_report( report_id: str, format: str = Query(default="json", description="Response format: json, csv, pdf"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get generated analytics report""" @@ -489,7 +491,7 @@ async def get_analytics_alerts( severity: Optional[str] = Query(default=None, description="Filter by severity level"), status: Optional[str] = Query(default="active", description="Filter by status"), limit: int = Query(default=20, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get analytics alerts""" @@ -534,7 +536,7 @@ async def get_analytics_alerts( @router.get("/kpi") async def get_key_performance_indicators( period_type: AnalyticsPeriod = Query(default=AnalyticsPeriod.DAILY, description="Period type"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get key performance indicators""" diff --git a/apps/coordinator-api/src/app/routers/bounty.py b/apps/coordinator-api/src/app/routers/bounty.py index 66e5080a..4c873e15 100755 --- a/apps/coordinator-api/src/app/routers/bounty.py +++ b/apps/coordinator-api/src/app/routers/bounty.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Bounty Management API REST API for AI agent bounty system with ZK-proof verification @@ -9,7 +10,7 @@ from typing import List, Optional, Dict, Any from datetime import datetime, timedelta from pydantic import BaseModel, Field, validator -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..logging import get_logger from ..domain.bounty import ( Bounty, BountySubmission, BountyStatus, BountyTier, @@ -162,7 +163,7 @@ class BountyStatsResponse(BaseModel): tier_distribution: Dict[str, int] # Dependency injection -def get_bounty_service(session: SessionDep) -> BountyService: +def get_bounty_service(session: Annotated[Session, Depends(get_session)]) -> BountyService: return BountyService(session) def get_blockchain_service() -> BlockchainService: @@ -173,7 +174,7 @@ def get_blockchain_service() -> BlockchainService: async def create_bounty( request: BountyCreateRequest, background_tasks: BackgroundTasks, - session: SessionDep, + session: Annotated[Session, Depends(get_session)], bounty_service: BountyService = Depends(get_bounty_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -206,7 +207,7 @@ async def create_bounty( @router.get("/bounties", response_model=List[BountyResponse]) async def get_bounties( filters: BountyFilterRequest = Depends(), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get filtered list of bounties""" @@ -235,7 +236,7 @@ async def get_bounties( @router.get("/bounties/{bounty_id}", response_model=BountyResponse) async def get_bounty( bounty_id: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get bounty details""" @@ -257,7 +258,7 @@ async def submit_bounty_solution( bounty_id: str, request: BountySubmissionRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -306,7 +307,7 @@ async def submit_bounty_solution( @router.get("/bounties/{bounty_id}/submissions", response_model=List[BountySubmissionResponse]) async def get_bounty_submissions( bounty_id: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), current_user: dict = Depends(get_current_user) ): @@ -336,7 +337,7 @@ async def verify_bounty_submission( bounty_id: str, request: BountyVerificationRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -376,7 +377,7 @@ async def dispute_bounty_submission( bounty_id: str, request: BountyDisputeRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -411,7 +412,7 @@ async def get_my_created_bounties( status: Optional[BountyStatus] = None, page: int = Field(default=1, ge=1), limit: int = Field(default=20, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), current_user: dict = Depends(get_current_user) ): @@ -435,7 +436,7 @@ async def get_my_submissions( status: Optional[SubmissionStatus] = None, page: int = Field(default=1, ge=1), limit: int = Field(default=20, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), current_user: dict = Depends(get_current_user) ): @@ -458,7 +459,7 @@ async def get_my_submissions( async def get_bounty_leaderboard( period: str = Field(default="weekly", regex="^(daily|weekly|monthly)$"), limit: int = Field(default=50, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get bounty leaderboard""" @@ -477,7 +478,7 @@ async def get_bounty_leaderboard( @router.get("/bounties/stats", response_model=BountyStatsResponse) async def get_bounty_stats( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get bounty statistics""" @@ -494,7 +495,7 @@ async def get_bounty_stats( async def expire_bounty( bounty_id: str, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -534,7 +535,7 @@ async def expire_bounty( @router.get("/bounties/categories") async def get_bounty_categories( - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get all bounty categories""" @@ -549,7 +550,7 @@ async def get_bounty_categories( @router.get("/bounties/tags") async def get_bounty_tags( limit: int = Field(default=100, ge=1, le=500), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Get popular bounty tags""" @@ -566,7 +567,7 @@ async def search_bounties( query: str = Field(..., min_length=1, max_length=100), page: int = Field(default=1, ge=1), limit: int = Field(default=20, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), bounty_service: BountyService = Depends(get_bounty_service) ): """Search bounties by text""" diff --git a/apps/coordinator-api/src/app/routers/certification.py b/apps/coordinator-api/src/app/routers/certification.py index 24344e8f..8263dcf5 100755 --- a/apps/coordinator-api/src/app/routers/certification.py +++ b/apps/coordinator-api/src/app/routers/certification.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Certification and Partnership API Endpoints REST API for agent certification, partnership programs, and badge system @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.certification_service import ( CertificationAndPartnershipService, CertificationSystem, PartnershipManager, BadgeSystem ) @@ -118,7 +120,7 @@ class AgentCertificationSummary(BaseModel): @router.post("/certify", response_model=CertificationResponse) async def certify_agent( certification_request: CertificationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> CertificationResponse: """Certify an agent at a specific level""" @@ -162,7 +164,7 @@ async def certify_agent( async def renew_certification( certification_id: str, renewed_by: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Renew an existing certification""" @@ -195,7 +197,7 @@ async def renew_certification( async def get_agent_certifications( agent_id: str, status: Optional[str] = Query(default=None, description="Filter by status"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[CertificationResponse]: """Get certifications for an agent""" @@ -241,7 +243,7 @@ async def create_partnership_program( tier_levels: List[str] = Field(default_factory=lambda: ["basic", "premium"]), max_participants: Optional[int] = Field(default=None, description="Maximum participants"), launch_immediately: bool = Field(default=False, description="Launch program immediately"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Create a new partnership program""" @@ -279,7 +281,7 @@ async def create_partnership_program( @router.post("/partnerships/apply", response_model=PartnershipResponse) async def apply_for_partnership( application: PartnershipApplicationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> PartnershipResponse: """Apply for a partnership program""" @@ -322,7 +324,7 @@ async def get_agent_partnerships( agent_id: str, status: Optional[str] = Query(default=None, description="Filter by status"), partnership_type: Optional[str] = Query(default=None, description="Filter by partnership type"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[PartnershipResponse]: """Get partnerships for an agent""" @@ -365,7 +367,7 @@ async def list_partnership_programs( partnership_type: Optional[str] = Query(default=None, description="Filter by partnership type"), status: Optional[str] = Query(default="active", description="Filter by status"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """List available partnership programs""" @@ -406,7 +408,7 @@ async def list_partnership_programs( @router.post("/badges") async def create_badge( badge_request: BadgeCreationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Create a new achievement badge""" @@ -444,7 +446,7 @@ async def create_badge( @router.post("/badges/award", response_model=BadgeResponse) async def award_badge( badge_request: BadgeAwardRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> BadgeResponse: """Award a badge to an agent""" @@ -495,7 +497,7 @@ async def get_agent_badges( category: Optional[str] = Query(default=None, description="Filter by category"), featured_only: bool = Query(default=False, description="Only featured badges"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[BadgeResponse]: """Get badges for an agent""" @@ -548,7 +550,7 @@ async def list_available_badges( rarity: Optional[str] = Query(default=None, description="Filter by rarity"), active_only: bool = Query(default=True, description="Only active badges"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """List available badges""" @@ -596,7 +598,7 @@ async def list_available_badges( @router.post("/badges/{agent_id}/check-automatic") async def check_automatic_badges( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Check and award automatic badges for an agent""" @@ -620,7 +622,7 @@ async def check_automatic_badges( @router.get("/summary/{agent_id}", response_model=AgentCertificationSummary) async def get_agent_summary( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> AgentCertificationSummary: """Get comprehensive certification and partnership summary for an agent""" @@ -642,7 +644,7 @@ async def get_verification_records( verification_type: Optional[str] = Query(default=None, description="Filter by verification type"), status: Optional[str] = Query(default=None, description="Filter by status"), limit: int = Query(default=20, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get verification records for an agent""" @@ -682,7 +684,7 @@ async def get_verification_records( @router.get("/levels") async def get_certification_levels( - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get available certification levels and requirements""" @@ -710,7 +712,7 @@ async def get_certification_levels( async def get_certification_requirements( level: Optional[str] = Query(default=None, description="Filter by certification level"), verification_type: Optional[str] = Query(default=None, description="Filter by verification type"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get certification requirements""" @@ -754,7 +756,7 @@ async def get_certification_requirements( async def get_certification_leaderboard( category: str = Query(default="highest_level", description="Leaderboard category"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get certification leaderboard""" diff --git a/apps/coordinator-api/src/app/routers/client.py b/apps/coordinator-api/src/app/routers/client.py index 27b2cdea..e853cd2e 100755 --- a/apps/coordinator-api/src/app/routers/client.py +++ b/apps/coordinator-api/src/app/routers/client.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated from fastapi import APIRouter, Depends, HTTPException, status, Request from slowapi import Limiter from slowapi.util import get_remote_address @@ -9,7 +11,7 @@ from ..types import JobState from ..services import JobService from ..services.payments import PaymentService from ..config import settings -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..utils.cache import cached, get_cache_config limiter = Limiter(key_func=get_remote_address) @@ -21,7 +23,7 @@ router = APIRouter(tags=["client"]) async def submit_job( req: JobCreate, request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobView: # type: ignore[arg-type] service = JobService(session) @@ -49,7 +51,7 @@ async def submit_job( @cached(**get_cache_config("job_list")) # Cache job status for 1 minute async def get_job( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobView: # type: ignore[arg-type] service = JobService(session) @@ -63,7 +65,7 @@ async def get_job( @router.get("/jobs/{job_id}/result", response_model=JobResult, summary="Get job result") async def get_job_result( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobResult: # type: ignore[arg-type] service = JobService(session) @@ -82,7 +84,7 @@ async def get_job_result( @router.post("/jobs/{job_id}/cancel", response_model=JobView, summary="Cancel job") async def cancel_job( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobView: # type: ignore[arg-type] service = JobService(session) @@ -101,7 +103,7 @@ async def cancel_job( @router.get("/jobs/{job_id}/receipt", summary="Get latest signed receipt") async def get_job_receipt( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> dict: # type: ignore[arg-type] service = JobService(session) @@ -117,7 +119,7 @@ async def get_job_receipt( @router.get("/jobs/{job_id}/receipts", summary="List signed receipts") async def list_job_receipts( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> dict: # type: ignore[arg-type] service = JobService(session) @@ -129,7 +131,7 @@ async def list_job_receipts( @cached(**get_cache_config("job_list")) # Cache job list for 30 seconds async def list_jobs( request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), limit: int = 20, offset: int = 0, @@ -169,7 +171,7 @@ async def list_jobs( @cached(**get_cache_config("job_list")) # Cache job history for 30 seconds async def get_job_history( request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), limit: int = 20, offset: int = 0, @@ -225,7 +227,7 @@ async def get_job_history( @router.get("/blocks", summary="Get blockchain blocks") async def get_blocks( request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), limit: int = 20, offset: int = 0, diff --git a/apps/coordinator-api/src/app/routers/community.py b/apps/coordinator-api/src/app/routers/community.py index 4834a115..87f66167 100755 --- a/apps/coordinator-api/src/app/routers/community.py +++ b/apps/coordinator-api/src/app/routers/community.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Community and Developer Ecosystem API Endpoints REST API for managing OpenClaw developer profiles, SDKs, solutions, and hackathons @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query, Body from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.community_service import ( DeveloperEcosystemService, ThirdPartySolutionService, InnovationLabService, CommunityPlatformService @@ -68,7 +70,7 @@ class HackathonCreateRequest(BaseModel): # Endpoints - Developer Ecosystem @router.post("/developers", response_model=DeveloperProfile) -async def create_developer_profile(request: DeveloperProfileCreate, session: SessionDep): +async def create_developer_profile(request: DeveloperProfileCreate, session: Annotated[Session, Depends(get_session)] = Depends()): """Register a new developer in the OpenClaw ecosystem""" service = DeveloperEcosystemService(session) try: @@ -84,7 +86,7 @@ async def create_developer_profile(request: DeveloperProfileCreate, session: Ses raise HTTPException(status_code=500, detail=str(e)) @router.get("/developers/{developer_id}", response_model=DeveloperProfile) -async def get_developer_profile(developer_id: str, session: SessionDep): +async def get_developer_profile(developer_id: str, session: Annotated[Session, Depends(get_session)] = Depends()): """Get a developer's profile and reputation""" service = DeveloperEcosystemService(session) profile = await service.get_developer_profile(developer_id) @@ -93,14 +95,14 @@ async def get_developer_profile(developer_id: str, session: SessionDep): return profile @router.get("/sdk/latest") -async def get_latest_sdk(session: SessionDep): +async def get_latest_sdk(session: Annotated[Session, Depends(get_session)] = Depends()): """Get information about the latest OpenClaw SDK releases""" service = DeveloperEcosystemService(session) return await service.get_sdk_release_info() # Endpoints - Marketplace Solutions @router.post("/solutions/publish", response_model=AgentSolution) -async def publish_solution(request: SolutionPublishRequest, session: SessionDep): +async def publish_solution(request: SolutionPublishRequest, session: Annotated[Session, Depends(get_session)] = Depends()): """Publish a new third-party agent solution to the marketplace""" service = ThirdPartySolutionService(session) try: @@ -120,7 +122,7 @@ async def list_solutions( return await service.list_published_solutions(category, limit) @router.post("/solutions/{solution_id}/purchase") -async def purchase_solution(solution_id: str, session: SessionDep, buyer_id: str = Body(embed=True)): +async def purchase_solution(solution_id: str, session: Annotated[Session, Depends(get_session)] = Depends(), buyer_id: str = Body(embed=True)): """Purchase or install a third-party solution""" service = ThirdPartySolutionService(session) try: @@ -146,7 +148,7 @@ async def propose_innovation_lab( raise HTTPException(status_code=500, detail=str(e)) @router.post("/labs/{lab_id}/join") -async def join_innovation_lab(lab_id: str, session: SessionDep, developer_id: str = Body(embed=True)): +async def join_innovation_lab(lab_id: str, session: Annotated[Session, Depends(get_session)] = Depends(), developer_id: str = Body(embed=True)): """Join an active innovation lab""" service = InnovationLabService(session) try: @@ -156,7 +158,7 @@ async def join_innovation_lab(lab_id: str, session: SessionDep, developer_id: st raise HTTPException(status_code=404, detail=str(e)) @router.post("/labs/{lab_id}/fund") -async def fund_innovation_lab(lab_id: str, session: SessionDep, amount: float = Body(embed=True)): +async def fund_innovation_lab(lab_id: str, session: Annotated[Session, Depends(get_session)] = Depends(), amount: float = Body(embed=True)): """Provide funding to a proposed innovation lab""" service = InnovationLabService(session) try: @@ -189,7 +191,7 @@ async def get_community_feed( return await service.get_feed(category, limit) @router.post("/platform/posts/{post_id}/upvote") -async def upvote_community_post(post_id: str, session: SessionDep): +async def upvote_community_post(post_id: str, session: Annotated[Session, Depends(get_session)] = Depends()): """Upvote a community post (rewards author reputation)""" service = CommunityPlatformService(session) try: @@ -215,7 +217,7 @@ async def create_hackathon( raise HTTPException(status_code=500, detail=str(e)) @router.post("/hackathons/{hackathon_id}/register") -async def register_for_hackathon(hackathon_id: str, session: SessionDep, developer_id: str = Body(embed=True)): +async def register_for_hackathon(hackathon_id: str, session: Annotated[Session, Depends(get_session)] = Depends(), developer_id: str = Body(embed=True)): """Register for an upcoming or ongoing hackathon""" service = CommunityPlatformService(session) try: diff --git a/apps/coordinator-api/src/app/routers/dynamic_pricing.py b/apps/coordinator-api/src/app/routers/dynamic_pricing.py index 6d9b342b..9f7043bc 100755 --- a/apps/coordinator-api/src/app/routers/dynamic_pricing.py +++ b/apps/coordinator-api/src/app/routers/dynamic_pricing.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Dynamic Pricing API Router Provides RESTful endpoints for dynamic pricing management @@ -11,7 +13,7 @@ from fastapi import status as http_status from pydantic import BaseModel, Field from sqlmodel import select, func -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.dynamic_pricing_engine import ( DynamicPricingEngine, PricingStrategy, diff --git a/apps/coordinator-api/src/app/routers/ecosystem_dashboard.py b/apps/coordinator-api/src/app/routers/ecosystem_dashboard.py index d649de0a..4541ad2a 100755 --- a/apps/coordinator-api/src/app/routers/ecosystem_dashboard.py +++ b/apps/coordinator-api/src/app/routers/ecosystem_dashboard.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Ecosystem Metrics Dashboard API REST API for developer ecosystem metrics and analytics @@ -9,7 +10,7 @@ from typing import List, Optional, Dict, Any from datetime import datetime, timedelta from pydantic import BaseModel, Field -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..logging import get_logger from ..domain.bounty import EcosystemMetrics, BountyStats, AgentMetrics from ..services.ecosystem_service import EcosystemService @@ -81,14 +82,14 @@ class MetricsFilterRequest(BaseModel): compare_period: Optional[str] = None # Dependency injection -def get_ecosystem_service(session: SessionDep) -> EcosystemService: +def get_ecosystem_service(session: Annotated[Session, Depends(get_session)]) -> EcosystemService: return EcosystemService(session) # API endpoints @router.get("/ecosystem/developer-earnings", response_model=DeveloperEarningsResponse) async def get_developer_earnings( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service), current_user: dict = Depends(get_current_user) ): @@ -108,7 +109,7 @@ async def get_developer_earnings( @router.get("/ecosystem/agent-utilization", response_model=AgentUtilizationResponse) async def get_agent_utilization( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get agent utilization metrics""" @@ -127,7 +128,7 @@ async def get_agent_utilization( @router.get("/ecosystem/treasury-allocation", response_model=TreasuryAllocationResponse) async def get_treasury_allocation( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get DAO treasury allocation metrics""" @@ -146,7 +147,7 @@ async def get_treasury_allocation( @router.get("/ecosystem/staking-metrics", response_model=StakingMetricsResponse) async def get_staking_metrics( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get staking system metrics""" @@ -165,7 +166,7 @@ async def get_staking_metrics( @router.get("/ecosystem/bounty-analytics", response_model=BountyAnalyticsResponse) async def get_bounty_analytics( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get bounty system analytics""" @@ -184,7 +185,7 @@ async def get_bounty_analytics( @router.get("/ecosystem/overview", response_model=EcosystemOverviewResponse) async def get_ecosystem_overview( period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get comprehensive ecosystem overview""" @@ -213,7 +214,7 @@ async def get_ecosystem_metrics( start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, limit: int = Field(default=100, ge=1, le=1000), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get time-series ecosystem metrics""" @@ -237,7 +238,7 @@ async def get_ecosystem_metrics( @router.get("/ecosystem/health-score") async def get_ecosystem_health_score( - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get overall ecosystem health score""" @@ -258,7 +259,7 @@ async def get_ecosystem_health_score( @router.get("/ecosystem/growth-indicators") async def get_growth_indicators( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get ecosystem growth indicators""" @@ -281,7 +282,7 @@ async def get_top_performers( category: str = Field(default="all", regex="^(developers|agents|stakers|all)$"), period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), limit: int = Field(default=50, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get top performers in different categories""" @@ -307,7 +308,7 @@ async def get_top_performers( async def get_ecosystem_predictions( metric: str = Field(default="all", regex="^(earnings|staking|bounties|agents|all)$"), horizon: int = Field(default=30, ge=1, le=365), # days - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get ecosystem predictions based on historical data""" @@ -332,7 +333,7 @@ async def get_ecosystem_predictions( @router.get("/ecosystem/alerts") async def get_ecosystem_alerts( severity: str = Field(default="all", regex="^(low|medium|high|critical|all)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get ecosystem alerts and anomalies""" @@ -356,7 +357,7 @@ async def get_ecosystem_comparison( compare_period: str = Field(default="previous", regex="^(previous|same_last_year|custom)$"), custom_start_date: Optional[datetime] = None, custom_end_date: Optional[datetime] = None, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Compare ecosystem metrics between periods""" @@ -385,7 +386,7 @@ async def export_ecosystem_data( period_type: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), start_date: Optional[datetime] = None, end_date: Optional[datetime] = None, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Export ecosystem data in various formats""" @@ -412,7 +413,7 @@ async def export_ecosystem_data( @router.get("/ecosystem/real-time") async def get_real_time_metrics( - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get real-time ecosystem metrics""" @@ -431,7 +432,7 @@ async def get_real_time_metrics( @router.get("/ecosystem/kpi-dashboard") async def get_kpi_dashboard( - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), ecosystem_service: EcosystemService = Depends(get_ecosystem_service) ): """Get KPI dashboard with key performance indicators""" diff --git a/apps/coordinator-api/src/app/routers/edge_gpu.py b/apps/coordinator-api/src/app/routers/edge_gpu.py index 08a2115f..0da03ddb 100755 --- a/apps/coordinator-api/src/app/routers/edge_gpu.py +++ b/apps/coordinator-api/src/app/routers/edge_gpu.py @@ -1,13 +1,15 @@ +from sqlalchemy.orm import Session +from typing import Annotated from typing import List, Optional from fastapi import APIRouter, Depends, Query -from ..storage import SessionDep, get_session +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..domain.gpu_marketplace import ConsumerGPUProfile, GPUArchitecture, EdgeGPUMetrics from ..services.edge_gpu_service import EdgeGPUService router = APIRouter(prefix="/v1/marketplace/edge-gpu", tags=["edge-gpu"]) -def get_edge_service(session: SessionDep) -> EdgeGPUService: +def get_edge_service(session: Annotated[Session, Depends(get_session)] = Depends()) -> EdgeGPUService: return EdgeGPUService(session) diff --git a/apps/coordinator-api/src/app/routers/explorer.py b/apps/coordinator-api/src/app/routers/explorer.py index 3170f507..674dd89c 100755 --- a/apps/coordinator-api/src/app/routers/explorer.py +++ b/apps/coordinator-api/src/app/routers/explorer.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated from __future__ import annotations from fastapi import APIRouter, Depends, Query @@ -9,19 +11,19 @@ from ..schemas import ( ReceiptListResponse, ) from ..services import ExplorerService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session router = APIRouter(prefix="/explorer", tags=["explorer"]) -def _service(session: SessionDep) -> ExplorerService: +def _service(session: Annotated[Session, Depends(get_session)] = Depends()) -> ExplorerService: return ExplorerService(session) @router.get("/blocks", response_model=BlockListResponse, summary="List recent blocks") async def list_blocks( *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), limit: int = Query(default=20, ge=1, le=200), offset: int = Query(default=0, ge=0), ) -> BlockListResponse: @@ -35,7 +37,7 @@ async def list_blocks( ) async def list_transactions( *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), limit: int = Query(default=50, ge=1, le=200), offset: int = Query(default=0, ge=0), ) -> TransactionListResponse: @@ -45,7 +47,7 @@ async def list_transactions( @router.get("/addresses", response_model=AddressListResponse, summary="List address summaries") async def list_addresses( *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), limit: int = Query(default=50, ge=1, le=200), offset: int = Query(default=0, ge=0), ) -> AddressListResponse: @@ -55,7 +57,7 @@ async def list_addresses( @router.get("/receipts", response_model=ReceiptListResponse, summary="List job receipts") async def list_receipts( *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), job_id: str | None = Query(default=None, description="Filter by job identifier"), limit: int = Query(default=50, ge=1, le=200), offset: int = Query(default=0, ge=0), diff --git a/apps/coordinator-api/src/app/routers/governance.py b/apps/coordinator-api/src/app/routers/governance.py index 5ee27e92..dacbe7df 100755 --- a/apps/coordinator-api/src/app/routers/governance.py +++ b/apps/coordinator-api/src/app/routers/governance.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Decentralized Governance API Endpoints REST API for OpenClaw DAO voting, proposals, and governance analytics @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query, Body from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.governance_service import GovernanceService from ..domain.governance import ( GovernanceProfile, Proposal, Vote, DaoTreasury, TransparencyReport, @@ -43,7 +45,7 @@ class VoteRequest(BaseModel): # Endpoints - Profile & Delegation @router.post("/profiles", response_model=GovernanceProfile) -async def init_governance_profile(request: ProfileInitRequest, session: SessionDep): +async def init_governance_profile(request: ProfileInitRequest, session: Annotated[Session, Depends(get_session)] = Depends()): """Initialize a governance profile for a user""" service = GovernanceService(session) try: @@ -54,7 +56,7 @@ async def init_governance_profile(request: ProfileInitRequest, session: SessionD raise HTTPException(status_code=500, detail=str(e)) @router.post("/profiles/{profile_id}/delegate", response_model=GovernanceProfile) -async def delegate_voting_power(profile_id: str, request: DelegationRequest, session: SessionDep): +async def delegate_voting_power(profile_id: str, request: DelegationRequest, session: Annotated[Session, Depends(get_session)] = Depends()): """Delegate your voting power to another DAO member""" service = GovernanceService(session) try: @@ -68,7 +70,7 @@ async def delegate_voting_power(profile_id: str, request: DelegationRequest, ses # Endpoints - Proposals @router.post("/proposals", response_model=Proposal) async def create_proposal( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), proposer_id: str = Query(...), request: ProposalCreateRequest = Body(...) ): @@ -85,7 +87,7 @@ async def create_proposal( @router.post("/proposals/{proposal_id}/vote", response_model=Vote) async def cast_vote( proposal_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), voter_id: str = Query(...), request: VoteRequest = Body(...) ): @@ -105,7 +107,7 @@ async def cast_vote( raise HTTPException(status_code=500, detail=str(e)) @router.post("/proposals/{proposal_id}/process", response_model=Proposal) -async def process_proposal(proposal_id: str, session: SessionDep): +async def process_proposal(proposal_id: str, session: Annotated[Session, Depends(get_session)] = Depends()): """Manually trigger the lifecycle check of a proposal (e.g., tally votes when time ends)""" service = GovernanceService(session) try: @@ -119,7 +121,7 @@ async def process_proposal(proposal_id: str, session: SessionDep): @router.post("/proposals/{proposal_id}/execute", response_model=Proposal) async def execute_proposal( proposal_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), executor_id: str = Query(...) ): """Execute the payload of a succeeded proposal""" @@ -135,7 +137,7 @@ async def execute_proposal( # Endpoints - Analytics @router.post("/analytics/reports", response_model=TransparencyReport) async def generate_transparency_report( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), period: str = Query(..., description="e.g., 2026-Q1") ): """Generate a governance analytics and transparency report""" diff --git a/apps/coordinator-api/src/app/routers/gpu_multimodal_health.py b/apps/coordinator-api/src/app/routers/gpu_multimodal_health.py index 7f61b113..77fb4291 100755 --- a/apps/coordinator-api/src/app/routers/gpu_multimodal_health.py +++ b/apps/coordinator-api/src/app/routers/gpu_multimodal_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ GPU Multi-Modal Service Health Check Router Provides health monitoring for CUDA-optimized multi-modal processing @@ -11,7 +12,7 @@ import psutil import subprocess from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.multimodal_agent import MultiModalAgentService from ..logging import get_logger @@ -20,7 +21,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="GPU Multi-Modal Service Health") -async def gpu_multimodal_health(session: SessionDep) -> Dict[str, Any]: +async def gpu_multimodal_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for GPU Multi-Modal Service (Port 8003) """ @@ -97,7 +98,7 @@ async def gpu_multimodal_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep GPU Multi-Modal Service Health") -async def gpu_multimodal_deep_health(session: SessionDep) -> Dict[str, Any]: +async def gpu_multimodal_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with CUDA performance validation """ diff --git a/apps/coordinator-api/src/app/routers/marketplace.py b/apps/coordinator-api/src/app/routers/marketplace.py index 61dd9426..4202daf8 100755 --- a/apps/coordinator-api/src/app/routers/marketplace.py +++ b/apps/coordinator-api/src/app/routers/marketplace.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated from __future__ import annotations from fastapi import APIRouter, Depends, HTTPException, Query, Request @@ -7,7 +9,7 @@ from slowapi.util import get_remote_address from ..schemas import MarketplaceBidRequest, MarketplaceOfferView, MarketplaceStatsView, MarketplaceBidView from ..services import MarketplaceService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..metrics import marketplace_requests_total, marketplace_errors_total from ..utils.cache import cached, get_cache_config from ..config import settings @@ -18,7 +20,7 @@ limiter = Limiter(key_func=get_remote_address) router = APIRouter(tags=["marketplace"]) -def _get_service(session: SessionDep) -> MarketplaceService: +def _get_service(session: Annotated[Session, Depends(get_session)] = Depends()) -> MarketplaceService: return MarketplaceService(session) @@ -31,7 +33,7 @@ def _get_service(session: SessionDep) -> MarketplaceService: async def list_marketplace_offers( request: Request, *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), status_filter: str | None = Query(default=None, alias="status", description="Filter by offer status"), limit: int = Query(default=100, ge=1, le=500), offset: int = Query(default=0, ge=0), @@ -58,7 +60,7 @@ async def list_marketplace_offers( async def get_marketplace_stats( request: Request, *, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> MarketplaceStatsView: marketplace_requests_total.labels(endpoint="/marketplace/stats", method="GET").inc() service = _get_service(session) @@ -78,7 +80,7 @@ async def get_marketplace_stats( async def submit_marketplace_bid( request: Request, payload: MarketplaceBidRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), ) -> dict[str, str]: marketplace_requests_total.labels(endpoint="/marketplace/bids", method="POST").inc() service = _get_service(session) @@ -100,7 +102,7 @@ async def submit_marketplace_bid( ) async def list_marketplace_bids( *, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), status_filter: str | None = Query(default=None, alias="status", description="Filter by bid status"), provider_filter: str | None = Query(default=None, alias="provider", description="Filter by provider ID"), limit: int = Query(default=100, ge=1, le=500), @@ -125,7 +127,7 @@ async def list_marketplace_bids( ) async def get_marketplace_bid( bid_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), ) -> MarketplaceBidView: marketplace_requests_total.labels(endpoint="/marketplace/bids/{bid_id}", method="GET").inc() service = _get_service(session) diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced.py index 90ac13ad..b742cb6c 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Enhanced Marketplace API Router - Phase 6.5 REST API endpoints for advanced marketplace features including royalties, licensing, and analytics @@ -11,7 +13,7 @@ from pydantic import BaseModel, Field from ..domain import MarketplaceOffer from ..services.marketplace_enhanced import EnhancedMarketplaceService, RoyaltyTier, LicenseType -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from ..schemas.marketplace_enhanced import ( RoyaltyDistributionRequest, RoyaltyDistributionResponse, @@ -29,7 +31,7 @@ router = APIRouter(prefix="/marketplace/enhanced", tags=["Enhanced Marketplace"] async def create_royalty_distribution( offer_id: str, royalty_tiers: RoyaltyDistributionRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create sophisticated royalty distribution for marketplace offer""" @@ -67,7 +69,7 @@ async def calculate_royalties( offer_id: str, sale_amount: float, transaction_id: Optional[str] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Calculate and distribute royalties for a sale""" @@ -99,7 +101,7 @@ async def calculate_royalties( async def create_model_license( offer_id: str, license_request: ModelLicenseRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create model license and IP protection""" @@ -140,7 +142,7 @@ async def create_model_license( async def verify_model( offer_id: str, verification_request: ModelVerificationRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Perform advanced model verification""" @@ -177,7 +179,7 @@ async def verify_model( async def get_marketplace_analytics( period_days: int = 30, metrics: Optional[List[str]] = None, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get comprehensive marketplace analytics""" diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced_app.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced_app.py index a4adb310..56fb3012 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced_app.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced_app.py @@ -1,13 +1,15 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Enhanced Marketplace Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .marketplace_enhanced_simple import router from .marketplace_enhanced_health import router as health_router -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session app = FastAPI( title="AITBC Enhanced Marketplace Service", diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py index 77e2ca1c..4c697cf0 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Enhanced Marketplace Service Health Check Router Provides health monitoring for royalties, licensing, verification, and analytics @@ -10,7 +11,7 @@ import sys import psutil from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.marketplace_enhanced import EnhancedMarketplaceService from ..logging import get_logger @@ -19,7 +20,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="Enhanced Marketplace Service Health") -async def marketplace_enhanced_health(session: SessionDep) -> Dict[str, Any]: +async def marketplace_enhanced_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for Enhanced Marketplace Service (Port 8006) """ @@ -104,7 +105,7 @@ async def marketplace_enhanced_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep Enhanced Marketplace Service Health") -async def marketplace_enhanced_deep_health(session: SessionDep) -> Dict[str, Any]: +async def marketplace_enhanced_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with marketplace feature validation """ diff --git a/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py b/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py index 5c79e7c2..e1d70fd2 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py +++ b/apps/coordinator-api/src/app/routers/marketplace_enhanced_simple.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Enhanced Marketplace API Router - Simplified Version REST API endpoints for enhanced marketplace features @@ -10,7 +12,7 @@ from fastapi import APIRouter, HTTPException, Depends from pydantic import BaseModel, Field from ..services.marketplace_enhanced_simple import EnhancedMarketplaceService, RoyaltyTier, LicenseType, VerificationType -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from sqlmodel import Session @@ -48,7 +50,7 @@ class MarketplaceAnalyticsRequest(BaseModel): async def create_royalty_distribution( request: RoyaltyDistributionRequest, offer_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create royalty distribution for marketplace offer""" @@ -72,7 +74,7 @@ async def create_royalty_distribution( async def calculate_royalties( offer_id: str, sale_amount: float, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Calculate royalties for a sale""" @@ -95,7 +97,7 @@ async def calculate_royalties( async def create_model_license( request: ModelLicenseRequest, offer_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Create model license for marketplace offer""" @@ -121,7 +123,7 @@ async def create_model_license( async def verify_model( request: ModelVerificationRequest, offer_id: str, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Verify model quality and performance""" @@ -143,7 +145,7 @@ async def verify_model( @router.post("/analytics") async def get_marketplace_analytics( request: MarketplaceAnalyticsRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Get marketplace analytics and insights""" diff --git a/apps/coordinator-api/src/app/routers/marketplace_gpu.py b/apps/coordinator-api/src/app/routers/marketplace_gpu.py index 0952b56a..7cd692db 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_gpu.py +++ b/apps/coordinator-api/src/app/routers/marketplace_gpu.py @@ -1,3 +1,4 @@ +from typing import Annotated """ GPU marketplace endpoints backed by persistent SQLModel tables. """ @@ -11,8 +12,9 @@ from fastapi import APIRouter, HTTPException, Query, Depends from fastapi import status as http_status from pydantic import BaseModel, Field from sqlmodel import select, func, col +from sqlalchemy.orm import Session -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..domain.gpu_marketplace import GPURegistry, GPUBooking, GPUReview from ..services.dynamic_pricing_engine import DynamicPricingEngine, PricingStrategy, ResourceType from ..services.market_data_collector import MarketDataCollector @@ -130,7 +132,7 @@ def _get_gpu_or_404(session, gpu_id: str) -> GPURegistry: @router.post("/marketplace/gpu/register") async def register_gpu( request: Dict[str, Any], - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), engine: DynamicPricingEngine = Depends(get_pricing_engine) ) -> Dict[str, Any]: """Register a GPU in the marketplace with dynamic pricing.""" @@ -185,7 +187,7 @@ async def register_gpu( @router.get("/marketplace/gpu/list") async def list_gpus( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), available: Optional[bool] = Query(default=None), price_max: Optional[float] = Query(default=None), region: Optional[str] = Query(default=None), @@ -211,7 +213,7 @@ async def list_gpus( @router.get("/marketplace/gpu/{gpu_id}") -async def get_gpu_details(gpu_id: str, session: SessionDep) -> Dict[str, Any]: +async def get_gpu_details(gpu_id: str, session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """Get GPU details.""" gpu = _get_gpu_or_404(session, gpu_id) result = _gpu_to_dict(gpu) @@ -237,7 +239,7 @@ async def get_gpu_details(gpu_id: str, session: SessionDep) -> Dict[str, Any]: async def book_gpu( gpu_id: str, request: GPUBookRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), engine: DynamicPricingEngine = Depends(get_pricing_engine) ) -> Dict[str, Any]: """Book a GPU with dynamic pricing.""" @@ -319,7 +321,7 @@ async def book_gpu( @router.post("/marketplace/gpu/{gpu_id}/release") -async def release_gpu(gpu_id: str, session: SessionDep) -> Dict[str, Any]: +async def release_gpu(gpu_id: str, session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """Release a booked GPU.""" gpu = _get_gpu_or_404(session, gpu_id) @@ -367,7 +369,7 @@ async def release_gpu(gpu_id: str, session: SessionDep) -> Dict[str, Any]: async def confirm_gpu_booking( gpu_id: str, request: GPUConfirmRequest, - session: SessionDep, + session: Session = Depends(get_session), ) -> Dict[str, Any]: """Confirm a booking (client ACK).""" gpu = _get_gpu_or_404(session, gpu_id) @@ -408,7 +410,7 @@ async def confirm_gpu_booking( @router.post("/tasks/ollama") async def submit_ollama_task( request: OllamaTaskRequest, - session: SessionDep, + session: Session = Depends(get_session), ) -> Dict[str, Any]: """Stub Ollama task submission endpoint.""" # Ensure GPU exists and is booked @@ -434,7 +436,10 @@ async def submit_ollama_task( @router.post("/payments/send") -async def send_payment(request: PaymentRequest) -> Dict[str, Any]: +async def send_payment( + request: PaymentRequest, + session: Session = Depends(get_session), +) -> Dict[str, Any]: """Stub payment endpoint (hook for blockchain processor).""" if request.amount <= 0: raise HTTPException( @@ -460,7 +465,7 @@ async def send_payment(request: PaymentRequest) -> Dict[str, Any]: @router.get("/marketplace/gpu/{gpu_id}/reviews") async def get_gpu_reviews( gpu_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), limit: int = Query(default=10, ge=1, le=100), ) -> Dict[str, Any]: """Get GPU reviews.""" @@ -490,7 +495,7 @@ async def get_gpu_reviews( @router.post("/marketplace/gpu/{gpu_id}/reviews", status_code=http_status.HTTP_201_CREATED) async def add_gpu_review( - gpu_id: str, request: GPUReviewRequest, session: SessionDep + gpu_id: str, request: GPUReviewRequest, session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Add a review for a GPU.""" gpu = _get_gpu_or_404(session, gpu_id) @@ -527,7 +532,7 @@ async def add_gpu_review( @router.get("/marketplace/orders") async def list_orders( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), status: Optional[str] = Query(default=None), limit: int = Query(default=100, ge=1, le=500), ) -> List[Dict[str, Any]]: @@ -558,7 +563,7 @@ async def list_orders( @router.get("/marketplace/pricing/{model}") async def get_pricing( model: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), engine: DynamicPricingEngine = Depends(get_pricing_engine), collector: MarketDataCollector = Depends(get_market_collector) ) -> Dict[str, Any]: diff --git a/apps/coordinator-api/src/app/routers/marketplace_offers.py b/apps/coordinator-api/src/app/routers/marketplace_offers.py index eecdd688..3d39273f 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_offers.py +++ b/apps/coordinator-api/src/app/routers/marketplace_offers.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Router to create marketplace offers from registered miners """ @@ -9,14 +11,14 @@ from sqlmodel import Session, select from ..deps import require_admin_key from ..domain import MarketplaceOffer, Miner from ..schemas import MarketplaceOfferView -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session router = APIRouter(tags=["marketplace-offers"]) @router.post("/marketplace/sync-offers", summary="Create offers from registered miners") async def sync_offers( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), admin_key: str = Depends(require_admin_key()), ) -> dict[str, Any]: """Create marketplace offers from all registered miners""" @@ -64,7 +66,7 @@ async def sync_offers( @router.get("/marketplace/miner-offers", summary="List all miner offers", response_model=list[MarketplaceOfferView]) -async def list_miner_offers(session: SessionDep) -> list[MarketplaceOfferView]: +async def list_miner_offers(session: Annotated[Session, Depends(get_session)] = Depends()) -> list[MarketplaceOfferView]: """List all offers created from miners""" # Get all offers with miner details diff --git a/apps/coordinator-api/src/app/routers/marketplace_performance.py b/apps/coordinator-api/src/app/routers/marketplace_performance.py index 8c693004..70d0dba0 100755 --- a/apps/coordinator-api/src/app/routers/marketplace_performance.py +++ b/apps/coordinator-api/src/app/routers/marketplace_performance.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Marketplace Performance Optimization API Endpoints REST API for managing distributed processing, GPU optimization, caching, and scaling @@ -10,7 +12,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query, BackgroundTasks from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), "../../../../../gpu_acceleration")) diff --git a/apps/coordinator-api/src/app/routers/miner.py b/apps/coordinator-api/src/app/routers/miner.py index c9fcddee..cb6739a4 100755 --- a/apps/coordinator-api/src/app/routers/miner.py +++ b/apps/coordinator-api/src/app/routers/miner.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated from datetime import datetime from typing import Any @@ -10,7 +12,7 @@ from ..schemas import AssignedJob, JobFailSubmit, JobResultSubmit, JobState, Min from ..services import JobService, MinerService from ..services.receipts import ReceiptService from ..config import settings -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from aitbc.logging import get_logger logger = get_logger(__name__) @@ -23,7 +25,7 @@ router = APIRouter(tags=["miner"]) async def register( req: MinerRegister, request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), miner_id: str = Depends(get_miner_id()), api_key: str = Depends(require_miner_key()), ) -> dict[str, Any]: # type: ignore[arg-type] @@ -36,7 +38,7 @@ async def register( async def heartbeat( req: MinerHeartbeat, request: Request, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), miner_id: str = Depends(get_miner_id()), api_key: str = Depends(require_miner_key()), ) -> dict[str, str]: # type: ignore[arg-type] @@ -51,7 +53,7 @@ async def heartbeat( @router.post("/miners/poll", response_model=AssignedJob, summary="Poll for next job") async def poll( req: PollRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), miner_id: str = Depends(require_miner_key()), ) -> AssignedJob | Response: # type: ignore[arg-type] job = MinerService(session).poll(miner_id, req.max_wait_seconds) @@ -64,7 +66,7 @@ async def poll( async def submit_result( job_id: str, req: JobResultSubmit, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), miner_id: str = Depends(require_miner_key()), ) -> dict[str, Any]: # type: ignore[arg-type] job_service = JobService(session) @@ -120,7 +122,7 @@ async def submit_result( async def submit_failure( job_id: str, req: JobFailSubmit, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), miner_id: str = Depends(require_miner_key()), ) -> dict[str, str]: # type: ignore[arg-type] try: @@ -139,7 +141,7 @@ async def list_miner_jobs( job_type: str | None = None, min_reward: float | None = None, job_status: str | None = None, - session: SessionDep = SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends() = Annotated[Session, Depends(get_session)], api_key: str = Depends(require_miner_key()), ) -> dict[str, Any]: # type: ignore[arg-type] """List jobs assigned to a specific miner""" @@ -188,7 +190,7 @@ async def get_miner_earnings( miner_id: str, from_time: str | None = None, to_time: str | None = None, - session: SessionDep = SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends() = Annotated[Session, Depends(get_session)], api_key: str = Depends(require_miner_key()), ) -> dict[str, Any]: # type: ignore[arg-type] """Get earnings for a specific miner""" @@ -223,7 +225,7 @@ async def get_miner_earnings( async def update_miner_capabilities( miner_id: str, req: MinerRegister, - session: SessionDep = SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends() = Annotated[Session, Depends(get_session)], api_key: str = Depends(require_miner_key()), ) -> dict[str, Any]: # type: ignore[arg-type] """Update capabilities for a registered miner""" @@ -246,7 +248,7 @@ async def update_miner_capabilities( @router.delete("/miners/{miner_id}", summary="Deregister miner") async def deregister_miner( miner_id: str, - session: SessionDep = SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends() = Annotated[Session, Depends(get_session)], api_key: str = Depends(require_miner_key()), ) -> dict[str, str]: # type: ignore[arg-type] """Deregister a miner from the coordinator""" diff --git a/apps/coordinator-api/src/app/routers/ml_zk_proofs.py b/apps/coordinator-api/src/app/routers/ml_zk_proofs.py index fa69dc0d..198d3a15 100755 --- a/apps/coordinator-api/src/app/routers/ml_zk_proofs.py +++ b/apps/coordinator-api/src/app/routers/ml_zk_proofs.py @@ -1,5 +1,7 @@ +from sqlalchemy.orm import Session +from typing import Annotated from fastapi import APIRouter, Depends, HTTPException -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.zk_proofs import ZKProofService from ..services.fhe_service import FHEService diff --git a/apps/coordinator-api/src/app/routers/modality_optimization_health.py b/apps/coordinator-api/src/app/routers/modality_optimization_health.py index ab5dabe5..c1b4b163 100755 --- a/apps/coordinator-api/src/app/routers/modality_optimization_health.py +++ b/apps/coordinator-api/src/app/routers/modality_optimization_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Modality Optimization Service Health Check Router Provides health monitoring for specialized modality optimization strategies @@ -10,7 +11,7 @@ import sys import psutil from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.multimodal_agent import MultiModalAgentService from ..logging import get_logger @@ -19,7 +20,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="Modality Optimization Service Health") -async def modality_optimization_health(session: SessionDep) -> Dict[str, Any]: +async def modality_optimization_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for Modality Optimization Service (Port 8004) """ @@ -97,7 +98,7 @@ async def modality_optimization_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep Modality Optimization Service Health") -async def modality_optimization_deep_health(session: SessionDep) -> Dict[str, Any]: +async def modality_optimization_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with optimization strategy validation """ diff --git a/apps/coordinator-api/src/app/routers/monitoring_dashboard.py b/apps/coordinator-api/src/app/routers/monitoring_dashboard.py index 23d8ee7e..e25c56d6 100755 --- a/apps/coordinator-api/src/app/routers/monitoring_dashboard.py +++ b/apps/coordinator-api/src/app/routers/monitoring_dashboard.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Enhanced Services Monitoring Dashboard Provides a unified dashboard for all 6 enhanced services @@ -11,7 +12,7 @@ import asyncio import httpx from typing import Dict, Any, List -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..logging import get_logger logger = get_logger(__name__) @@ -68,7 +69,7 @@ SERVICES = { @router.get("/dashboard", tags=["monitoring"], summary="Enhanced Services Dashboard") -async def monitoring_dashboard(request: Request, session: SessionDep) -> Dict[str, Any]: +async def monitoring_dashboard(request: Request, session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Unified monitoring dashboard for all enhanced services """ diff --git a/apps/coordinator-api/src/app/routers/multi_modal_rl.py b/apps/coordinator-api/src/app/routers/multi_modal_rl.py index ed4706c2..d7f86b4e 100755 --- a/apps/coordinator-api/src/app/routers/multi_modal_rl.py +++ b/apps/coordinator-api/src/app/routers/multi_modal_rl.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Multi-Modal Fusion and Advanced RL API Endpoints REST API for multi-modal agent fusion and advanced reinforcement learning @@ -9,7 +11,7 @@ from fastapi import APIRouter, Depends, HTTPException, Query, BackgroundTasks, W from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.multi_modal_fusion import MultiModalFusionEngine from ..services.advanced_reinforcement_learning import AdvancedReinforcementLearningEngine, MarketplaceStrategyOptimizer, CrossDomainCapabilityIntegrator from ..domain.agent_performance import ( @@ -138,7 +140,7 @@ class CapabilityIntegrationResponse(BaseModel): @router.post("/fusion/models", response_model=FusionModelResponse) async def create_fusion_model( fusion_request: FusionModelRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> FusionModelResponse: """Create multi-modal fusion model""" @@ -178,7 +180,7 @@ async def create_fusion_model( async def fuse_modalities( fusion_id: str, fusion_request: FusionRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> FusionResponse: """Fuse modalities using trained model""" @@ -211,7 +213,7 @@ async def fuse_modalities( @router.get("/fusion/models") async def list_fusion_models( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), status: Optional[str] = Query(default=None, description="Filter by status"), fusion_type: Optional[str] = Query(default=None, description="Filter by fusion type"), limit: int = Query(default=50, ge=1, le=100, description="Number of results") @@ -261,7 +263,7 @@ async def list_fusion_models( @router.post("/rl/agents", response_model=RLAgentResponse) async def create_rl_agent( agent_request: RLAgentRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> RLAgentResponse: """Create RL agent for marketplace strategies""" @@ -299,7 +301,7 @@ async def create_rl_agent( async def fuse_modalities_stream( websocket: WebSocket, fusion_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ): """Stream modalities and receive fusion results via WebSocket for high performance""" await websocket.accept() @@ -349,7 +351,7 @@ async def fuse_modalities_stream( @router.get("/rl/agents/{agent_id}") async def get_rl_agents( agent_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), status: Optional[str] = Query(default=None, description="Filter by status"), algorithm: Optional[str] = Query(default=None, description="Filter by algorithm"), limit: int = Query(default=20, ge=1, le=100, description="Number of results") @@ -406,7 +408,7 @@ async def get_rl_agents( @router.post("/rl/optimize-strategy", response_model=StrategyOptimizationResponse) async def optimize_strategy( optimization_request: StrategyOptimizationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> StrategyOptimizationResponse: """Optimize agent strategy using RL""" @@ -441,7 +443,7 @@ async def optimize_strategy( async def deploy_strategy( config_id: str, deployment_context: Dict[str, Any], - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Deploy trained strategy""" @@ -466,7 +468,7 @@ async def deploy_strategy( @router.post("/capabilities/integrate", response_model=CapabilityIntegrationResponse) async def integrate_capabilities( integration_request: CapabilityIntegrationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> CapabilityIntegrationResponse: """Integrate capabilities across domains""" @@ -514,7 +516,7 @@ async def integrate_capabilities( @router.get("/capabilities/{agent_id}/domains") async def get_agent_domain_capabilities( agent_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), domain: Optional[str] = Query(default=None, description="Filter by domain"), limit: int = Query(default=50, ge=1, le=100, description="Number of results") ) -> List[Dict[str, Any]]: @@ -571,7 +573,7 @@ async def get_agent_domain_capabilities( @router.get("/creative-capabilities/{agent_id}") async def get_creative_capabilities( agent_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), creative_domain: Optional[str] = Query(default=None, description="Filter by creative domain"), limit: int = Query(default=50, ge=1, le=100, description="Number of results") ) -> List[Dict[str, Any]]: @@ -624,7 +626,7 @@ async def get_creative_capabilities( @router.get("/analytics/fusion-performance") async def get_fusion_performance_analytics( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), agent_ids: Optional[List[str]] = Query(default=[], description="List of agent IDs"), fusion_type: Optional[str] = Query(default=None, description="Filter by fusion type"), period: str = Query(default="7d", description="Time period") @@ -712,7 +714,7 @@ async def get_fusion_performance_analytics( @router.get("/analytics/rl-performance") async def get_rl_performance_analytics( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), agent_ids: Optional[List[str]] = Query(default=[], description="List of agent IDs"), algorithm: Optional[str] = Query(default=None, description="Filter by algorithm"), environment_type: Optional[str] = Query(default=None, description="Filter by environment type"), diff --git a/apps/coordinator-api/src/app/routers/multimodal_health.py b/apps/coordinator-api/src/app/routers/multimodal_health.py index bbcb6c58..39c7c964 100755 --- a/apps/coordinator-api/src/app/routers/multimodal_health.py +++ b/apps/coordinator-api/src/app/routers/multimodal_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Multi-Modal Agent Service Health Check Router Provides health monitoring for multi-modal processing capabilities @@ -10,7 +11,7 @@ import sys import psutil from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.multimodal_agent import MultiModalAgentService from ..logging import get_logger @@ -19,7 +20,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="Multi-Modal Agent Service Health") -async def multimodal_health(session: SessionDep) -> Dict[str, Any]: +async def multimodal_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for Multi-Modal Agent Service (Port 8002) """ @@ -94,7 +95,7 @@ async def multimodal_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep Multi-Modal Service Health") -async def multimodal_deep_health(session: SessionDep) -> Dict[str, Any]: +async def multimodal_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with detailed multi-modal processing tests """ diff --git a/apps/coordinator-api/src/app/routers/openclaw_enhanced.py b/apps/coordinator-api/src/app/routers/openclaw_enhanced.py index 9be2dc87..1042c766 100755 --- a/apps/coordinator-api/src/app/routers/openclaw_enhanced.py +++ b/apps/coordinator-api/src/app/routers/openclaw_enhanced.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ OpenClaw Integration Enhancement API Router - Phase 6.6 REST API endpoints for advanced agent orchestration, edge computing integration, and ecosystem development @@ -11,7 +13,7 @@ from pydantic import BaseModel, Field from ..domain import AIAgentWorkflow, AgentExecution, AgentStatus from ..services.openclaw_enhanced import OpenClawEnhancedService, SkillType, ExecutionMode -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from ..schemas.openclaw_enhanced import ( SkillRoutingRequest, SkillRoutingResponse, @@ -31,7 +33,7 @@ router = APIRouter(prefix="/openclaw/enhanced", tags=["OpenClaw Enhanced"]) @router.post("/routing/skill", response_model=SkillRoutingResponse) async def route_agent_skill( routing_request: SkillRoutingRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Sophisticated agent skill routing""" @@ -59,7 +61,7 @@ async def route_agent_skill( @router.post("/offloading/intelligent", response_model=JobOffloadingResponse) async def intelligent_job_offloading( offloading_request: JobOffloadingRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Intelligent job offloading strategies""" @@ -88,7 +90,7 @@ async def intelligent_job_offloading( @router.post("/collaboration/coordinate", response_model=AgentCollaborationResponse) async def coordinate_agent_collaboration( collaboration_request: AgentCollaborationRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Agent collaboration and coordination""" @@ -117,7 +119,7 @@ async def coordinate_agent_collaboration( @router.post("/execution/hybrid-optimize", response_model=HybridExecutionResponse) async def optimize_hybrid_execution( execution_request: HybridExecutionRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Hybrid execution optimization""" @@ -145,7 +147,7 @@ async def optimize_hybrid_execution( @router.post("/edge/deploy", response_model=EdgeDeploymentResponse) async def deploy_to_edge( deployment_request: EdgeDeploymentRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Deploy agent to edge computing infrastructure""" @@ -174,7 +176,7 @@ async def deploy_to_edge( @router.post("/edge/coordinate", response_model=EdgeCoordinationResponse) async def coordinate_edge_to_cloud( coordination_request: EdgeCoordinationRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Coordinate edge-to-cloud agent operations""" @@ -203,7 +205,7 @@ async def coordinate_edge_to_cloud( @router.post("/ecosystem/develop", response_model=EcosystemDevelopmentResponse) async def develop_openclaw_ecosystem( ecosystem_request: EcosystemDevelopmentRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Build comprehensive OpenClaw ecosystem""" diff --git a/apps/coordinator-api/src/app/routers/openclaw_enhanced_app.py b/apps/coordinator-api/src/app/routers/openclaw_enhanced_app.py index 1644ffbf..daa04561 100755 --- a/apps/coordinator-api/src/app/routers/openclaw_enhanced_app.py +++ b/apps/coordinator-api/src/app/routers/openclaw_enhanced_app.py @@ -1,13 +1,15 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ OpenClaw Enhanced Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .openclaw_enhanced_simple import router from .openclaw_enhanced_health import router as health_router -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session app = FastAPI( title="AITBC OpenClaw Enhanced Service", diff --git a/apps/coordinator-api/src/app/routers/openclaw_enhanced_health.py b/apps/coordinator-api/src/app/routers/openclaw_enhanced_health.py index a5714a67..1d837411 100755 --- a/apps/coordinator-api/src/app/routers/openclaw_enhanced_health.py +++ b/apps/coordinator-api/src/app/routers/openclaw_enhanced_health.py @@ -1,3 +1,4 @@ +from typing import Annotated """ OpenClaw Enhanced Service Health Check Router Provides health monitoring for agent orchestration, edge computing, and ecosystem development @@ -11,7 +12,7 @@ import psutil import subprocess from typing import Dict, Any -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.openclaw_enhanced import OpenClawEnhancedService from ..logging import get_logger @@ -20,7 +21,7 @@ router = APIRouter() @router.get("/health", tags=["health"], summary="OpenClaw Enhanced Service Health") -async def openclaw_enhanced_health(session: SessionDep) -> Dict[str, Any]: +async def openclaw_enhanced_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Health check for OpenClaw Enhanced Service (Port 8007) """ @@ -109,7 +110,7 @@ async def openclaw_enhanced_health(session: SessionDep) -> Dict[str, Any]: @router.get("/health/deep", tags=["health"], summary="Deep OpenClaw Enhanced Service Health") -async def openclaw_enhanced_deep_health(session: SessionDep) -> Dict[str, Any]: +async def openclaw_enhanced_deep_health(session: Annotated[Session, Depends(get_session)] = Depends()) -> Dict[str, Any]: """ Deep health check with OpenClaw ecosystem validation """ diff --git a/apps/coordinator-api/src/app/routers/openclaw_enhanced_simple.py b/apps/coordinator-api/src/app/routers/openclaw_enhanced_simple.py index a6d628d2..9a0bf806 100755 --- a/apps/coordinator-api/src/app/routers/openclaw_enhanced_simple.py +++ b/apps/coordinator-api/src/app/routers/openclaw_enhanced_simple.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ OpenClaw Enhanced API Router - Simplified Version REST API endpoints for OpenClaw integration features @@ -10,7 +12,7 @@ from fastapi import APIRouter, HTTPException, Depends from pydantic import BaseModel, Field from ..services.openclaw_enhanced_simple import OpenClawEnhancedService, SkillType, ExecutionMode -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..deps import require_admin_key from sqlmodel import Session @@ -67,7 +69,7 @@ class EcosystemDevelopmentRequest(BaseModel): @router.post("/routing/skill") async def route_agent_skill( request: SkillRoutingRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Route agent skill to appropriate agent""" @@ -90,7 +92,7 @@ async def route_agent_skill( @router.post("/offloading/intelligent") async def intelligent_job_offloading( request: JobOffloadingRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Intelligent job offloading strategies""" @@ -113,7 +115,7 @@ async def intelligent_job_offloading( @router.post("/collaboration/coordinate") async def coordinate_agent_collaboration( request: AgentCollaborationRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Agent collaboration and coordination""" @@ -136,7 +138,7 @@ async def coordinate_agent_collaboration( @router.post("/execution/hybrid-optimize") async def optimize_hybrid_execution( request: HybridExecutionRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Hybrid execution optimization""" @@ -158,7 +160,7 @@ async def optimize_hybrid_execution( @router.post("/edge/deploy") async def deploy_to_edge( request: EdgeDeploymentRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Deploy agent to edge computing infrastructure""" @@ -181,7 +183,7 @@ async def deploy_to_edge( @router.post("/edge/coordinate") async def coordinate_edge_to_cloud( request: EdgeCoordinationRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Coordinate edge-to-cloud agent operations""" @@ -203,7 +205,7 @@ async def coordinate_edge_to_cloud( @router.post("/ecosystem/develop") async def develop_openclaw_ecosystem( request: EcosystemDevelopmentRequest, - session: Session = Depends(SessionDep), + session: Session = Depends(Annotated[Session, Depends(get_session)]), current_user: str = Depends(require_admin_key()) ): """Build OpenClaw ecosystem components""" diff --git a/apps/coordinator-api/src/app/routers/partners.py b/apps/coordinator-api/src/app/routers/partners.py index 3abbff3b..69b9bfa0 100755 --- a/apps/coordinator-api/src/app/routers/partners.py +++ b/apps/coordinator-api/src/app/routers/partners.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Partner Router - Third-party integration management """ @@ -10,7 +12,7 @@ import secrets import hashlib from ..schemas import UserProfile -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from sqlmodel import select router = APIRouter(tags=["partners"]) @@ -58,7 +60,7 @@ WEBHOOKS_DB = {} @router.post("/partners/register", response_model=PartnerResponse) async def register_partner( partner: PartnerRegister, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> PartnerResponse: """Register a new partner application""" @@ -103,7 +105,7 @@ async def register_partner( @router.get("/partners/{partner_id}") async def get_partner( partner_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str ) -> Dict[str, Any]: """Get partner information""" @@ -127,7 +129,7 @@ async def get_partner( @router.post("/partners/webhooks", response_model=WebhookResponse) async def create_webhook( webhook: WebhookCreate, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str ) -> WebhookResponse: """Create a webhook subscription""" @@ -178,7 +180,7 @@ async def create_webhook( @router.get("/partners/webhooks") async def list_webhooks( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str ) -> List[WebhookResponse]: """List partner webhooks""" @@ -206,7 +208,7 @@ async def list_webhooks( @router.delete("/partners/webhooks/{webhook_id}") async def delete_webhook( webhook_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str ) -> Dict[str, str]: """Delete a webhook""" @@ -229,7 +231,7 @@ async def delete_webhook( @router.get("/partners/analytics/usage") async def get_usage_analytics( - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), api_key: str, period: str = "24h" ) -> Dict[str, Any]: diff --git a/apps/coordinator-api/src/app/routers/payments.py b/apps/coordinator-api/src/app/routers/payments.py index c9d1d51e..e7a24558 100755 --- a/apps/coordinator-api/src/app/routers/payments.py +++ b/apps/coordinator-api/src/app/routers/payments.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """Payment router for job payments""" from fastapi import APIRouter, Depends, HTTPException, status @@ -13,7 +15,7 @@ from ..schemas import ( RefundRequest ) from ..services.payments import PaymentService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session router = APIRouter(tags=["payments"]) @@ -21,7 +23,7 @@ router = APIRouter(tags=["payments"]) @router.post("/payments", response_model=JobPaymentView, status_code=status.HTTP_201_CREATED, summary="Create payment for a job") async def create_payment( payment_data: JobPaymentCreate, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobPaymentView: """Create a payment for a job""" @@ -35,7 +37,7 @@ async def create_payment( @router.get("/payments/{payment_id}", response_model=JobPaymentView, summary="Get payment details") async def get_payment( payment_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobPaymentView: """Get payment details by ID""" @@ -55,7 +57,7 @@ async def get_payment( @router.get("/jobs/{job_id}/payment", response_model=JobPaymentView, summary="Get payment for a job") async def get_job_payment( job_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> JobPaymentView: """Get payment information for a specific job""" @@ -76,7 +78,7 @@ async def get_job_payment( async def release_payment( payment_id: str, release_data: EscrowRelease, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> dict: """Release payment from escrow (for completed jobs)""" @@ -110,7 +112,7 @@ async def release_payment( async def refund_payment( payment_id: str, refund_data: RefundRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> dict: """Refund payment (for failed or cancelled jobs)""" @@ -143,7 +145,7 @@ async def refund_payment( @router.get("/payments/{payment_id}/receipt", response_model=PaymentReceipt, summary="Get payment receipt") async def get_payment_receipt( payment_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> PaymentReceipt: """Get payment receipt with verification status""" diff --git a/apps/coordinator-api/src/app/routers/reputation.py b/apps/coordinator-api/src/app/routers/reputation.py index 1be4d806..4deb1e90 100755 --- a/apps/coordinator-api/src/app/routers/reputation.py +++ b/apps/coordinator-api/src/app/routers/reputation.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Reputation Management API Endpoints REST API for agent reputation, trust scores, and economic profiles @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.reputation_service import ReputationService from ..domain.reputation import ( AgentReputation, CommunityFeedback, ReputationLevel, @@ -121,7 +123,7 @@ class ReputationMetricsResponse(BaseModel): @router.get("/profile/{agent_id}", response_model=ReputationProfileResponse) async def get_reputation_profile( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> ReputationProfileResponse: """Get comprehensive reputation profile for an agent""" @@ -143,7 +145,7 @@ async def get_reputation_profile( @router.post("/profile/{agent_id}") async def create_reputation_profile( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Create a new reputation profile for an agent""" @@ -169,7 +171,7 @@ async def create_reputation_profile( async def add_community_feedback( agent_id: str, feedback_request: FeedbackRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> FeedbackResponse: """Add community feedback for an agent""" @@ -207,7 +209,7 @@ async def add_community_feedback( @router.post("/job-completion") async def record_job_completion( job_request: JobCompletionRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Record job completion and update reputation""" @@ -240,7 +242,7 @@ async def record_job_completion( @router.get("/trust-score/{agent_id}", response_model=TrustScoreResponse) async def get_trust_score_breakdown( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TrustScoreResponse: """Get detailed trust score breakdown for an agent""" @@ -281,7 +283,7 @@ async def get_reputation_leaderboard( category: str = Query(default="trust_score", description="Category to rank by"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), region: Optional[str] = Query(default=None, description="Filter by region"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[LeaderboardEntry]: """Get reputation leaderboard""" @@ -303,7 +305,7 @@ async def get_reputation_leaderboard( @router.get("/metrics", response_model=ReputationMetricsResponse) async def get_reputation_metrics( - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> ReputationMetricsResponse: """Get overall reputation system metrics""" @@ -376,7 +378,7 @@ async def get_reputation_metrics( async def get_agent_feedback( agent_id: str, limit: int = Query(default=10, ge=1, le=50), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[FeedbackResponse]: """Get community feedback for an agent""" @@ -420,7 +422,7 @@ async def get_agent_feedback( async def get_reputation_events( agent_id: str, limit: int = Query(default=20, ge=1, le=100), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get reputation change events for an agent""" @@ -457,7 +459,7 @@ async def get_reputation_events( async def update_specialization( agent_id: str, specialization_tags: List[str], - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Update agent specialization tags""" @@ -493,7 +495,7 @@ async def update_specialization( async def update_region( agent_id: str, region: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Update agent geographic region""" @@ -529,7 +531,7 @@ async def update_region( @router.get("/{agent_id}/cross-chain") async def get_cross_chain_reputation( agent_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reputation_service: ReputationService = Depends() ) -> Dict[str, Any]: """Get cross-chain reputation data for an agent""" @@ -578,7 +580,7 @@ async def get_cross_chain_reputation( async def sync_cross_chain_reputation( agent_id: str, background_tasks: Any, # FastAPI BackgroundTasks - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reputation_service: ReputationService = Depends() ) -> Dict[str, Any]: """Synchronize reputation across chains for an agent""" @@ -612,7 +614,7 @@ async def sync_cross_chain_reputation( async def get_cross_chain_leaderboard( limit: int = Query(50, ge=1, le=100), min_score: float = Query(0.0, ge=0.0, le=1.0), - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reputation_service: ReputationService = Depends() ) -> Dict[str, Any]: """Get cross-chain reputation leaderboard""" @@ -659,7 +661,7 @@ async def get_cross_chain_leaderboard( async def submit_cross_chain_event( event_data: Dict[str, Any], background_tasks: Any, # FastAPI BackgroundTasks - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reputation_service: ReputationService = Depends() ) -> Dict[str, Any]: """Submit a cross-chain reputation event""" @@ -723,7 +725,7 @@ async def submit_cross_chain_event( @router.get("/cross-chain/analytics") async def get_cross_chain_analytics( chain_id: Optional[int] = Query(None), - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reputation_service: ReputationService = Depends() ) -> Dict[str, Any]: """Get cross-chain reputation analytics""" diff --git a/apps/coordinator-api/src/app/routers/rewards.py b/apps/coordinator-api/src/app/routers/rewards.py index 7d49acd5..393ea711 100755 --- a/apps/coordinator-api/src/app/routers/rewards.py +++ b/apps/coordinator-api/src/app/routers/rewards.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Reward System API Endpoints REST API for agent rewards, incentives, and performance-based earnings @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.reward_service import RewardEngine from ..domain.rewards import ( AgentRewardProfile, RewardTier, RewardType, RewardStatus @@ -113,7 +115,7 @@ class MilestoneResponse(BaseModel): @router.get("/profile/{agent_id}", response_model=RewardProfileResponse) async def get_reward_profile( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> RewardProfileResponse: """Get comprehensive reward profile for an agent""" @@ -135,7 +137,7 @@ async def get_reward_profile( @router.post("/profile/{agent_id}") async def create_reward_profile( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Create a new reward profile for an agent""" @@ -160,7 +162,7 @@ async def create_reward_profile( @router.post("/calculate-and-distribute", response_model=RewardResponse) async def calculate_and_distribute_reward( reward_request: RewardRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> RewardResponse: """Calculate and distribute reward for an agent""" @@ -199,7 +201,7 @@ async def calculate_and_distribute_reward( @router.get("/tier-progress/{agent_id}", response_model=TierProgressResponse) async def get_tier_progress( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TierProgressResponse: """Get tier progress information for an agent""" @@ -299,7 +301,7 @@ async def get_tier_progress( @router.post("/batch-process", response_model=BatchProcessResponse) async def batch_process_pending_rewards( limit: int = Query(default=100, ge=1, le=1000, description="Maximum number of rewards to process"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> BatchProcessResponse: """Process pending reward distributions in batch""" @@ -324,7 +326,7 @@ async def get_reward_analytics( period_type: str = Query(default="daily", description="Period type: daily, weekly, monthly"), start_date: Optional[str] = Query(default=None, description="Start date (ISO format)"), end_date: Optional[str] = Query(default=None, description="End date (ISO format)"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> RewardAnalyticsResponse: """Get reward system analytics""" @@ -357,7 +359,7 @@ async def get_reward_leaderboard( tier: Optional[str] = Query(default=None, description="Filter by tier"), period: str = Query(default="weekly", description="Period: daily, weekly, monthly"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get reward leaderboard""" @@ -406,7 +408,7 @@ async def get_reward_leaderboard( @router.get("/tiers") async def get_reward_tiers( - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get reward tier configurations""" @@ -443,7 +445,7 @@ async def get_reward_tiers( async def get_agent_milestones( agent_id: str, include_completed: bool = Query(default=True, description="Include completed milestones"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[MilestoneResponse]: """Get milestones for an agent""" @@ -487,7 +489,7 @@ async def get_reward_distributions( agent_id: str, limit: int = Query(default=20, ge=1, le=100), status: Optional[str] = Query(default=None, description="Filter by status"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[Dict[str, Any]]: """Get reward distribution history for an agent""" @@ -527,7 +529,7 @@ async def get_reward_distributions( @router.post("/simulate-reward") async def simulate_reward_calculation( reward_request: RewardRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Simulate reward calculation without distributing""" diff --git a/apps/coordinator-api/src/app/routers/services.py b/apps/coordinator-api/src/app/routers/services.py index 8f82dab7..bcd61ed4 100755 --- a/apps/coordinator-api/src/app/routers/services.py +++ b/apps/coordinator-api/src/app/routers/services.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Services router for specific GPU workloads """ @@ -20,7 +22,7 @@ from ..models.services import ( ) # from ..models.registry import ServiceRegistry, service_registry from ..services import JobService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session router = APIRouter(tags=["services"]) @@ -35,7 +37,7 @@ router = APIRouter(tags=["services"]) async def submit_service_job( service_type: ServiceType, request_data: Dict[str, Any], - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), user_agent: str = Header(None), ) -> ServiceResponse: @@ -118,7 +120,7 @@ async def submit_service_job( ) async def whisper_transcribe( request: WhisperRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Transcribe audio file using Whisper""" @@ -153,7 +155,7 @@ async def whisper_transcribe( ) async def whisper_translate( request: WhisperRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Translate audio file using Whisper""" @@ -191,7 +193,7 @@ async def whisper_translate( ) async def stable_diffusion_generate( request: StableDiffusionRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Generate images using Stable Diffusion""" @@ -226,7 +228,7 @@ async def stable_diffusion_generate( ) async def stable_diffusion_img2img( request: StableDiffusionRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Image-to-image generation using Stable Diffusion""" @@ -265,7 +267,7 @@ async def stable_diffusion_img2img( ) async def llm_inference( request: LLMRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Run inference on a language model""" @@ -298,7 +300,7 @@ async def llm_inference( ) async def llm_stream( request: LLMRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ): """Stream LLM inference response""" @@ -338,7 +340,7 @@ async def llm_stream( ) async def ffmpeg_transcode( request: FFmpegRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Transcode video using FFmpeg""" @@ -375,7 +377,7 @@ async def ffmpeg_transcode( ) async def blender_render( request: BlenderRequest, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), client_id: str = Depends(require_client_key()), ) -> ServiceResponse: """Render scene using Blender""" diff --git a/apps/coordinator-api/src/app/routers/staking.py b/apps/coordinator-api/src/app/routers/staking.py index c77b12d0..58e05072 100755 --- a/apps/coordinator-api/src/app/routers/staking.py +++ b/apps/coordinator-api/src/app/routers/staking.py @@ -1,3 +1,4 @@ +from typing import Annotated """ Staking Management API REST API for AI agent staking system with reputation-based yield farming @@ -9,7 +10,7 @@ from typing import List, Optional, Dict, Any from datetime import datetime, timedelta from pydantic import BaseModel, Field, validator -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..logging import get_logger from ..domain.bounty import ( AgentStake, AgentMetrics, StakingPool, StakeStatus, @@ -137,7 +138,7 @@ class EarningsDistributionRequest(BaseModel): distribution_data: Dict[str, Any] = Field(default_factory=dict) # Dependency injection -def get_staking_service(session: SessionDep) -> StakingService: +def get_staking_service(session: Annotated[Session, Depends(get_session)]) -> StakingService: return StakingService(session) def get_blockchain_service() -> BlockchainService: @@ -148,7 +149,7 @@ def get_blockchain_service() -> BlockchainService: async def create_stake( request: StakeCreateRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -189,7 +190,7 @@ async def create_stake( @router.get("/stake/{stake_id}", response_model=StakeResponse) async def get_stake( stake_id: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) ): @@ -214,7 +215,7 @@ async def get_stake( @router.get("/stakes", response_model=List[StakeResponse]) async def get_stakes( filters: StakingFilterRequest = Depends(), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) ): @@ -243,7 +244,7 @@ async def add_to_stake( stake_id: str, request: StakeUpdateRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -286,7 +287,7 @@ async def add_to_stake( async def unbond_stake( stake_id: str, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -328,7 +329,7 @@ async def unbond_stake( async def complete_unbonding( stake_id: str, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -371,7 +372,7 @@ async def complete_unbonding( @router.get("/stake/{stake_id}/rewards") async def get_stake_rewards( stake_id: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) ): @@ -406,7 +407,7 @@ async def get_stake_rewards( @router.get("/agents/{agent_wallet}/metrics", response_model=AgentMetricsResponse) async def get_agent_metrics( agent_wallet: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get agent performance metrics""" @@ -426,7 +427,7 @@ async def get_agent_metrics( @router.get("/agents/{agent_wallet}/staking-pool", response_model=StakingPoolResponse) async def get_staking_pool( agent_wallet: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get staking pool information for an agent""" @@ -447,7 +448,7 @@ async def get_staking_pool( async def get_agent_apy( agent_wallet: str, lock_period: int = Field(default=30, ge=1, le=365), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get current APY for staking on an agent""" @@ -471,7 +472,7 @@ async def update_agent_performance( agent_wallet: str, request: AgentPerformanceUpdateRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -509,7 +510,7 @@ async def distribute_agent_earnings( agent_wallet: str, request: EarningsDistributionRequest, background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -552,7 +553,7 @@ async def get_supported_agents( page: int = Field(default=1, ge=1), limit: int = Field(default=50, ge=1, le=100), tier: Optional[PerformanceTier] = None, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get list of supported agents for staking""" @@ -577,7 +578,7 @@ async def get_supported_agents( @router.get("/staking/stats", response_model=StakingStatsResponse) async def get_staking_stats( period: str = Field(default="daily", regex="^(hourly|daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get staking system statistics""" @@ -595,7 +596,7 @@ async def get_staking_leaderboard( period: str = Field(default="weekly", regex="^(daily|weekly|monthly)$"), metric: str = Field(default="total_staked", regex="^(total_staked|total_rewards|apy)$"), limit: int = Field(default=50, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get staking leaderboard""" @@ -618,7 +619,7 @@ async def get_my_staking_positions( agent_wallet: Optional[str] = None, page: int = Field(default=1, ge=1), limit: int = Field(default=20, ge=1, le=100), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) ): @@ -641,7 +642,7 @@ async def get_my_staking_positions( @router.get("/staking/my-rewards") async def get_my_staking_rewards( period: str = Field(default="monthly", regex="^(daily|weekly|monthly)$"), - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), current_user: dict = Depends(get_current_user) ): @@ -662,7 +663,7 @@ async def get_my_staking_rewards( async def claim_staking_rewards( stake_ids: List[str], background_tasks: BackgroundTasks, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service), blockchain_service: BlockchainService = Depends(get_blockchain_service), current_user: dict = Depends(get_current_user) @@ -709,7 +710,7 @@ async def claim_staking_rewards( @router.get("/staking/risk-assessment/{agent_wallet}") async def get_risk_assessment( agent_wallet: str, - session: SessionDep = Depends(), + session: Annotated[Session, Depends(get_session)] = Depends(), staking_service: StakingService = Depends(get_staking_service) ): """Get risk assessment for staking on an agent""" diff --git a/apps/coordinator-api/src/app/routers/trading.py b/apps/coordinator-api/src/app/routers/trading.py index 45cff42d..763cc461 100755 --- a/apps/coordinator-api/src/app/routers/trading.py +++ b/apps/coordinator-api/src/app/routers/trading.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ P2P Trading Protocol API Endpoints REST API for agent-to-agent trading, matching, negotiation, and settlement @@ -9,7 +11,7 @@ from fastapi import APIRouter, HTTPException, Depends, Query from pydantic import BaseModel, Field from aitbc.logging import get_logger -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..services.trading_service import P2PTradingProtocol from ..domain.trading import ( TradeRequest, TradeMatch, TradeNegotiation, TradeAgreement, TradeSettlement, @@ -154,7 +156,7 @@ class TradingSummaryResponse(BaseModel): @router.post("/requests", response_model=TradeRequestResponse) async def create_trade_request( request_data: TradeRequestRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TradeRequestResponse: """Create a new trade request""" @@ -216,7 +218,7 @@ async def create_trade_request( @router.get("/requests/{request_id}", response_model=TradeRequestResponse) async def get_trade_request( request_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TradeRequestResponse: """Get trade request details""" @@ -254,7 +256,7 @@ async def get_trade_request( @router.post("/requests/{request_id}/matches") async def find_matches( request_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[str]: """Find matching sellers for a trade request""" @@ -274,7 +276,7 @@ async def find_matches( @router.get("/requests/{request_id}/matches") async def get_trade_matches( request_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[TradeMatchResponse]: """Get trade matches for a request""" @@ -314,7 +316,7 @@ async def get_trade_matches( @router.post("/negotiations", response_model=NegotiationResponse) async def initiate_negotiation( negotiation_data: NegotiationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> NegotiationResponse: """Initiate negotiation between buyer and seller""" @@ -352,7 +354,7 @@ async def initiate_negotiation( @router.get("/negotiations/{negotiation_id}", response_model=NegotiationResponse) async def get_negotiation( negotiation_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> NegotiationResponse: """Get negotiation details""" @@ -389,7 +391,7 @@ async def get_negotiation( @router.get("/matches/{match_id}") async def get_trade_match( match_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TradeMatchResponse: """Get trade match details""" @@ -430,7 +432,7 @@ async def get_trade_match( @router.get("/agents/{agent_id}/summary", response_model=TradingSummaryResponse) async def get_trading_summary( agent_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> TradingSummaryResponse: """Get comprehensive trading summary for an agent""" @@ -452,7 +454,7 @@ async def list_trade_requests( trade_type: Optional[str] = Query(default=None, description="Filter by trade type"), status: Optional[str] = Query(default=None, description="Filter by status"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[TradeRequestResponse]: """List trade requests with filters""" @@ -500,7 +502,7 @@ async def list_trade_matches( min_score: Optional[float] = Query(default=None, description="Minimum match score"), status: Optional[str] = Query(default=None, description="Filter by status"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[TradeMatchResponse]: """List trade matches with filters""" @@ -556,7 +558,7 @@ async def list_negotiations( status: Optional[str] = Query(default=None, description="Filter by status"), strategy: Optional[str] = Query(default=None, description="Filter by strategy"), limit: int = Query(default=50, ge=1, le=100, description="Number of results"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> List[NegotiationResponse]: """List negotiations with filters""" @@ -607,7 +609,7 @@ async def get_trading_analytics( period_type: str = Query(default="daily", description="Period type: daily, weekly, monthly"), start_date: Optional[str] = Query(default=None, description="Start date (ISO format)"), end_date: Optional[str] = Query(default=None, description="End date (ISO format)"), - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get P2P trading analytics""" @@ -671,7 +673,7 @@ async def get_trading_analytics( @router.post("/simulate-match") async def simulate_trade_matching( request_data: TradeRequestRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Simulate trade matching without creating actual request""" diff --git a/apps/coordinator-api/src/app/routers/users.py b/apps/coordinator-api/src/app/routers/users.py index d60cc979..bd3cffea 100755 --- a/apps/coordinator-api/src/app/routers/users.py +++ b/apps/coordinator-api/src/app/routers/users.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ User Management Router for AITBC """ @@ -10,7 +12,7 @@ import time import hashlib from datetime import datetime, timedelta -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..domain import User, Wallet from ..schemas import UserCreate, UserLogin, UserProfile, UserBalance @@ -50,7 +52,7 @@ def verify_session_token(token: str) -> Optional[str]: @router.post("/register", response_model=UserProfile) async def register_user( user_data: UserCreate, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Register a new user""" @@ -103,7 +105,7 @@ async def register_user( @router.post("/login", response_model=UserProfile) async def login_user( login_data: UserLogin, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Login user with wallet address""" @@ -161,7 +163,7 @@ async def login_user( @router.get("/users/me", response_model=UserProfile) async def get_current_user( token: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get current user profile""" @@ -190,7 +192,7 @@ async def get_current_user( @router.get("/users/{user_id}/balance", response_model=UserBalance) async def get_user_balance( user_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get user's AITBC balance""" @@ -223,7 +225,7 @@ async def logout_user(token: str) -> Dict[str, str]: @router.get("/users/{user_id}/transactions") async def get_user_transactions( user_id: str, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """Get user's transaction history""" diff --git a/apps/coordinator-api/src/app/routers/zk_applications.py b/apps/coordinator-api/src/app/routers/zk_applications.py index fc579e0e..382085d3 100755 --- a/apps/coordinator-api/src/app/routers/zk_applications.py +++ b/apps/coordinator-api/src/app/routers/zk_applications.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ ZK Applications Router - Privacy-preserving features for AITBC """ @@ -11,7 +13,7 @@ from datetime import datetime import json from ..schemas import UserProfile -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session router = APIRouter(tags=["zk-applications"]) @@ -48,7 +50,7 @@ class ZKComputationRequest(BaseModel): @router.post("/zk/identity/commit") async def create_identity_commitment( user: UserProfile, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), salt: Optional[str] = None ) -> Dict[str, str]: """Create a privacy-preserving identity commitment""" @@ -72,7 +74,7 @@ async def create_identity_commitment( @router.post("/zk/membership/verify") async def verify_group_membership( request: ZKMembershipRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """ Verify that a user is a member of a group without revealing which user @@ -111,7 +113,7 @@ async def verify_group_membership( @router.post("/zk/marketplace/private-bid") async def submit_private_bid( request: PrivateBidRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, str]: """ Submit a bid to the marketplace without revealing the amount @@ -137,7 +139,7 @@ async def submit_private_bid( @router.get("/zk/marketplace/auctions/{auction_id}/bids") async def get_auction_bids( auction_id: str, - session: SessionDep, + session: Annotated[Session, Depends(get_session)] = Depends(), reveal: bool = False ) -> Dict[str, Any]: """ @@ -176,7 +178,7 @@ async def get_auction_bids( @router.post("/zk/computation/verify") async def verify_computation_proof( request: ZKComputationRequest, - session: SessionDep + session: Annotated[Session, Depends(get_session)] = Depends() ) -> Dict[str, Any]: """ Verify that an AI computation was performed correctly without revealing inputs diff --git a/apps/coordinator-api/src/app/services/adaptive_learning.py b/apps/coordinator-api/src/app/services/adaptive_learning.py index a3075f5e..73ce3f12 100755 --- a/apps/coordinator-api/src/app/services/adaptive_learning.py +++ b/apps/coordinator-api/src/app/services/adaptive_learning.py @@ -1,3 +1,6 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends """ Adaptive Learning Systems - Phase 5.2 Reinforcement learning frameworks for agent self-improvement @@ -11,7 +14,7 @@ from enum import Enum import numpy as np import json -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..domain import AIAgentWorkflow, AgentExecution, AgentStatus logger = get_logger(__name__) @@ -387,7 +390,7 @@ class ReinforcementLearningAgent: class AdaptiveLearningService: """Service for adaptive learning systems""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self.learning_agents = {} self.environments = {} diff --git a/apps/coordinator-api/src/app/services/adaptive_learning_app.py b/apps/coordinator-api/src/app/services/adaptive_learning_app.py index 56ee251d..e1bc895f 100755 --- a/apps/coordinator-api/src/app/services/adaptive_learning_app.py +++ b/apps/coordinator-api/src/app/services/adaptive_learning_app.py @@ -1,12 +1,14 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Adaptive Learning Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .adaptive_learning import AdaptiveLearningService, LearningAlgorithm, RewardType -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..routers.adaptive_learning_health import router as health_router app = FastAPI( @@ -34,7 +36,7 @@ async def health(): async def create_learning_environment( environment_id: str, config: dict, - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Create safe learning environment""" service = AdaptiveLearningService(session) @@ -49,7 +51,7 @@ async def create_learning_agent( agent_id: str, algorithm: str, config: dict, - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Create reinforcement learning agent""" service = AdaptiveLearningService(session) @@ -65,7 +67,7 @@ async def train_agent( agent_id: str, environment_id: str, training_config: dict, - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Train agent in environment""" service = AdaptiveLearningService(session) @@ -79,7 +81,7 @@ async def train_agent( @app.get("/agent-performance/{agent_id}") async def get_agent_performance( agent_id: str, - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Get agent performance metrics""" service = AdaptiveLearningService(session) diff --git a/apps/coordinator-api/src/app/services/advanced_ai_service.py b/apps/coordinator-api/src/app/services/advanced_ai_service.py index 78741063..b37433a9 100755 --- a/apps/coordinator-api/src/app/services/advanced_ai_service.py +++ b/apps/coordinator-api/src/app/services/advanced_ai_service.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Advanced AI Service - Phase 5.2 Implementation Integrates enhanced RL, multi-modal fusion, and GPU optimization @@ -7,7 +9,7 @@ Port: 8009 import asyncio import torch import torch.nn as nn -from fastapi import FastAPI, HTTPException, BackgroundTasks +from fastapi import FastAPI, HTTPException, BackgroundTasks, Depends from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel, Field from typing import Dict, List, Any, Optional, Union @@ -21,7 +23,7 @@ from .advanced_reinforcement_learning import AdvancedReinforcementLearningEngine from .multi_modal_fusion import MultiModalFusionEngine from .gpu_multimodal import GPUAcceleratedMultiModal from .advanced_learning import AdvancedLearningService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/services/edge_gpu_service.py b/apps/coordinator-api/src/app/services/edge_gpu_service.py index 53be7420..5ef462a1 100755 --- a/apps/coordinator-api/src/app/services/edge_gpu_service.py +++ b/apps/coordinator-api/src/app/services/edge_gpu_service.py @@ -1,12 +1,15 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends from typing import List, Optional from sqlmodel import select from ..domain.gpu_marketplace import ConsumerGPUProfile, GPUArchitecture, EdgeGPUMetrics from ..data.consumer_gpu_profiles import CONSUMER_GPU_PROFILES -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session class EdgeGPUService: - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session def list_profiles( diff --git a/apps/coordinator-api/src/app/services/gpu_multimodal.py b/apps/coordinator-api/src/app/services/gpu_multimodal.py index 88774b87..56142909 100755 --- a/apps/coordinator-api/src/app/services/gpu_multimodal.py +++ b/apps/coordinator-api/src/app/services/gpu_multimodal.py @@ -1,3 +1,6 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends """ GPU-Accelerated Multi-Modal Processing - Enhanced Implementation Advanced GPU optimization for cross-modal attention mechanisms @@ -14,7 +17,7 @@ import numpy as np from datetime import datetime import time -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from .multimodal_agent import ModalityType, ProcessingMode logger = get_logger(__name__) @@ -286,7 +289,7 @@ class GPUAttentionOptimizer: class GPUAcceleratedMultiModal: """GPU-accelerated multi-modal processing with enhanced CUDA optimization""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu") self._cuda_available = self._check_cuda_availability() diff --git a/apps/coordinator-api/src/app/services/gpu_multimodal_app.py b/apps/coordinator-api/src/app/services/gpu_multimodal_app.py index dba760c4..2e808bac 100755 --- a/apps/coordinator-api/src/app/services/gpu_multimodal_app.py +++ b/apps/coordinator-api/src/app/services/gpu_multimodal_app.py @@ -1,12 +1,14 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ GPU Multi-Modal Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .gpu_multimodal import GPUAcceleratedMultiModal -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..routers.gpu_multimodal_health import router as health_router app = FastAPI( @@ -34,7 +36,7 @@ async def health(): async def cross_modal_attention( modality_features: dict, attention_config: dict = None, - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """GPU-accelerated cross-modal attention""" service = GPUAcceleratedMultiModal(session) diff --git a/apps/coordinator-api/src/app/services/memory_manager.py b/apps/coordinator-api/src/app/services/memory_manager.py index 2a29ff1a..7907b48f 100755 --- a/apps/coordinator-api/src/app/services/memory_manager.py +++ b/apps/coordinator-api/src/app/services/memory_manager.py @@ -1,3 +1,6 @@ +from fastapi import Depends +from sqlalchemy.orm import Session +from typing import Annotated """ Memory Manager Service for Agent Memory Operations Handles memory lifecycle management, versioning, and optimization @@ -12,7 +15,7 @@ from enum import Enum import json from .ipfs_storage_service import IPFSStorageService, MemoryMetadata, IPFSUploadResult -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session logger = get_logger(__name__) diff --git a/apps/coordinator-api/src/app/services/modality_optimization.py b/apps/coordinator-api/src/app/services/modality_optimization.py index 458573fc..8e214008 100755 --- a/apps/coordinator-api/src/app/services/modality_optimization.py +++ b/apps/coordinator-api/src/app/services/modality_optimization.py @@ -1,3 +1,6 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends """ Modality-Specific Optimization Strategies - Phase 5.1 Specialized optimization for text, image, audio, video, tabular, and graph data @@ -10,7 +13,7 @@ from datetime import datetime from enum import Enum import numpy as np -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from .multimodal_agent import ModalityType logger = get_logger(__name__) @@ -27,7 +30,7 @@ class OptimizationStrategy(str, Enum): class ModalityOptimizer: """Base class for modality-specific optimizers""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self._performance_history = {} @@ -61,7 +64,7 @@ class ModalityOptimizer: class TextOptimizer(ModalityOptimizer): """Text processing optimization strategies""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): super().__init__(session) self._token_cache = {} self._embedding_cache = {} @@ -315,7 +318,7 @@ class TextOptimizer(ModalityOptimizer): class ImageOptimizer(ModalityOptimizer): """Image processing optimization strategies""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): super().__init__(session) self._feature_cache = {} @@ -859,7 +862,7 @@ class VideoOptimizer(ModalityOptimizer): class ModalityOptimizationManager: """Manager for all modality-specific optimizers""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self._optimizers = { ModalityType.TEXT: TextOptimizer(session), diff --git a/apps/coordinator-api/src/app/services/modality_optimization_app.py b/apps/coordinator-api/src/app/services/modality_optimization_app.py index 0dd3a251..2e27d6e5 100755 --- a/apps/coordinator-api/src/app/services/modality_optimization_app.py +++ b/apps/coordinator-api/src/app/services/modality_optimization_app.py @@ -1,12 +1,14 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Modality Optimization Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .modality_optimization import ModalityOptimizationManager, OptimizationStrategy, ModalityType -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..routers.modality_optimization_health import router as health_router app = FastAPI( @@ -35,7 +37,7 @@ async def optimize_modality( modality: str, data: dict, strategy: str = "balanced", - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Optimize specific modality""" manager = ModalityOptimizationManager(session) @@ -50,7 +52,7 @@ async def optimize_modality( async def optimize_multimodal( multimodal_data: dict, strategy: str = "balanced", - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Optimize multiple modalities""" manager = ModalityOptimizationManager(session) diff --git a/apps/coordinator-api/src/app/services/multimodal_agent.py b/apps/coordinator-api/src/app/services/multimodal_agent.py index 301b7686..8274ea1c 100755 --- a/apps/coordinator-api/src/app/services/multimodal_agent.py +++ b/apps/coordinator-api/src/app/services/multimodal_agent.py @@ -1,3 +1,6 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends """ Multi-Modal Agent Service - Phase 5.1 Advanced AI agent capabilities with unified multi-modal processing pipeline @@ -10,7 +13,7 @@ from datetime import datetime from enum import Enum import json -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..domain import AIAgentWorkflow, AgentExecution, AgentStatus logger = get_logger(__name__) @@ -37,7 +40,7 @@ class ProcessingMode(str, Enum): class MultiModalAgentService: """Service for advanced multi-modal agent capabilities""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self._modality_processors = { ModalityType.TEXT: self._process_text, diff --git a/apps/coordinator-api/src/app/services/multimodal_app.py b/apps/coordinator-api/src/app/services/multimodal_app.py index f1cf1fdd..a7038293 100755 --- a/apps/coordinator-api/src/app/services/multimodal_app.py +++ b/apps/coordinator-api/src/app/services/multimodal_app.py @@ -1,12 +1,14 @@ +from sqlalchemy.orm import Session +from typing import Annotated """ Multi-Modal Agent Service - FastAPI Entry Point """ -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.middleware.cors import CORSMiddleware from .multimodal_agent import MultiModalAgentService -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session from ..routers.multimodal_health import router as health_router app = FastAPI( @@ -35,7 +37,7 @@ async def process_multimodal( agent_id: str, inputs: dict, processing_mode: str = "fusion", - session: SessionDep = None + session: Annotated[Session, Depends(get_session)] = Depends() = None ): """Process multi-modal input""" service = MultiModalAgentService(session) diff --git a/apps/coordinator-api/src/app/services/payments.py b/apps/coordinator-api/src/app/services/payments.py index aab65803..80131b45 100755 --- a/apps/coordinator-api/src/app/services/payments.py +++ b/apps/coordinator-api/src/app/services/payments.py @@ -1,3 +1,6 @@ +from sqlalchemy.orm import Session +from typing import Annotated +from fastapi import Depends """Payment service for job payments""" from datetime import datetime, timedelta @@ -13,7 +16,7 @@ from ..schemas import ( EscrowRelease, RefundRequest ) -from ..storage import SessionDep +from ..storage import Annotated[Session, Depends(get_session)], get_session logger = get_logger(__name__) @@ -21,7 +24,7 @@ logger = get_logger(__name__) class PaymentService: """Service for handling job payments""" - def __init__(self, session: SessionDep): + def __init__(self, session: Annotated[Session, Depends(get_session)] = Depends()): self.session = session self.wallet_base_url = "http://127.0.0.1:20000" # Wallet daemon URL self.exchange_base_url = "http://127.0.0.1:23000" # Exchange API URL diff --git a/apps/coordinator-api/src/app/storage/__init__.py b/apps/coordinator-api/src/app/storage/__init__.py index 77eef443..4c68a240 100755 --- a/apps/coordinator-api/src/app/storage/__init__.py +++ b/apps/coordinator-api/src/app/storage/__init__.py @@ -1,5 +1,12 @@ """Persistence helpers for the coordinator API.""" -from .db import SessionDep, get_session, init_db +from typing import Annotated +from fastapi import Depends +from sqlalchemy.orm import Session + +from .db import get_session, init_db + +# Concrete dependency annotation for FastAPI/Pydantic +SessionDep = Annotated[Session, Depends(get_session)] __all__ = ["SessionDep", "get_session", "init_db"] diff --git a/apps/coordinator-api/src/app/storage/db.py b/apps/coordinator-api/src/app/storage/db.py index 56771c3e..200f51a7 100755 --- a/apps/coordinator-api/src/app/storage/db.py +++ b/apps/coordinator-api/src/app/storage/db.py @@ -89,10 +89,8 @@ def session_scope() -> Generator[Session, None, None]: # Dependency for FastAPI from fastapi import Depends -from typing import Annotated, TYPE_CHECKING - -if TYPE_CHECKING: - from sqlalchemy.orm import Session +from typing import Annotated +from sqlalchemy.orm import Session def get_session(): """Get a database session.""" @@ -100,8 +98,8 @@ def get_session(): with Session(engine) as session: yield session -# Use string annotation to avoid ForwardRef issues -SessionDep = Annotated["Session", Depends(get_session)] +# Annotated dependency for FastAPI/Pydantic compatibility +SessionDep = Annotated[Session, Depends(get_session)] # Async support for future use diff --git a/cli/aitbc_cli/commands/marketplace.py b/cli/aitbc_cli/commands/marketplace.py index 89a7d289..4b1592ef 100755 --- a/cli/aitbc_cli/commands/marketplace.py +++ b/cli/aitbc_cli/commands/marketplace.py @@ -216,7 +216,7 @@ def confirm(ctx, gpu_id: str): try: with httpx.Client() as client: response = client.post( - f"{config.coordinator_url}/marketplace/gpu/{gpu_id}/confirm", + f"{config.coordinator_url}/v1/marketplace/gpu/{gpu_id}/confirm", headers={"Content-Type": "application/json", "X-Api-Key": config.api_key or ""}, json={"client_id": config.api_key or "client"}, ) @@ -249,7 +249,7 @@ def ollama_task(ctx, gpu_id: str, model: str, prompt: str, temperature: float, m } with httpx.Client() as client: response = client.post( - f"{config.coordinator_url}/tasks/ollama", + f"{config.coordinator_url}/v1/tasks/ollama", headers={"Content-Type": "application/json", "X-Api-Key": config.api_key or ""}, json=payload, ) @@ -284,7 +284,7 @@ def pay(ctx, booking_id: str, amount: float, from_wallet: str, to_wallet: str, t payload["task_id"] = task_id with httpx.Client() as client: response = client.post( - f"{config.coordinator_url}/payments/send", + f"{config.coordinator_url}/v1/payments/send", headers={"Content-Type": "application/json", "X-Api-Key": config.api_key or ""}, json=payload, )