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

dg / ai-access / 31492215055
93%
master: 93%

Build:
Build:
LAST BUILD BRANCH: v1.0.1
DEFAULT BRANCH: master
Ran 11 Aug 2026 12:38PM UTC
Jobs 1
Files 68
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 11:18PM UTC coverage: 93.155% (+1.1%) from 92.031%
31492215055

push

github

dg
images: a batch of pictures is an ordinary batch

An image request became an object, one final class per provider, holding the
prompt, the references and the provider's own options. The live call and the
batched one build the very same payload from it, which is the whole reason it
exists; `generateImage()` remains the only way to ask for a picture now and takes
every option the provider has as a named argument, so there is no second, wordier
route to the same thing.

Queueing one is `addImageRequest()` on `OpenAI\Batch` and `Gemini\Batch`. Not
`addImage()`: `Media` is what this library calls input, pictures go into a
conversation that way, so a method of that name will one day mean attaching one,
and the two would read as opposites. And not on the shared `Batch\Batch`
interface either, because Claude cannot draw and should not have to say it can;
extra capability belongs on the concrete class, the same door Claude's own
per-request models would use.

The result needs no new type. `Media` was already a chat part, so a drawn answer
is a `Message` of `Role::Model` whose parts are the pictures, `getResults()` keeps
working untouched, and asking for several is simply several parts in one message.
`Message::getMedia()` is the counterpart of `getText()`.

What may share a job is the provider's rule and only OpenAI has one: it declares a
single endpoint for the whole job, so pictures cannot ride with chats and
generating cannot ride with editing, which `submit()` enforces as one rule over
the urls the requests map to. One model per job holds for both providers, and is
measured rather than read: a mixed-model batch is accepted, then killed whole
during validation with `mismatched_model`, so the second model is refused where it
is added. Gemini has no endpoint rule at all, and a job carrying a text request
and an image request answered both, so the library allows it.

References travel as base64 data URLs in a JSON body rather than as multipart,
which a JSONL l... (continued)

170 of 173 new or added lines in 12 files covered. (98.27%)

19 existing lines in 4 files now uncovered.

2164 of 2323 relevant lines covered (93.16%)

0.93 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
86.67
src/Provider/OpenAI/ImageResponse.php
1
95.45
0.22% src/Provider/Gemini/Batch.php

Coverage Regressions

Lines Coverage ∆ File
8
76.47
-2.48% src/Provider/Gemini/BatchResponse.php
6
95.04
11.28% src/Provider/OpenAI/Client.php
3
95.08
1.86% src/Provider/OpenAI/BatchResponse.php
2
95.56
1.44% src/Provider/Claude/BatchResponse.php
Jobs
ID Job ID Ran Files Coverage
1 31492215055.1 11 Aug 2026 12:38PM UTC 68
93.16
GitHub Action Run
Source Files on build 31492215055
  • Tree
  • List 68
  • Changed 14
  • Source Changed 14
  • Coverage Changed 14
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31492215055
  • 1b1047aa on github
  • Prev Build on v1.0.0 (#31346218478)
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