"""RMI SDK — Response models (ergonomic, not raw API shapes).""" from __future__ import annotations from typing import Any from pydantic import BaseModel, Field class TokenRisk(BaseModel): score: int = 0 tier: str = "low" factors: list[str] = Field(default_factory=list) token: dict | None = None deployer_reputation: int | None = None class Report(BaseModel): report_id: str subject_type: str subject_id: str risk_score: int risk_tier: str markdown: str sections: dict[str, str] = Field(default_factory=dict) class RagHit(BaseModel): """A RAG search hit. Maps from the API's `content` field to `text`.""" doc_id: str score: float text: str = "" content: str = "" # alias metadata: dict[str, Any] = Field(default_factory=dict) def __init__(self, **data): # Accept both `text` and `content` from the API if "content" in data and "text" not in data: data["text"] = data["content"] super().__init__(**data) class NewsItem(BaseModel): news_id: str title: str source: str published_at: str summary: str = "" sentiment_score: float | None = None score: float | None = None class McpTool(BaseModel): name: str description: str input_schema: dict[str, Any] = Field(default_factory=dict)