Why a vector serialization change can corrupt an archive index
A fictional museum digitizes accession summaries and uses embeddings to retrieve relevant conservation notes. A developer changes the request from a numeric array to a compact encoded response to reduce transfer overhead. If the indexing job treats the returned base64 string as ordinary text, every subsequent similarity query becomes meaningless. The issue is not the quality of the embedding model; it is a mismatch between a representation used for transport and the numeric vector expected by the database. Treat encoding format as a wire-contract decision, not a new retrieval method. The diagrams are illustrative, not benchmark results.
What encoding_format actually controls
The OpenAI embeddings creation endpoint documents an `encoding_format` parameter with two values: `float` and `base64`. The API reference presents `float` as the default; an embedding is then returned as an array of numeric components. With `base64`, the embedding field is an encoded string rather than that array. This parameter does not choose an embedding model, change a museum document, or grant permission to transmit sensitive records. It changes how the response represents the vector. The response also includes the model, index positions, and token usage, which are separate fields worth recording for auditability.
Lock the model and dimensionality before changing transport
Before comparing encodings, make the model name and requested dimensions explicit in a controlled test record. The API reference limits the `dimensions` parameter to `text-embedding-3` and later embedding models. The downstream vector field has a fixed dimension defined by the chosen configuration; an array of a different length should fail validation before indexing. A model upgrade can change retrieval behavior even when the serialized array length appears compatible. Keep the encoding migration separate from any model change so unexpected matches can be traced to one variable at a time.

Build a narrow, private sample with known record IDs
Use a small set of synthetic accession descriptions that includes distinct subjects, a near-duplicate title, and a warning that should stay discoverable. Assign stable identifiers such as SAMPLE-CHAIR-A rather than real donor names, loan conditions, or protected conservation reports. Request the same input text and model through both response formats, preserving the returned `data[].index` field to match vectors to input order. Avoid logging the raw text and embeddings together in a widely shared CI report; vector data can still be sensitive when derived from restricted collections. Reproducible samples help isolate transport bugs without claiming that this article tested a live museum system.
Decode bytes into numbers, not into text or new tokens
A base64 response needs an appropriate binary decoder for the client library and vector representation. Do not parse the characters as comma-separated numbers, round them before insertion, or send the encoded string directly to an index field expecting a numeric vector. After decoding, confirm the expected component count and finite numeric values. Be alert to byte order and floating-point representation in custom decoders; compare against your SDK’s documented handling rather than copying an implementation from an unrelated language. A malformed payload should be rejected with a record-level error, not silently replaced with an empty vector.
Keep an ingestion manifest that spans both representations
For every test record, track an accession-safe ID, source text revision, embedding model, configured dimensions, encoding format, request time, and index generation. Keep transport-related metadata separate from the curator-approved description. If the vector service stores arrays only, decode prior to ingestion and record that transformation in the job manifest. That record makes a later incident intelligible: a curator can ask whether one document failed to index, whether a payload was decoded incorrectly, or whether a corpus was re-embedded with a different model. An index count alone cannot answer these questions.

Compare what can be compared—and what cannot
You can use the same synthetic inputs to check that the float path and the correctly decoded base64 path produce compatible vector shapes and indexing behavior under a single model configuration. Compare element counts and a documented numeric tolerance suitable for the client and storage representation; exact byte-for-byte string equality is not a meaningful test across formats. Similarity rankings should be checked on a small approved query set, but do not advertise a percentage accuracy improvement without a measured evaluation. A successful decoder establishes transport correctness, not semantic truth or permission to expose a result.
Protect existing search records during a migration
Write to a staging index or a versioned vector field rather than overwriting a live collection from the first batch. Validate every decoder output, then run a limited query review with a museum specialist, especially for safety-related terms and accession codes. Only switch search traffic after schema compatibility, access filters, and retrieval examples have passed. Retain the previous index for the documented rollback window and delete test data under your retention policy. The safest rollback restores the old known-good index, not a lossy reverse transformation from a broken vector.

Common mistakes that appear as relevance problems
A broken response parser can assign the embedding for one input to the next record when it ignores `data[].index`. Another pipeline can insert an encoded string into a text field and report success while never enabling vector similarity. Model names can differ between query and document pipelines after an unrelated deployment. These faults have different remedies: align response positions, validate storage types, and pin compatible model configurations. They also have a shared symptom—poor retrieval—which is why the operations team should inspect transport and schema before tuning similarity thresholds.
How We Research
We checked the OpenAI Create embeddings API reference for the permitted `encoding_format` values, response shape, and dimensionality support, and reviewed the OpenAI embeddings guide for model-level context. The synthetic archive scenario, visuals, and QA checklist are an instructional design, not a report of measured latency, vector equivalence, or live museum search tests. Before production, verify the exact SDK version and decoding path you use; the API contract does not validate your downstream database or collection permissions.
Frequently Asked Questions
No. Base64 is a transport representation. Accuracy depends on the model, inputs, index, and retrieval evaluation rather than the encoding of the API response.
Only if that system explicitly accepts and decodes that representation. Numeric vector fields generally require numeric components, so validate the destination schema first.
No. Dimension count is associated with the embedding model and any supported dimensions setting. Encoding only changes how the vector is returned.
No. Decode the encoded representation into numeric components and compare shape and values using a suitable numerical tolerance and the same model configuration.
Not by default. Use synthetic or approved inputs for diagnostics, and apply your organization’s data classification and retention rules before sending protected material.
