-
-
Notifications
You must be signed in to change notification settings - Fork 37
rollup: June 2026 #176
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
rollup: June 2026 #176
Changes from all commits
Commits
Show all changes
57 commits
Select commit
Hold shift + click to select a range
04a84df
fix Duration2 modulo so multi-day uptime no longer divides by zero
thushan 9e456f1
harden olla service: guard UpdateConfig nil load and keep cleanup loo…
thushan 550c8fe
wire proxy engine Cleanup into the service wrapper shutdown
thushan 08f183d
return errors instead of panicking when the anthropic translator buff…
thushan 6d3bc0a
bind the http listener synchronously so a port-in-use failure surface…
thushan f096dac
stop closing the worker pool channel on shutdown to avoid a send-on-c…
thushan 0d84abe
recover health check panics per tick so the loop keeps running
thushan 960a815
stop treating client context timeouts as connection errors that mark …
thushan a49d407
remove the unused stateTransitions channel from the lifecycle unifier
thushan 9b3ee20
cap rate-limited IP tracking and move the eviction scan off the hot path
thushan dfe4d4b
return a 502 instead of re-panicking when a streaming translation panics
thushan 337f069
skill fixes post review
thushan 2b30fc9
preserve 429 and 413 status codes on proxy routes instead of flatteni…
thushan 7a08cf7
emit proper Anthropic wire format from /olla/anthropic/v1/models
thushan 1d4bfba
align Anthropic count_tokens, streaming usage and error mapping with …
thushan 4bd2e48
stop every tool block before the next one starts, fix delta index for…
thushan 64c0bbd
put tool results before user text so they sit directly after assistan…
thushan 0ca7e26
map 413 to request_too_large in the Anthropic error envelope
thushan 2eb3065
fix mid-stream panic errors, non-json backend errors and mixed-fleet …
thushan 9e62b5e
test mixed-fleet passthrough path filtering and uniform DMR fleet beh…
thushan 7dbafd1
fix resolvePassthroughTargetPath tie-break to use first-seen endpoint…
thushan 5c4a044
tidy gofmt spacing and struct field alignment from make ready
thushan 4224686
fix inverted liveness probe in cleanup loop panic test
thushan c91d06f
count tool definitions in the count_tokens estimate
thushan 73d413a
preserve tool_result is_error as an Error prefix when translating to …
thushan bfe4040
add request_id to the anthropic error envelope and mirror the request…
thushan c8df834
complete message_start fields, flush pre-init tool args and abort the…
thushan 597e301
make stream-started flag atomic, filter passthrough endpoints by decl…
thushan 420d6af
map openai reasoning to anthropic thinking blocks so translated think…
thushan cee6114
add claude-code-e2e skill to prove Claude Code works through Olla's a…
thushan ab9c5f2
gate logging field construction behind level checks so the proxy hot …
thushan 63fe2d8
skip client-ip parse when no trusted proxy cidrs are configured, drop…
thushan 12f4261
cache the anthropic models response keyed on the healthy model set to…
thushan 91479b3
profile olla's hot path in claude-code-e2e with micro and streaming l…
thushan a1cba86
pool the sse encode buffer and use typed delta structs to cut per-chu…
thushan e0f9fc5
diff heap snapshots in claude-code-e2e so the alloc profile shows bur…
thushan cb82d73
decode streaming chunks into typed structs instead of a map to cut in…
thushan 9cb274d
extend streaming benchmarks to cover the typed-decode parse path
thushan 30373a4
merge typed-decode streaming parse and per-chunk alloc tuning from an…
thushan f1a753c
doc updates
thushan e07d0a6
keep same-chunk content and tool_calls after reasoning, and stop reop…
thushan 8c6ff72
include the emitted model id in the anthropic models cache fingerprin…
thushan 198339b
harden the models cache separator against id collisions and cover the…
thushan dac7e29
merge anthropic improvements: reasoning-to-thinking translation, clau…
thushan e0f1f83
capture streaming usage before the empty-choices return so choices:[]…
thushan 87d4934
track real client commit for streaming panic recovery so an uncommitt…
thushan 92f3bb7
litepool avoids a panic again
thushan db4a397
make litepool Get return an error and have callers propagate it, with…
thushan 2fe2801
implement Flush and Unwrap on the committed response writer so transl…
thushan dcf07db
synthesise streaming output_tokens from content when the backend stre…
thushan de5c61c
make ollamock emit a terminal usage chunk in its openai stream like a…
thushan 09da739
serialise count_tokens before committing 200 so a serialise failure r…
thushan 1c272d8
derive the health-check per-tick context from the loop context so shu…
thushan dc670f3
extract bindListener and test the bind path directly
thushan 39d469f
fix t.Fatalf inside a goroutine in the models-cache test and isolate …
thushan d716e83
record a failure when the stream buffer pool is exhausted, matching t…
thushan 295fa37
docs and comments update
thushan File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
108 changes: 108 additions & 0 deletions
108
.claude/skills/claude-code-e2e/config.regression.yaml.tmpl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| # Olla config template for the /claude-code-e2e skill. | ||
| # | ||
| # Rendered at runtime into test/regression/tmp/ with these placeholders | ||
| # substituted (the skill does the substitution, never edit the rendered copy): | ||
| # __OLLA_PORT__ - loopback port Olla listens on | ||
| # __OLLAMA_URL__ - the real Ollama endpoint (--ollama-endpoint) | ||
| # __PASSTHROUGH__ - true (native Anthropic passthrough) | false (forced translation) | ||
| # | ||
| # One real Ollama endpoint, one Olla instance. The skill renders this twice - | ||
| # once with __PASSTHROUGH__=true, once =false - and restarts Olla between the | ||
| # two legs so both the passthrough and the OpenAI<->Anthropic translation paths | ||
| # are exercised against the same backend and model. | ||
|
|
||
| server: | ||
| host: "127.0.0.1" | ||
| port: __OLLA_PORT__ | ||
| read_timeout: 300s # gemma-class models on CPU can be slow to first token | ||
| read_header_timeout: 10s | ||
| write_timeout: 0s # 0 = no write deadline, required for SSE streaming | ||
| shutdown_timeout: 5s | ||
| request_logging: true | ||
| request_limits: | ||
| # Claude Code system prompts + tool schemas are large; keep this generous. | ||
| max_body_size: 10485760 | ||
| max_header_size: 524288 | ||
| rate_limits: | ||
| # Wide open: this harness is a correctness gate, not a rate-limit test. | ||
| global_requests_per_minute: 100000 | ||
| per_ip_requests_per_minute: 50000 | ||
| health_requests_per_minute: 100000 | ||
| burst_size: 1000 | ||
| cleanup_interval: 5m | ||
| trust_proxy_headers: false | ||
| trusted_proxy_cidrs: ["127.0.0.0/8"] | ||
|
|
||
| proxy: | ||
| engine: "olla" | ||
| profile: "auto" | ||
| load_balancer: "priority" | ||
| stream_buffer_size: 8192 | ||
| connection_timeout: 10s | ||
| response_timeout: 300s # long generations through a local model | ||
| read_timeout: 300s | ||
| response_header_timeout: 30s | ||
| retry: | ||
| enabled: true | ||
| on_connection_failure: true | ||
| max_attempts: 0 | ||
| sticky_sessions: | ||
| # Off on purpose: Claude Code resends full history each turn, so pinning | ||
| # adds a variable without adding coverage for this gate. | ||
| enabled: false | ||
|
|
||
| discovery: | ||
| type: "static" | ||
| refresh_interval: 10s | ||
| health_check: | ||
| initial_delay: 1s | ||
| static: | ||
| endpoints: | ||
| - url: "__OLLAMA_URL__" | ||
| name: "ollama-regression" | ||
| type: "ollama" | ||
| priority: 100 | ||
| model_url: "/api/tags" | ||
| health_check_url: "/" | ||
| check_interval: 5s | ||
| check_timeout: 3s | ||
|
|
||
| model_discovery: | ||
| # Fast interval so the model is discoverable within the skill's 60s | ||
| # readiness window on a cold boot (matches check_interval). | ||
| enabled: true | ||
| interval: 5s | ||
| timeout: 10s | ||
| concurrent_workers: 2 | ||
| retry_attempts: 2 | ||
| retry_backoff: 1s | ||
|
|
||
| model_registry: | ||
| type: "memory" | ||
| enable_unifier: true | ||
| unification: | ||
| enabled: true | ||
| stale_threshold: 24h | ||
| cleanup_interval: 10m | ||
| routing_strategy: | ||
| type: "optimistic" | ||
| options: | ||
| fallback_behavior: "all" | ||
| discovery_timeout: 5s | ||
| discovery_refresh_on_miss: false | ||
|
|
||
| translators: | ||
| anthropic: | ||
| enabled: true | ||
| passthrough_enabled: __PASSTHROUGH__ | ||
| max_message_size: 10485760 | ||
| inspector: | ||
| enabled: false | ||
|
|
||
| logging: | ||
| level: "info" | ||
| format: "text" | ||
| output: "stdout" | ||
|
|
||
| engineering: | ||
| show_nerdstats: false |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # Tier-B task: Summary.TotalSize() | ||
|
|
||
| Fixed feature task run by the child Claude Code instance against a fresh clone | ||
| of `thushan/smash`. Chosen because it is one self-contained file plus its test | ||
| (`pkg/analysis/summary.go` + `summary_test.go`), depends only on stdlib, and | ||
| needs only those two files in context - so it stays inside a small local | ||
| model's window while still forcing a real multi-turn tool loop | ||
| (read file -> read test -> edit both -> run test). | ||
|
|
||
| ## Prompt | ||
|
|
||
| The canonical prompt is the single source of truth in `totalsize.prompt.txt` | ||
| (this directory). The skill reads it with `cat` and passes it verbatim to | ||
| `claude -p` - do not duplicate the wording here or inline in the skill, so the | ||
| two cannot drift. Current content: | ||
|
|
||
| > Add a method `func (t *Summary) TotalSize() uint64` to pkg/analysis/summary.go | ||
| > that returns the sum of the Size field of every item the Summary holds. Then | ||
| > add a test in pkg/analysis/summary_test.go, following the existing style, that | ||
| > verifies the returned total. Run `go test ./pkg/analysis/...` and make sure it | ||
| > passes before you finish. | ||
|
|
||
| ## Assertion (run by the skill after the child exits, in the clone dir) | ||
|
|
||
| All of these must hold for Tier-B PASS on a leg: | ||
|
|
||
| 1. The child reported success - the final `stream-json` event is | ||
| `{"type":"result", ... "is_error": false}`. | ||
| 2. `go test ./pkg/analysis/...` exits 0 in the clone. | ||
| 3. `pkg/analysis/summary.go` shows as modified in `git status --porcelain` (the | ||
| method was actually added, not a no-op run). | ||
| 4. `pkg/analysis/summary_test.go` shows as modified AND contains `TotalSize` - | ||
| otherwise a model could add the method, skip the test, and still pass 2 and 3 | ||
| on the strength of the pre-existing suite. | ||
|
|
||
| A leg that fails any of the three is a Tier-B FAIL for that leg, but Tier-B is | ||
| non-gating: it is reported and influences the headline, while the run verdict is | ||
| set by Tier-A (the protocol gate) and the fitness preflight. Record which of the | ||
| three conditions failed so a model-capability failure (condition 1/2) is | ||
| distinguishable from an Olla wire failure (which Tier-A would also catch). | ||
|
|
||
| ## Reset between legs | ||
|
|
||
| The clone is thrown away and re-cloned (or `git reset --hard <SHA> && git clean | ||
| -xfd`) before the second leg, so the passthrough and translation legs both start | ||
| from the identical pinned baseline. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Add a method `func (t *Summary) TotalSize() uint64` to pkg/analysis/summary.go that returns the sum of the Size field of every item the Summary holds. Then add a test in pkg/analysis/summary_test.go, following the existing style in that file, that verifies the returned total. Run `go test ./pkg/analysis/...` and make sure it passes before you finish. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.