In the myths, Dedalus was the master craftsman that gave men powerful wings. Ariadne was the clever problem-solver that threaded the way out of his labyrinth. Together, they made the impossible navigable.
Ariadne brings composable, structured workflows to Dedalus Labs' agent platform, built off the backs of Effect and Effect-AI.
It aims to provide
- Full type-safety and observability from error accumulation.
- Composability for ease of evaluation and unit testing.
Read the full documentation for comprehensive guides:
| Guide | Description |
|---|---|
| Getting Started | Installation and quick start |
| Language Model | Text generation, structured outputs, streaming |
| Tools & Toolkits | Define and implement tool calling |
| Chat | Stateful multi-turn conversations |
| MCP Servers | Model Context Protocol integration |
| Execution Planning | Retries, fallbacks, and resilience |
| Embeddings | Vector embeddings |
| Configuration | Client and model options |
| Error Handling | Error types and patterns |
bun install ariadneimport { LanguageModel, Tool, Toolkit } from "@src/ariadne"
import { DedalusClient, DedalusLanguageModel } from "@src/dedalus-labs"
import * as FetchHttpClient from "@effect/platform/FetchHttpClient"
import { Effect, Layer, Schema } from "effect"
import * as Redacted from "effect/Redacted"
// 1. Create the client layer
const Dedalus = DedalusClient.layer({
apiKey: Redacted.make(process.env.DEDALUS_API_KEY!),
}).pipe(Layer.provide(FetchHttpClient.layer))
// 2. Create a model (supports multi-provider routing)
const Gpt4o = DedalusLanguageModel.model("openai/gpt-4o")
// 3. Define a tool (optional)
const Calculator = Tool.make("Calculator", {
description: "Perform arithmetic",
parameters: {
operation: Schema.Literal("add", "subtract", "multiply", "divide"),
a: Schema.Number,
b: Schema.Number,
},
success: Schema.Number,
})
const toolkit = Toolkit.make(Calculator)
const toolkitLive = toolkit.toLayer({
Calculator: ({ operation, a, b }) =>
Effect.succeed(
operation === "add" ? a + b :
operation === "subtract" ? a - b :
operation === "multiply" ? a * b :
a / b,
),
})
// 4. Generate text with tools
const program = LanguageModel.generateText({
prompt: "What is 15 multiplied by 7?",
toolkit,
})
// 5. Run
const result = await program.pipe(
Effect.provide(toolkitLive),
Effect.provide(Gpt4o),
Effect.provide(Dedalus),
Effect.runPromise,
)
console.log(result.text)
console.log(result.toolResults) // [{ name: "Calculator", result: 105 }]# Install dependencies
bun install
# Build
bun run build
# Develop with watch mode
bun run dev
# Run tests
bun run test
# Lint and format
bun run lint
bun run formatThis repo includes a fork of the Effect AI packages. Upstream changes are monitored and selectively merged as needed.
Please see CONTRIBUTING.md for contribution guidelines.
MIT
