Stop wrestling with prompts. Start shipping AI features.
Ax brings DSPy's approach to TypeScript – describe what you want, and let the framework handle the rest. Production-ready, type-safe, works with all major LLMs.
Building with LLMs is painful. You write prompts, test them, they break. You switch providers, everything needs rewriting. You add validation, error handling, retries – suddenly you're maintaining infrastructure instead of shipping features.
Define what goes in and what comes out. Ax handles the rest.
import { ai, ax } from "@ax-llm/ax"; const llm = ai({ name: "openai", apiKey: process.env.OPENAI_APIKEY }); const classifier = ax( 'review:string -> sentiment:class "positive, negative, neutral"', ); const result = await classifier.forward(llm, { review: "This product is amazing!", }); console.log(result.sentiment); // "positive"No prompt engineering. No trial and error. Works with GPT-4, Claude, Gemini, or any LLM.
Write once, run anywhere. Switch between OpenAI, Anthropic, Google, or 15+ providers with one line. No rewrites.
Ship faster. Stop tweaking prompts. Define inputs and outputs. The framework generates optimal prompts automatically.
Production-ready. Built-in streaming, validation, error handling, observability. Used in production handling millions of requests.
Gets smarter. Train your programs with examples. Watch accuracy improve automatically. No ML expertise needed.
const extractor = ax(` customerEmail:string, currentDate:datetime -> priority:class "high, normal, low", sentiment:class "positive, negative, neutral", ticketNumber?:number, nextSteps:string[], estimatedResponseTime:string `); const result = await extractor.forward(llm, { customerEmail: "Order #12345 hasn't arrived. Need this resolved immediately!", currentDate: new Date(), });import { f, ax } from "@ax-llm/ax"; const productExtractor = f() .input("productPage", f.string()) .output("product", f.object({ name: f.string(), price: f.number(), specs: f.object({ dimensions: f.object({ width: f.number(), height: f.number() }), materials: f.array(f.string()) }), reviews: f.array(f.object({ rating: f.number(), comment: f.string() })) })) .build(); const generator = ax(productExtractor); const result = await generator.forward(llm, { productPage: "..." }); // Full TypeScript inference console.log(result.product.specs.dimensions.width); console.log(result.product.reviews[0].comment);const userRegistration = f() .input("userData", f.string()) .output("user", f.object({ username: f.string().min(3).max(20), email: f.string().email(), age: f.number().min(18).max(120), password: f.string().min(8).regex("^(?=.*[A-Za-z])(?=.*\\d)", "Must contain letter and digit"), bio: f.string().max(500).optional(), website: f.string().url().optional(), })) .build();Available constraints: .min(n), .max(n), .email(), .url(), .date(), .datetime(), .regex(pattern, description), .optional()
Validation runs on both input and output. Automatic retry with corrections on validation errors.
const assistant = ax( "question:string -> answer:string", { functions: [ { name: "getCurrentWeather", func: weatherAPI }, { name: "searchNews", func: newsAPI }, ], }, ); const result = await assistant.forward(llm, { question: "What's the weather in Tokyo and any news about it?", });const analyzer = ax(` image:image, question:string -> description:string, mainColors:string[], category:class "electronics, clothing, food, other", estimatedPrice:string `);npm install @ax-llm/axAdditional packages:
# AWS Bedrock provider npm install @ax-llm/ax-ai-aws-bedrock # Vercel AI SDK v5 integration npm install @ax-llm/ax-ai-sdk-provider # Tools: MCP stdio transport, JS interpreter npm install @ax-llm/ax-tools- 15+ LLM Providers – OpenAI, Anthropic, Google, Mistral, Ollama, and more
- Type-safe – Full TypeScript support with auto-completion
- Streaming – Real-time responses with validation
- Multi-modal – Images, audio, text in the same signature
- Optimization – Automatic prompt tuning with MiPRO, ACE, GEPA
- Observability – OpenTelemetry tracing built-in
- Workflows – Compose complex pipelines with AxFlow
- RAG – Multi-hop retrieval with quality loops
- Agents – Tools and multi-agent collaboration
- Zero dependencies – Lightweight, fast, reliable
Get Started
- Quick Start Guide – Set up in 5 minutes
- Examples Guide – Comprehensive examples
- DSPy Concepts – Understanding the approach
- Signatures Guide – Type-safe signature design
Deep Dives
- AI Providers – All providers, AWS Bedrock, Vercel AI SDK
- AxFlow Workflows – Build complex AI systems
- Optimization (MiPRO, ACE, GEPA) – Make programs smarter
- Advanced RAG – Production search and retrieval
OPENAI_APIKEY=your-key npm run tsx ./src/examples/[example-name].tsCore examples: extract.ts, react.ts, agent.ts, streaming1.ts, multi-modal.ts
Production patterns: customer-support.ts, food-search.ts, ace-train-inference.ts, ax-flow-enhanced-demo.ts
- Twitter – Updates
- Discord – Help and discussion
- GitHub – Star the project
- DeepWiki – AI-powered docs
- Battle-tested in production
- Stable minor versions
- Comprehensive test coverage
- OpenTelemetry built-in
- TypeScript first
- Author: @dosco
- GEPA and ACE optimizers: @monotykamary
Apache 2.0
npm install @ax-llm/ax