using extension auth; module default { global currentUser := ( assert_single(( select User filter .identity = global ext::auth::ClientTokenIdentity )) ); global currentConversation := ( assert_single(( select Conversation filter .user = global currentUser AND .selected = true )) ); type User { required setting: Setting; required stripe_id: str; required name: str; required email: str; required avatar: str; required identity: ext::auth::Identity { on source delete delete target; } } type Key { required name: str; required company: Company; required key: str; required date: datetime { default := datetime_current(); } } type Setting { default_model: str; multi keys: Key { on target delete allow; }; } type Conversation { required name: str; required position: int32; required selected: bool { default := false; }; required user: User { on target delete delete source; }; required date: datetime { default := datetime_current(); } } type Area { required position: int64; required conversation: Conversation { on target delete delete source; }; } type Message { required selected: bool; required role: str; required content: str; required llm: LLM; required area: Area { on target delete delete source; }; required conversation: Conversation { on target delete delete source; }; required date: datetime { default := datetime_current(); } } type Usage { required model_id: str; user: User { on target delete allow }; required input_cost: float32; required output_cost: float32; required input_token: int32; required output_token: int32; required date: datetime { default := datetime_current(); } } type LLM { required name: str; required context: str; required temperature: float32; required position: int32; required to_delete: bool { default := false; }; required modelInfo: ModelInfo { on target delete delete source; }; required user: User { on target delete delete source; }; required max_tokens: int32; custom_endpoint: CustomEndpoint { on source delete delete target; }; } type CustomEndpoint { required endpoint: str; required key: str; } type Company { required name: str; required icon: str; } type ModelInfo { required modelID: str; required name: str; required inputPrice: float32; required outputPrice: float32; required company: Company; } }