Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
5c80a3e
Optimize agentic Gemini prompt caching (#22627)
Jul 23, 2026
6e3c3c9
refactor: remove Depends(get_db) from permissions endpoints (#22635)
Jul 23, 2026
dd836b0
chore(api): regenerate OpenAPI specs for new agentic parse version (#…
Jul 24, 2026
a12e081
feat(extract): accept webhook_configuration_ids on extract job create…
Jul 27, 2026
f16916f
feat(split): accept webhook_configuration_ids on split job create (LI…
Jul 27, 2026
120db95
feat(extract): reject parse_tier for parse-free tiers + pin turbo fal…
Jul 28, 2026
9a6212f
feat(extract): pin turbo to a stable dated version; accept citations+…
Jul 28, 2026
b8dbc00
feat(classify): accept webhook_configuration_ids on classify job crea…
Jul 28, 2026
4650496
feat(extract): opt-in spreadsheet mode for agentic_plus (#22958)
Jul 30, 2026
2d48eea
fix(api): name paginated + filter schemas instead of leaking generic …
Jul 30, 2026
c3e7456
feat(batches): webhooks for /api/v2/batches (#23148)
Jul 30, 2026
03e8534
feat(parse): extract Word revision annotations (#23152)
Jul 31, 2026
9f6718a
LI-8489: surface Parse V2 cancel; withhold Batches from the SDK
Aug 3, 2026
b7615f3
LI-8489: restore client.batches (v2) in the published SDK
Aug 3, 2026
33f78b4
feat(parse): make the output.pdf artifact opt-in on Parse v2 (output_…
Aug 5, 2026
1d0e3db
feat(connector): API + service layer for attaching a subscription to …
Aug 5, 2026
44c9bc3
ci: back-sync as the CI bot, and drop the human-attributed cron (#6)
yongpark Aug 7, 2026
0fab12a
feat(parse,extract): add expand=usage returning credits billed per jo…
Aug 7, 2026
d20f9fe
Merge pull request #7 from run-llama/stlc/from-prod
llama-org-ci-bot[bot] Aug 7, 2026
4566f9b
Build SDK
Aug 7, 2026
4ec91a6
docs(parse): shorten the images_to_save field description (#23807)
Aug 7, 2026
44e227e
ci: drop the back-sync cron now that the bot dispatcher is proven (#8)
yongpark Aug 7, 2026
211f3ad
LI-8754: surface split GA, webhook configs, v2 cancel and parse versi…
Aug 7, 2026
94cd22b
fix(llamaparse): retry qwen context-overflow 400s with a shrinking OC…
Aug 8, 2026
c82b3ed
feat(forms): emit bboxes in v2 forms output (#23974)
Aug 10, 2026
4573165
LI-8754 follow-up: surface the endpoints the console actively consumes
Aug 11, 2026
e371551
Enable Extract v2 caching with configuration control (#23715)
Aug 11, 2026
46b7f51
feat(files): rename files.get to files.content and restore files.retr…
Aug 12, 2026
0f29c29
ci: regenerate the release PR body on every promote (#9)
yongpark Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 57 additions & 2 deletions .github/workflows/stlc-promote.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,59 @@ jobs:
env:
GH_TOKEN: ${{ steps.prod-token.outputs.token }}
run: |
# Regenerate the body on every promote. The release branch is
# force-pushed, so a body written only at gh-pr-create time freezes at
# whatever was pending the day the PR opened and never mentions
# anything promoted since.
git log --reverse --pretty=$'%H\t%s' production/main..origin/main > commits.tsv
PROD_REPO="${PRODUCTION_REPO}" python3 - commits.tsv > body.md <<'PY'
import os, re, sys

repo = os.environ["PROD_REPO"]
rows = [l.rstrip("\n").split("\t", 1) for l in open(sys.argv[1]) if "\t" in l]

NAMED = [("feat", "### Features"), ("fix", "### Bug Fixes"),
("perf", "### Performance"), ("docs", "### Documentation"),
("refactor", "### Refactors")]
CHORE = {"chore", "ci", "build", "test", "style", "release"}
NOISE = re.compile(r"^(Build SDK|Merge pull request #\d+|Merge branch )")

named, chores, unconventional, generated = {}, [], [], []
for sha, subject in rows:
m = re.match(r"^(\w+)(\([^)]*\))?!?:", subject)
kind = m.group(1) if m else ""
if kind in dict(NAMED): named.setdefault(kind, []).append((sha, subject))
elif kind in CHORE: chores.append((sha, subject))
elif NOISE.match(subject): generated.append((sha, subject))
else: unconventional.append((sha, subject))

def rows_md(items):
out = []
for sha, subject in items:
# Five-digit refs are run-llama/platform PRs; GitHub would
# otherwise autolink them to this repo's own issue numbers.
subject = re.sub(r"\(#(\d{5,})\)",
r"([#\1](https://github.com/run-llama/platform/pull/\1))", subject)
out.append(f"- {subject} ([`{sha[:7]}`](https://github.com/{repo}/commit/{sha}))")
return out

L = [f"Promotes `stainless/release` onto `main` — **{len(rows)} commits**. "
"Merging this lets release-please cut the next release and write `CHANGELOG.md`.", ""]
for kind, title in NAMED:
if named.get(kind):
L += [title, *rows_md(named[kind]), ""]
if unconventional:
L += ["### :warning: Not conventional-commit — release-please will DROP these from `CHANGELOG.md`",
*rows_md(unconventional), ""]
for items, title in ((chores, "Chores &amp; CI"), (generated, "Codegen &amp; merge commits")):
if items:
L += [f"<details><summary>{title} ({len(items)})</summary>", "",
*rows_md(items), "", "</details>", ""]
L.append("<sub>Regenerated by `stlc-promote.yml` on every promote, from "
"`main...stainless/release`.</sub>")
print("\n".join(L))
PY

EXISTING_PR=$(gh pr list \
--repo "${PRODUCTION_REPO}" \
--head stainless/release \
Expand All @@ -81,7 +134,9 @@ jobs:
--base main \
--head stainless/release \
--title "Release SDK updates" \
--body "$(git log --oneline production/main..origin/main)"
--body-file body.md
else
echo "Release PR #${EXISTING_PR} already exists. Force-push has updated it."
gh pr edit "${EXISTING_PR}" \
--repo "${PRODUCTION_REPO}" \
--body-file body.md
fi
37 changes: 28 additions & 9 deletions .github/workflows/stlc-sync-from-production.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
name: Sync from production

on:
schedule:
# A poll, not a release — tune to how often releases/contributions land on
# production. Every few hours is plenty; daily is fine.
- cron: '17 */6 * * *'
# Cadence lives in run-llama/stainless .github/workflows/stlc-dispatch-backsync.yml,
# which dispatches this workflow with a CI_BOT App installation token. A `schedule:`
# here would fire it a second time and attribute that run to whoever last edited the
# cron. Verified 2026-08-07 by running both paths side by side: dispatched runs show
# llama-org-ci-bot[bot], scheduled runs showed a maintainer who had left the org.
workflow_dispatch: {}

permissions:
contents: write # push the back-sync branch on staging
pull-requests: write # open/merge the back-sync PR on staging
contents: read # checkout only — the push and the PR use the CI_BOT app token

concurrency:
group: stlc-sync-from-production
Expand All @@ -21,8 +21,6 @@ jobs:
if: github.repository == 'run-llama/llamacloud-prod-java'
env:
PRODUCTION_REPO: run-llama/llama-parse-java
# The built-in token writes the branch + PR on this (staging) repo.
GH_TOKEN: ${{ github.token }}
steps:
- name: Generate production-repo token (CI_BOT GitHub App, read-only)
id: prod-token
Expand All @@ -34,10 +32,24 @@ jobs:
repositories: llama-parse-java
permission-contents: read

- name: Generate staging-repo token (CI_BOT GitHub App)
id: staging-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.CI_BOT_APP_ID }}
private-key: ${{ secrets.CI_BOT_PRIVATE_KEY }}
# owner/repositories omitted: the token scopes to this repository.
permission-contents: write
permission-pull-requests: write
# production/main carries .github/workflows changes; GITHUB_TOKEN can
# never push those.
permission-workflows: write

- name: Check out staging
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false

- name: Fetch production main
env:
Expand All @@ -64,10 +76,17 @@ jobs:

- name: Push production main to the back-sync branch on staging
if: steps.diff.outputs.behind == 'true'
run: git push origin production/main:refs/heads/stlc/from-prod --force
env:
STAGING_REPO_TOKEN: ${{ steps.staging-token.outputs.token }}
run: |
git push \
"https://x-access-token:${STAGING_REPO_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" \
production/main:refs/heads/stlc/from-prod --force

- name: Open or update the back-sync PR on staging
if: steps.diff.outputs.behind == 'true'
env:
GH_TOKEN: ${{ steps.staging-token.outputs.token }}
run: |
EXISTING_PR=$(gh pr list --head stlc/from-prod --base main --state open --json number --jq '.[0].number')
if [ -z "${EXISTING_PR}" ]; then
Expand Down
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
configured_endpoints: 136
configured_endpoints: 150
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- x-release-please-start-version -->

[![Maven Central](https://img.shields.io/maven-central/v/ai.llamaindex.llamacloud/llama-cloud)](https://central.sonatype.com/artifact/ai.llamaindex.llamacloud/llama-cloud/1.4.0)
[![javadoc](https://javadoc.io/badge2/ai.llamaindex.llamacloud/llama-cloud/1.4.0/javadoc.svg)](https://javadoc.io/doc/ai.llamaindex.llamacloud/llama-cloud/1.3.0)
[![javadoc](https://javadoc.io/badge2/ai.llamaindex.llamacloud/llama-cloud/1.4.0/javadoc.svg)](https://javadoc.io/doc/ai.llamaindex.llamacloud/llama-cloud/1.4.0)

<!-- x-release-please-end -->

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ import ai.llamaindex.llamacloud.services.blocking.DataSinkService
import ai.llamaindex.llamacloud.services.blocking.DataSourceService
import ai.llamaindex.llamacloud.services.blocking.ExtractService
import ai.llamaindex.llamacloud.services.blocking.FileService
import ai.llamaindex.llamacloud.services.blocking.JobDataPointService
import ai.llamaindex.llamacloud.services.blocking.ParsingService
import ai.llamaindex.llamacloud.services.blocking.PipelineService
import ai.llamaindex.llamacloud.services.blocking.ProjectService
import ai.llamaindex.llamacloud.services.blocking.RetrieverService
import ai.llamaindex.llamacloud.services.blocking.SheetService
import ai.llamaindex.llamacloud.services.blocking.SplitService
import ai.llamaindex.llamacloud.services.blocking.V2ProjectService
import ai.llamaindex.llamacloud.services.blocking.WebhookConfigService
import java.util.function.Consumer

/**
Expand Down Expand Up @@ -59,6 +63,8 @@ interface LlamaCloudClient {

fun sheets(): SheetService

fun split(): SplitService

fun parsing(): ParsingService

fun extract(): ExtractService
Expand All @@ -71,8 +77,14 @@ interface LlamaCloudClient {

fun configurations(): ConfigurationService

fun webhookConfigs(): WebhookConfigService

fun projects(): ProjectService

fun v2Projects(): V2ProjectService

fun jobDataPoints(): JobDataPointService

fun dataSinks(): DataSinkService

fun dataSources(): DataSourceService
Expand Down Expand Up @@ -110,6 +122,8 @@ interface LlamaCloudClient {

fun sheets(): SheetService.WithRawResponse

fun split(): SplitService.WithRawResponse

fun parsing(): ParsingService.WithRawResponse

fun extract(): ExtractService.WithRawResponse
Expand All @@ -122,8 +136,14 @@ interface LlamaCloudClient {

fun configurations(): ConfigurationService.WithRawResponse

fun webhookConfigs(): WebhookConfigService.WithRawResponse

fun projects(): ProjectService.WithRawResponse

fun v2Projects(): V2ProjectService.WithRawResponse

fun jobDataPoints(): JobDataPointService.WithRawResponse

fun dataSinks(): DataSinkService.WithRawResponse

fun dataSources(): DataSourceService.WithRawResponse
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,15 @@ import ai.llamaindex.llamacloud.services.async.DataSinkServiceAsync
import ai.llamaindex.llamacloud.services.async.DataSourceServiceAsync
import ai.llamaindex.llamacloud.services.async.ExtractServiceAsync
import ai.llamaindex.llamacloud.services.async.FileServiceAsync
import ai.llamaindex.llamacloud.services.async.JobDataPointServiceAsync
import ai.llamaindex.llamacloud.services.async.ParsingServiceAsync
import ai.llamaindex.llamacloud.services.async.PipelineServiceAsync
import ai.llamaindex.llamacloud.services.async.ProjectServiceAsync
import ai.llamaindex.llamacloud.services.async.RetrieverServiceAsync
import ai.llamaindex.llamacloud.services.async.SheetServiceAsync
import ai.llamaindex.llamacloud.services.async.SplitServiceAsync
import ai.llamaindex.llamacloud.services.async.V2ProjectServiceAsync
import ai.llamaindex.llamacloud.services.async.WebhookConfigServiceAsync
import java.util.function.Consumer

/**
Expand Down Expand Up @@ -59,6 +63,8 @@ interface LlamaCloudClientAsync {

fun sheets(): SheetServiceAsync

fun split(): SplitServiceAsync

fun parsing(): ParsingServiceAsync

fun extract(): ExtractServiceAsync
Expand All @@ -71,8 +77,14 @@ interface LlamaCloudClientAsync {

fun configurations(): ConfigurationServiceAsync

fun webhookConfigs(): WebhookConfigServiceAsync

fun projects(): ProjectServiceAsync

fun v2Projects(): V2ProjectServiceAsync

fun jobDataPoints(): JobDataPointServiceAsync

fun dataSinks(): DataSinkServiceAsync

fun dataSources(): DataSourceServiceAsync
Expand Down Expand Up @@ -114,6 +126,8 @@ interface LlamaCloudClientAsync {

fun sheets(): SheetServiceAsync.WithRawResponse

fun split(): SplitServiceAsync.WithRawResponse

fun parsing(): ParsingServiceAsync.WithRawResponse

fun extract(): ExtractServiceAsync.WithRawResponse
Expand All @@ -126,8 +140,14 @@ interface LlamaCloudClientAsync {

fun configurations(): ConfigurationServiceAsync.WithRawResponse

fun webhookConfigs(): WebhookConfigServiceAsync.WithRawResponse

fun projects(): ProjectServiceAsync.WithRawResponse

fun v2Projects(): V2ProjectServiceAsync.WithRawResponse

fun jobDataPoints(): JobDataPointServiceAsync.WithRawResponse

fun dataSinks(): DataSinkServiceAsync.WithRawResponse

fun dataSources(): DataSourceServiceAsync.WithRawResponse
Expand Down
Loading
Loading