import{ useAI }from'@/contexts/AIContext';functionMyComponent(){const{ setProvider, setModel, currentProviderConfig }=useAI();// Switch to OpenAIawaitsetProvider('openai');// Select specific modelsetModel('gpt-4o-mini');// Get available models for current providerconsole.log(currentProviderConfig?.models);}
Available Models by Provider
OpenAI
gpt-4.5-preview - Latest flagship model with enhanced reasoning
gpt-4o - Multimodal model, fast and capable
gpt-4o-mini - Fast and affordable
o3 - Advanced reasoning model
o3-mini - Efficient reasoning model
o1 - Original reasoning model
o1-mini - Smaller reasoning model
Anthropic
claude-sonnet-4-20250514 - Latest Claude 4 model, best performance
claude-3-7-sonnet-20250219 - Claude 3.7, excellent balance
claude-3-5-sonnet-20241022 - Claude 3.5 Sonnet, reliable
claude-3-5-haiku-20241022 - Fastest Claude model
claude-3-opus-20240229 - Most capable Claude 3
Google Gemini
gemini-2.5-pro - Latest Pro model, 1M context
gemini-2.5-flash - Latest Flash model, fast with 1M context
gemini-2.0-flash - Stable 2.0 Flash
gemini-2.0-flash-lite - Lightweight, fastest
OpenRouter
openai/gpt-4.5-preview - GPT-4.5 via OpenRouter
openai/o3-mini - o3 Mini via OpenRouter
anthropic/claude-sonnet-4 - Claude Sonnet 4 via OpenRouter
anthropic/claude-3.7-sonnet - Claude 3.7 via OpenRouter
google/gemini-2.5-pro - Gemini 2.5 Pro via OpenRouter
import{ useTextGeneration }from'@/contexts/AIContext';functionMyComponent(){const{ generateText, isLoading, error, currentProvider }=useTextGeneration();consthandleGenerate=async()=>{const result =awaitgenerateText('Write a slogan for my app');console.log(result);};return(<View><Text>Using:{currentProvider}</Text><Button
title="Generate" onPress={handleGenerate} loading={isLoading}/>{error &&<Text style={{ color:'red'}}>{error.message}</Text>}</View>);}
Object Generation
Basic Usage
import{ useAI }from'@/contexts/AIContext';import{ z }from'zod';const{ generateObject }=useAI();const recipeSchema = z.object({ name: z.string(), ingredients: z.array(z.object({ name: z.string(), amount: z.string(),})), steps: z.array(z.string()), cookingTime: z.number(),});const recipe =awaitgenerateObject([{ role:'user', content:'Give me a pasta carbonara recipe'}], recipeSchema
);// recipe is typed as { name: string, ingredients: [...], ... }
With Specific Provider
const recipe =awaitgenerateObject([{ role:'user', content:'Give me a pasta carbonara recipe'}], recipeSchema,{ provider:'gemini', model:'gemini-1.5-pro', temperature:0.5,});
Extract Data from Images
import{ useAI }from'@/contexts/AIContext';import{ z }from'zod';const{ generateObject }=useAI();const receiptSchema = z.object({ storeName: z.string(), date: z.string(), items: z.array(z.object({ name: z.string(), price: z.number(),})), total: z.number(),});const receiptData =awaitgenerateObject([{ role:'user', content:[{ type:'text', text:'Extract the data from this receipt'},{ type:'image', image: receiptImageBase64 },],},], receiptSchema,{ provider:'openai', model:'gpt-4o'});
Agents with Tools
Create an Agent
import{ createRorkTool, useRorkAgent }from'@rork-ai/toolkit-sdk';import{ z }from'zod';functionTodoAssistant(){const[input, setInput]=useState('');const{ todos, addTodo, toggleTodo, deleteTodo }=useTodos();const{ messages, sendMessage, error }=useRorkAgent({ tools:{ addTodo:createRorkTool({ description:'Add a new task', zodSchema: z.object({ title: z.string().describe('Task title'), priority: z.enum(['low','medium','high']).optional(), dueDate: z.string().optional().describe('Date in ISO format'),}),execute(input){addTodo({ title: input.title, priority: input.priority ||'medium', dueDate: input.dueDate,});return{ success:true, message:`Task "${input.title}" added`};},}), completeTodo:createRorkTool({ description:'Mark a task as completed', zodSchema: z.object({ todoId: z.string().describe('Task ID'),}),execute(input){toggleTodo(input.todoId);return{ success:true};},}), listTodos:createRorkTool({ description:'List all tasks', zodSchema: z.object({}),execute(){return{ todos };},}),},});consthandleSend=()=>{if(input.trim()){sendMessage(input);setInput('');}};return(<View style={styles.container}><FlatList
data={messages} renderItem={({ item })=><MessageBubble message={item}/>} keyExtractor={(item)=> item.id}/><View style={styles.inputContainer}><TextInput
value={input} onChangeText={setInput} placeholder="Type a message..." style={styles.input}/><Button title="Send" onPress={handleSend}/></View></View>);}
POST https://toolkit.rork.com/images/edit/
Content-Type: application/json
{
"prompt": "Change the background to a sunset on the beach",
"images": [
{ "type": "image", "image": "base64..." }
],
"aspectRatio": "16:9" // optional
}
Response:
{
"image": {
"base64Data": "...",
"mimeType": "image/png",
"aspectRatio": "16:9"
}
}
Using the Hook
import{ useImageGeneration }from'@/contexts/AIContext';functionImageEditor(){const{ editImage, isEditing }=useImageGeneration();consthandleEdit=async(originalImage:string)=>{const result =awaiteditImage('Add a rainbow in the sky',[{ type:'image', image: originalImage }],'16:9');return`data:${result.image.mimeType};base64,${result.image.base64Data}`;};// ...}