# AI Search API Reference

## Workers Binding

```typescript
const answer = await env.AI.autorag('instance-name').aiSearch(options)
const results = await env.AI.autorag('instance-name').search(options)
const instances = await env.AI.autorag('_').listInstances()
```

## aiSearch() Options

```typescript
interface AiSearchOptions {
  query: string // User query
  model: string // Workers AI model ID
  system_prompt?: string // LLM instructions
  rewrite_query?: boolean // Fix typos (default: false)
  max_num_results?: number // Max chunks (default: 10)
  ranking_options?: { score_threshold?: number } // 0.0-1.0 (default: 0.3)
  reranking?: { enabled: boolean; model: string }
  stream?: boolean // Stream response (default: false)
  filters?: Filter // Metadata filters
  page?: string // Pagination token
}
```

## Response

```typescript
interface AiSearchResponse {
  search_query: string // Query used (rewritten if enabled)
  response: string // AI-generated answer
  data: SearchResult[] // Retrieved chunks
  has_more: boolean
  next_page?: string
}

interface SearchResult {
  id: string
  score: number
  content: string
  metadata: { filename: string; folder: string; timestamp: number }
}
```

## Filters

```typescript
// Comparison
{ column: "folder", operator: "gte", value: "docs/" }

// Compound
{ operator: "and", filters: [
  { column: "folder", operator: "gte", value: "docs/" },
  { column: "timestamp", operator: "gte", value: 1704067200 }
]}
```

**Operators:** `eq`, `ne`, `gt`, `gte`, `lt`, `lte`

**Built-in metadata:** `filename`, `folder`, `timestamp` (Unix seconds)

## Streaming

```typescript
const stream = await env.AI.autorag('docs').aiSearch({ query, model, stream: true })
return new Response(stream, { headers: { 'Content-Type': 'text/event-stream' } })
```

## Error Types

| Error                      | Cause                  |
| -------------------------- | ---------------------- |
| `AutoRAGNotFoundError`     | Instance doesn't exist |
| `AutoRAGUnauthorizedError` | Invalid/missing token  |
| `AutoRAGValidationError`   | Invalid parameters     |

## REST API

```bash
curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{NAME}/ai-search \
  -H "Authorization: Bearer {TOKEN}" \
  -d '{"query": "...", "model": "@cf/meta/llama-3.3-70b-instruct-fp8-fast"}'
```

Requires Service API token with "AI Search - Read" permission.
