This project includes playground examples organized by chapters to help you learn everything about Apple's Foundation Models framework.
It is part of the Exploring Foundation Models book.
- iOS 26.0+ or macOS 26.0+ (Xcode 26.0+)
- Xcode 26 official is required
- Apple Intelligence enabled
- Compatible Apple device with Apple Silicon
You can now try Foundation Lab on TestFlight! Join the beta: https://testflight.apple.com/join/JWR9FpP3
- Clone the repository
- Open
FoundationLab.xcodeprojin Xcode - Ensure you have a device with Apple Intelligence enabled
- Build and run the project
- (Optional) For web search functionality:
- Get an API key from Exa AI
- Tap the gear icon in the app to access Settings
- Enter your Exa API key in the settings screen
- Explore the different capabilities through the examples!
The app has four main sections:
Multi-turn conversations with context management, streaming responses, and a feedback system. Includes automatic context window management with session summarization when needed.
Nine system integration tools that extend the model's capabilities:
- Weather - Current weather for any location (OpenMeteo API)
- Web Search - Real-time search via Exa AI (requires API key)
- Contacts - Search and access system contacts
- Calendar - Create and manage calendar events
- Reminders - AI-assisted reminder creation with priority levels
- Location - Current location and geocoding
- Health - HealthKit integration for health data queries
- Music - Apple Music search (requires subscription)
- Web Metadata - Extract metadata and generate social media summaries
Talk to the model using speech:
- Voice-to-text with real-time transcription
- Text-to-speech responses
- Create reminders by voice
- Audio-reactive visualization
- Handles all permissions automatically
AI-powered health tracking with HealthKit:
- Personal health coach with contextual insights
- Trend analysis and correlations
- Predictive analytics
- Weekly summaries and personalized health plans
- Multiple health metrics tracking
Three sections for exploring advanced features:
- Tools - All nine system integration examples
- Schemas - Dynamic schema examples from basic to expert level
- Languages - Multilingual features and language detection
Nine different example types showing framework capabilities:
- One-shot prompts
- Business idea generation
- Creative writing
- Structured data generation
- Streaming responses
- Model availability checking
- Generation guides
- Generation options (temperature, tokens, fitness)
- Health dashboard
- Chat: Multi-turn conversations with context management
- Streaming: Real-time response streaming
- Structured Generation: Type-safe data with
@Generable - Generation Guides: Constrained outputs with
@Guide - Tool Calling: System integrations for extended functionality
- Voice: Speech-to-text and text-to-speech
- Health: HealthKit integration with AI insights
- Multilingual: Works in 10 languages (English, German, Spanish, French, Italian, Japanese, Korean, Portuguese, Chinese)
The app includes 11 dynamic schema examples ranging from basic to expert:
- Basic schemas
- Arrays and collections
- Enums and union types
- Nested objects
- Schema references
- Form builders
- Invoice processing
- Error handling patterns
Four chapters with hands-on examples:
- Chapter 2: Getting Started with Sessions (16 examples)
- Chapter 3: Generation Options and Sampling Control (5 examples)
- Chapter 8: Basic Tool Use (9 examples)
- Chapter 13: Languages and Internationalization (7 examples)
Run these directly in Xcode using the #Playground directive.
let session = LanguageModelSession()
let response = try await session.respond(
to: "Suggest a catchy name for a new coffee shop."
)
print(response.content)let session = LanguageModelSession()
let bookInfo = try await session.respond(
to: "Suggest a sci-fi book.",
generating: BookRecommendation.self
)
print("Title: \(bookInfo.content.title)")
print("Author: \(bookInfo.content.author)")// Single tool
let weatherSession = LanguageModelSession(tools: [WeatherTool()])
let response = try await weatherSession.respond(
to: "Is it hotter in New Delhi or Cupertino?"
)
// Multiple tools
let multiSession = LanguageModelSession(tools: [
WeatherTool(),
WebTool(),
ContactsTool()
])
let multiResponse = try await multiSession.respond(
to: "Check the weather and find my friend John's contact"
)let session = LanguageModelSession()
let stream = session.streamResponse(to: "Write a short poem about technology.")
for try await partialText in stream {
print("Partial: \(partialText)")
}// Speech recognition
let recognizer = SpeechRecognizer()
await recognizer.startRecording()
// Text-to-speech
let synthesizer = SpeechSynthesizer()
synthesizer.speak("Hello, how can I help you?")let session = LanguageModelSession(tools: [HealthDataTool()])
let response = try await session.respond(
to: "Show me my step count trends this week"
)The app includes various @Generable data models for different use cases:
@Generable
struct BookRecommendation {
@Guide(description: "The title of the book")
let title: String
@Guide(description: "The author's name")
let author: String
@Guide(description: "Genre of the book")
let genre: Genre
}
@Generable
struct ProductReview {
@Guide(description: "Product name")
let productName: String
@Guide(description: "Rating from 1 to 5")
let rating: Int
@Guide(description: "Key pros and cons")
let pros: [String]
let cons: [String]
}
@Generable
struct StoryOutline {
let title: String
let protagonist: String
let conflict: String
let setting: String
let genre: StoryGenre
let themes: [String]
}
@Generable
struct BusinessIdea {
let name: String
let description: String
let targetMarket: String
let revenueModel: String
let advantages: [String]
let estimatedStartupCost: String
let timeline: String
}@Generable
struct HealthAI {
let greeting: String
let mood: HealthAIMood
let motivationalMessage: String
let focusMetrics: [String]
let suggestions: [String]
}
@Generable
struct HealthAnalysis {
let healthScore: Int
let trends: HealthTrends
let insights: [HealthInsightDetail]
let correlations: [MetricCorrelation]
let predictions: [HealthPrediction]
let recommendations: [String]
}
@Generable
struct PersonalizedHealthPlan {
let title: String
let overview: String
let currentStatus: String
let weeklyActivities: [String]
let nutritionGuidelines: NutritionPlan
let sleepStrategy: String
let milestones: [String]
}@Generable
struct ConversationSummary {
let summary: String
let keyTopics: [String]
let userPreferences: [String]
}- Uses OpenMeteo API for real-time weather
- Temperature, humidity, wind speed, conditions
- Automatic geocoding
- No API key required
- Real-time search via Exa AI
- Returns text content from pages
- Requires API key from Exa AI
- Configure in Settings
- Search system contacts
- Natural language queries
- Requires contacts permission
- Create and manage events
- Timezone and locale aware
- Supports relative dates ("today", "tomorrow")
- Requires calendar permission
- Create reminders with AI
- Priority levels: None, Low, Medium, High
- Due dates and notes
- Requires reminders permission
- Current location information
- Geocoding support
- Requires location permission
- HealthKit integration
- Query health metrics
- AI-powered insights
- Requires HealthKit permission
- Apple Music search
- Songs, artists, albums
- Requires Apple Music subscription
- Requires music permission
- Extract webpage metadata
- Generate social media summaries
- Platform-specific formatting
- No API key required
The app works in 10 languages:
- English
- German
- Spanish
- French
- Italian
- Japanese
- Korean
- Portuguese (Brazil)
- Chinese (Simplified)
- Chinese (Traditional)
Language detection and code-switching examples are included in the Integrations section.
The app may request the following permissions depending on which features you use:
- Microphone (for voice input)
- Speech Recognition
- Contacts
- Calendar
- Reminders
- Location
- HealthKit
- Apple Music
All permissions are requested at the appropriate time and can be managed in Settings.
Contributions are welcome! Please feel free to submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.



