Spaces:
Running
Running
| """ | |
| Insurance Claims Environment Client | |
| Client for connecting to the Claims Processing environment. | |
| Supports both async and sync usage patterns. | |
| """ | |
| from typing import Optional, Dict, Any | |
| from dataclasses import asdict | |
| from openenv.core import EnvClient | |
| from openenv.core.env_client import StepResult | |
| from .models import ClaimsAction, ClaimsObservation, ClaimsState | |
| class ClaimsEnv(EnvClient[ClaimsAction, ClaimsObservation, ClaimsState]): | |
| """ | |
| Client for the Insurance Claims Processing environment. | |
| Example usage (async): | |
| async with ClaimsEnv(base_url="https://your-space.hf.space") as env: | |
| obs = await env.reset() | |
| result = await env.step(ClaimsAction(action_type="query_policy")) | |
| Example usage (sync): | |
| with ClaimsEnv(base_url="https://your-space.hf.space").sync() as env: | |
| obs = env.reset() | |
| result = env.step(ClaimsAction(action_type="query_policy")) | |
| """ | |
| def _step_payload(self, action: ClaimsAction) -> Dict[str, Any]: | |
| """Convert action to API payload.""" | |
| return { | |
| "action_type": action.action_type, | |
| "claim_id": action.claim_id, | |
| "parameters": action.parameters, | |
| } | |
| def _parse_result(self, payload: Dict[str, Any]) -> StepResult[ClaimsObservation]: | |
| """Parse API response into StepResult.""" | |
| obs_data = payload.get("observation", payload) | |
| observation = ClaimsObservation( | |
| claim_id=obs_data.get("claim_id", ""), | |
| claim_type=obs_data.get("claim_type", ""), | |
| claim_amount_requested=obs_data.get("claim_amount_requested", 0.0), | |
| claimant_name=obs_data.get("claimant_name", ""), | |
| incident_date=obs_data.get("incident_date", ""), | |
| description=obs_data.get("description", ""), | |
| system_response=obs_data.get("system_response", ""), | |
| action_success=obs_data.get("action_success", True), | |
| revealed_info=obs_data.get("revealed_info", {}), | |
| available_actions=obs_data.get("available_actions", []), | |
| time_elapsed_minutes=obs_data.get("time_elapsed_minutes", 0), | |
| queries_made=obs_data.get("queries_made", 0), | |
| is_terminal=obs_data.get("is_terminal", False), | |
| terminal_reason=obs_data.get("terminal_reason", ""), | |
| ) | |
| return StepResult( | |
| observation=observation, | |
| reward=payload.get("reward", 0.0), | |
| done=observation.is_terminal, | |
| ) | |
| def _parse_state(self, payload: Dict[str, Any]) -> ClaimsState: | |
| """Parse state from API response.""" | |
| return ClaimsState( | |
| episode_id=payload.get("episode_id", ""), | |
| claim_id=payload.get("claim_id", ""), | |
| claim_type=payload.get("claim_type", ""), | |
| claim_amount_requested=payload.get("claim_amount_requested", 0.0), | |
| actions_taken=payload.get("actions_taken", 0), | |
| queries_made=payload.get("queries_made", 0), | |
| time_elapsed_minutes=payload.get("time_elapsed_minutes", 0), | |
| total_reward=payload.get("total_reward", 0.0), | |
| ) | |
| # Convenience functions for common actions | |
| def query_policy(claim_id: str = "") -> ClaimsAction: | |
| """Create a query_policy action.""" | |
| return ClaimsAction(action_type="query_policy", claim_id=claim_id) | |
| def query_claim_history(claim_id: str = "") -> ClaimsAction: | |
| """Create a query_claim_history action.""" | |
| return ClaimsAction(action_type="query_claim_history", claim_id=claim_id) | |
| def check_fraud(claim_id: str = "") -> ClaimsAction: | |
| """Create a check_fraud action.""" | |
| return ClaimsAction(action_type="check_fraud", claim_id=claim_id) | |
| def request_documents(doc_types: list, claim_id: str = "") -> ClaimsAction: | |
| """Create a request_documents action.""" | |
| return ClaimsAction( | |
| action_type="request_documents", | |
| claim_id=claim_id, | |
| parameters={"doc_types": doc_types} | |
| ) | |
| def verify_coverage(damage_type: str, claim_id: str = "") -> ClaimsAction: | |
| """Create a verify_coverage action.""" | |
| return ClaimsAction( | |
| action_type="verify_coverage", | |
| claim_id=claim_id, | |
| parameters={"damage_type": damage_type} | |
| ) | |
| def calculate_payout(amount: float, claim_id: str = "") -> ClaimsAction: | |
| """Create a calculate_payout action.""" | |
| return ClaimsAction( | |
| action_type="calculate_payout", | |
| claim_id=claim_id, | |
| parameters={"amount": amount} | |
| ) | |
| def approve(payout: float, reason: str = "Claim approved", claim_id: str = "") -> ClaimsAction: | |
| """Create an approve action.""" | |
| return ClaimsAction( | |
| action_type="approve", | |
| claim_id=claim_id, | |
| parameters={"payout": payout, "reason": reason} | |
| ) | |
| def deny(reason: str = "Claim denied", claim_id: str = "") -> ClaimsAction: | |
| """Create a deny action.""" | |
| return ClaimsAction( | |
| action_type="deny", | |
| claim_id=claim_id, | |
| parameters={"reason": reason} | |
| ) | |
| def escalate(reason: str = "Requires senior review", claim_id: str = "") -> ClaimsAction: | |
| """Create an escalate action.""" | |
| return ClaimsAction( | |
| action_type="escalate", | |
| claim_id=claim_id, | |
| parameters={"reason": reason} | |
| ) | |