Skip to main content

Optiglot

optiglot is a language-agnostic interface for prompt optimization engines (like DSPy). It allows you to use powerful optimization algorithms implemented in Python with your language/framework of choice via a standardized RPC protocol. By separating the optimization logic from the execution environment, optiglot makes prompt optimizers "polyglots" hence the name.

Installation

TypeScript/JavaScript

Install the harness in your project:

npm install optiglot
# or
bun add optiglot

CLI Engine

Install the optimization engine via uv:

uv tool install optiglot

Core Concepts

  • Harnesses: The "glue" that connects your framework (e.g., Vercel AI SDK) to the optimization engine. They handle tracing, evaluation, and communication.
  • Predictors: Wrappers around LLM calls that record inputs/outputs for the optimizer.
  • Module: A collection of predictors that define your AI system's logic.
  • Teleprompt: The optimizer that runs the optimization loop.

Defining an Optimizer

In Optiglot, an optimizer is defined using the Teleprompt class. You specify which algorithm to use and its configuration.

import { Teleprompt } from "optiglot";

const optimizer = new Teleprompt("bootstrap", {
  numThreads: 4, // Number of concurrent evaluations
  maxIterations: 10, // Maximum optimization cycles
  // ... other algorithm-specific options
});

Common optimizers include:

  • vanilla: Basic few-shot prompting.
  • bootstrap: Bootstraps few-shot examples from your training data.
  • teleprompt: Advanced multi-stage optimization.

The Purpose of Harnesses

Harnesses are essential because they bridge the gap between your application code and the optimization engine. They abstract away three critical tasks:

  1. Tracing: Automatically recording LLM inputs and outputs during a run so the optimizer can "see" what happened.
  2. Execution Control: Allowing the optimizer to swap out prompts and re-run your code during evaluation.
  3. Communication: Handling the RPC handshake between your application and the Python-based optimization engine.

By using a harness, you can optimize your prompts without rewriting your existing application logic in Python.


Usage: AI SDK Harness

Here's how to use the Vercel AI SDK harness to optimize a support ticket classifier.

1. Define Your System (Module)

Create a Module with your predictors. A Predict component wraps your LLM call and manages its instructions.

import { Module, Predict } from "optiglot";
import { openai } from "@ai-sdk/openai";

// Define the system structure
const classifier = new Module({
  judge: new Predict(
    "Classify the ticket into: Billing, Technical, or General."
  ),
});

// Define the execution logic
classifier.setForward(async (inputs: { ticket: string }) => {
  const { text } = await classifier.judge.generateText({
    model: openai("gpt-4o-mini"),
    prompt: `Ticket: ${inputs.ticket}`,
  });
  return text;
});

2. Define Your Metric

The metric scores performance on a specific example. It can return a simple score (0 to 1) or rich feedback.

import { type MetricFunction } from "optiglot";

const metric: MetricFunction = (example, prediction) => {
  const isCorrect = example.label === prediction.output;
  return {
    score: isCorrect ? 1.0 : 0.0,
    feedback: isCorrect
      ? "Correctly labeled."
      : `Expected ${example.label} but got ${prediction.output}`,
  };
};

3. Run Optimization

Use Teleprompt to optimize the instructions in your module.

import { Teleprompt, Dataset } from "optiglot";

// Load training data
const trainset = new Dataset(
  [
    { ticket: "I can't log into my account.", label: "Technical" },
    { ticket: "Where is my order #123?", label: "Billing" },
  ],
  ["ticket"] // Fields to pass to the forward function
);

const teleprompter = new Teleprompt("bootstrap");

// Compile: This spawns the optimization engine and finds the best prompts
const optimizedModule = await teleprompter.compile(
  classifier,
  metric,
  trainset
);

console.log("Optimized Instructions:", optimizedModule.judge.instructions);

// Save the optimized state
optimizedModule.save("./optimized_prompts.json");

Appendix

Persistence

You can load optimized prompts back into your module for production use:

const productionModule = new Module({
  judge: new Predict(""), // Initial instructions don't matter if we're loading
});
productionModule.load("./optimized_prompts.json");

Development

If you are developing optiglot locally, you can use the OPTIGLOT_DEV=true environment variable to run the engine from source.

OPTIGLOT_DEV=true bun run your_optimization_script.ts

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

optiglot-0.1.3.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

optiglot-0.1.3-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file optiglot-0.1.3.tar.gz.

File metadata

  • Download URL: optiglot-0.1.3.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for optiglot-0.1.3.tar.gz
Algorithm Hash digest
SHA256 fd36642a5be1d58de28a7d4ea4084313b195e6c6fbe6a36e3291ce896e17d692
MD5 30fea1e1c1c1bc0b298ffab2a3b23f15
BLAKE2b-256 956bf9d34a034c9221367909f1b3c523d6bf5fa7cfdaad0526b19184a18f8c43

See more details on using hashes here.

Provenance

The following attestation bundles were made for optiglot-0.1.3.tar.gz:

Publisher: publish.yml on modaic-ai/optiglot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file optiglot-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: optiglot-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for optiglot-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c0fabc749c1e9df698ebdc5315e0d57b4339469ae6ff97a3eb290ffcf5a83b49
MD5 eb498778b5ebf8cf879386e9c4de445c
BLAKE2b-256 11f8ca0c203c7aa0f5c88a1a2257419520f83083139d91baf42c87b3db759c92

See more details on using hashes here.

Provenance

The following attestation bundles were made for optiglot-0.1.3-py3-none-any.whl:

Publisher: publish.yml on modaic-ai/optiglot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page