• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dg / ai-access / 31430808519
93%

Build:
DEFAULT BRANCH: master
Ran 10 Aug 2026 08:48PM UTC
Jobs 1
Files 71
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

10 Aug 2026 08:46PM UTC coverage: 92.767% (+0.7%) from 92.061%
31430808519

push

github

dg
images: a batch of pictures is an ordinary batch

An image request is now an object, exactly as a chat is: createImageRequest()
builds it, setOptions() configures it in the provider's own vocabulary, and
generateImage() stays as sugar over it. That is what makes batching possible
without a second way of shaping the same payload, because the batch submits the
very shape a live call sends.

The result needs no new type either. Media was already a chat part, so a drawn
answer is a Message of Role::Model whose parts are the pictures: getMessages()
keeps working untouched, per-item errors stay where they were, and asking for
several pictures is simply several parts in one message. Message::getMedia() is
the counterpart of getText(). Batching images is a service interface of its own
rather than a method on Batch\Batch, because no provider lets one job mix
pictures and chats, and Claude would otherwise have to declare a capability it
does not have.

OpenAI declares one endpoint for a whole job, so requests with references and
requests without them cannot share a batch, and BatchResponse picks its parser
from that endpoint. References travel as base64 data URLs in a JSON body rather
than as multipart, which a JSONL line cannot carry; the live edits call uses the
same JSON form now, because two transports for one payload would drift apart. A
reference already uploaded through the Files API can be pointed at by id
instead, which keeps a repeated image out of every line. The mime type is read
from the answer rather than guessed from the request, and a 200 carrying no
picture is reported as an error rather than as an empty message.

Gemini has no image endpoint at all, so an image batch is an ordinary
batchGenerateContent job with responseModalities in each request. Its newer
Interactions API is the recommended path for pictures but has no batch, which is
why generateContent stays. Consequently the response parser keeps inlineData
parts as Media instead of droppi... (continued)

196 of 201 new or added lines in 14 files covered. (97.51%)

2142 of 2309 relevant lines covered (92.77%)

0.93 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
92.31
src/Provider/OpenAI/ImageBatch.php
2
86.67
src/Provider/OpenAI/ImageResponse.php
1
90.65
6.89% src/Provider/OpenAI/Client.php
Jobs
ID Job ID Ran Files Coverage
1 31430808519.1 10 Aug 2026 08:48PM UTC 71
92.77
GitHub Action Run
Source Files on build 31430808519
  • Tree
  • List 71
  • Changed 9
  • Source Changed 9
  • Coverage Changed 9
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31430808519
  • 42bb8980 on github
  • Prev Build on master (#31355232649)
  • Next Build on master (#31435588554)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc