Spaces:
Paused
Paused
| """ | |
| Task Marketplace - Generates and manages contracts for the CGAE economy. | |
| Creates tier-distributed task demand (Assumption 2a) with tier premiums | |
| (Assumption 2b), implementing the market structure required for | |
| Theorem 2 (incentive-compatible robustness investment). | |
| """ | |
| from __future__ import annotations | |
| import random | |
| from dataclasses import dataclass, field | |
| from typing import Optional | |
| from cgae_engine.gate import Tier | |
| from cgae_engine.contracts import CGAEContract, Constraint, ContractManager | |
| class TaskTemplate: | |
| """Template for generating contracts in a specific domain.""" | |
| domain: str | |
| objective_template: str | |
| min_tier: Tier | |
| base_reward: float | |
| base_penalty: float | |
| difficulty_range: tuple[float, float] # (min, max) | |
| constraint_names: list[str] | |
| # Predefined task templates across tiers and domains | |
| TASK_TEMPLATES = [ | |
| # Tier 1: Microtasks | |
| TaskTemplate( | |
| domain="data_labeling", | |
| objective_template="Label {n} data points for {topic}", | |
| min_tier=Tier.T1, | |
| base_reward=0.002, | |
| base_penalty=0.001, | |
| difficulty_range=(0.1, 0.3), | |
| constraint_names=["format_compliance", "completeness"], | |
| ), | |
| TaskTemplate( | |
| domain="summarization", | |
| objective_template="Summarize document about {topic} in {n} words", | |
| min_tier=Tier.T1, | |
| base_reward=0.003, | |
| base_penalty=0.001, | |
| difficulty_range=(0.1, 0.4), | |
| constraint_names=["length_constraint", "accuracy"], | |
| ), | |
| # Tier 2: Verified contracts | |
| TaskTemplate( | |
| domain="analysis", | |
| objective_template="Analyze {topic} dataset and produce structured report", | |
| min_tier=Tier.T2, | |
| base_reward=0.015, | |
| base_penalty=0.008, | |
| difficulty_range=(0.3, 0.5), | |
| constraint_names=["format_compliance", "accuracy", "completeness"], | |
| ), | |
| TaskTemplate( | |
| domain="translation", | |
| objective_template="Translate {topic} document with domain terminology", | |
| min_tier=Tier.T2, | |
| base_reward=0.012, | |
| base_penalty=0.006, | |
| difficulty_range=(0.3, 0.6), | |
| constraint_names=["accuracy", "terminology_consistency"], | |
| ), | |
| # Tier 3: Autonomous contracting | |
| TaskTemplate( | |
| domain="contract_review", | |
| objective_template="Review and summarize contract terms for {topic}", | |
| min_tier=Tier.T3, | |
| base_reward=0.08, | |
| base_penalty=0.05, | |
| difficulty_range=(0.5, 0.7), | |
| constraint_names=["accuracy", "completeness", "legal_compliance", "format_compliance"], | |
| ), | |
| TaskTemplate( | |
| domain="financial_analysis", | |
| objective_template="Produce financial analysis of {topic} with risk assessment", | |
| min_tier=Tier.T3, | |
| base_reward=0.10, | |
| base_penalty=0.06, | |
| difficulty_range=(0.5, 0.8), | |
| constraint_names=["accuracy", "numerical_precision", "risk_disclosure"], | |
| ), | |
| # Tier 4: Delegation tasks | |
| TaskTemplate( | |
| domain="multi_step_workflow", | |
| objective_template="Orchestrate {n}-step workflow for {topic}", | |
| min_tier=Tier.T4, | |
| base_reward=0.50, | |
| base_penalty=0.30, | |
| difficulty_range=(0.6, 0.85), | |
| constraint_names=["accuracy", "completeness", "coordination", "deadline_compliance"], | |
| ), | |
| # Tier 5: Self-modification tasks | |
| TaskTemplate( | |
| domain="system_optimization", | |
| objective_template="Optimize {topic} system with self-tuning parameters", | |
| min_tier=Tier.T5, | |
| base_reward=2.0, | |
| base_penalty=1.0, | |
| difficulty_range=(0.8, 0.95), | |
| constraint_names=["accuracy", "safety_bounds", "rollback_capability", "audit_trail"], | |
| ), | |
| ] | |
| TOPICS = [ | |
| "healthcare data", "supply chain", "climate metrics", "user behavior", | |
| "financial instruments", "legal documents", "scientific papers", | |
| "social media trends", "energy consumption", "logistics routing", | |
| ] | |
| def _make_constraint(name: str) -> Constraint: | |
| """Create a simple constraint for simulation. In production, these would | |
| be real verification functions.""" | |
| # For simulation: constraint passes based on the output value (True/False) | |
| return Constraint( | |
| name=name, | |
| description=f"Verify {name.replace('_', ' ')}", | |
| verify=lambda output, _name=name: bool(output), | |
| ) | |
| class TaskMarketplace: | |
| """ | |
| Generates contracts with tier-distributed demand. | |
| Implements the market structure from Assumption 2: | |
| (a) Positive demand at each tier | |
| (b) Tier premium: E[r|T_k] < E[r|T_{k+1}] | |
| (c) Non-increasing supply at higher tiers | |
| """ | |
| def __init__( | |
| self, | |
| contract_manager: ContractManager, | |
| demand_distribution: Optional[dict[Tier, float]] = None, | |
| contracts_per_step: int = 10, | |
| ): | |
| self.contract_manager = contract_manager | |
| self.contracts_per_step = contracts_per_step | |
| # Demand weights per tier (higher tiers have less volume but more value) | |
| self.demand_distribution = demand_distribution or { | |
| Tier.T1: 0.40, # 40% of contracts are microtasks | |
| Tier.T2: 0.25, # 25% verified contracts | |
| Tier.T3: 0.20, # 20% autonomous | |
| Tier.T4: 0.10, # 10% delegation | |
| Tier.T5: 0.05, # 5% self-modification | |
| } | |
| # Group templates by tier | |
| self._templates_by_tier: dict[Tier, list[TaskTemplate]] = {} | |
| for t in TASK_TEMPLATES: | |
| self._templates_by_tier.setdefault(t.min_tier, []).append(t) | |
| def generate_contracts( | |
| self, | |
| current_time: float, | |
| deadline_offset: float = 50.0, | |
| ) -> list[CGAEContract]: | |
| """Generate a batch of contracts for this time step.""" | |
| contracts = [] | |
| for tier, weight in self.demand_distribution.items(): | |
| n = max(1, int(self.contracts_per_step * weight)) | |
| templates = self._templates_by_tier.get(tier, []) | |
| if not templates: | |
| continue | |
| for _ in range(n): | |
| template = random.choice(templates) | |
| topic = random.choice(TOPICS) | |
| n_items = random.randint(5, 50) | |
| # Reward jitter (+/- 20%) | |
| reward = template.base_reward * random.uniform(0.8, 1.2) | |
| penalty = template.base_penalty * random.uniform(0.8, 1.2) | |
| difficulty = random.uniform(*template.difficulty_range) | |
| constraints = [_make_constraint(cn) for cn in template.constraint_names] | |
| contract = self.contract_manager.create_contract( | |
| objective=template.objective_template.format(topic=topic, n=n_items), | |
| constraints=constraints, | |
| min_tier=template.min_tier, | |
| reward=reward, | |
| penalty=penalty, | |
| issuer_id="marketplace", | |
| deadline=current_time + deadline_offset, | |
| domain=template.domain, | |
| difficulty=difficulty, | |
| timestamp=current_time, | |
| ) | |
| contracts.append(contract) | |
| return contracts | |
| def market_summary(self) -> dict: | |
| """Summarize current market state.""" | |
| open_contracts = self.contract_manager.open_contracts | |
| tier_counts = {} | |
| tier_rewards = {} | |
| for c in open_contracts: | |
| tier = c.min_tier.name | |
| tier_counts[tier] = tier_counts.get(tier, 0) + 1 | |
| tier_rewards.setdefault(tier, []).append(c.reward) | |
| avg_rewards = { | |
| t: sum(rs) / len(rs) for t, rs in tier_rewards.items() | |
| } | |
| return { | |
| "open_contracts": len(open_contracts), | |
| "by_tier": tier_counts, | |
| "avg_reward_by_tier": avg_rewards, | |
| } | |