1. Check model availability using `model.availability`.
2. Create a `LanguageModelSession` with optional instructions and tools.
3. Define `@Generable` types for structured output, if needed.
4. Send a prompt to the session using `session.respond(to:)`.
5. Handle tool calls and potential errors.
6. Access the response content using `response.content`.
7. Stream structured responses using `session.streamResponse(to:)` for real-time UI updates.