Commit Graph

416 Commits

Author SHA1 Message Date
Zylon CI
ac7614ab02 docs: update OpenAPI spec for 1.1.0 2026-08-06 13:41:07 +00:00
github-actions[bot]
1d01b27a5d build: update uv.lock for 1.1.0 2026-08-06 13:39:57 +00:00
zylon-ci
ada8e68722 chore(main): release 1.1.0 2026-08-06 15:39:02 +02:00
Javier Martinez
4269d7e04b fix: remove pub sub (#2328)
* fix: don't do a deep copy

(cherry picked from commit 8c5b321f1c95de78acd9911191ee1da4e78fffb7)

* fix: ingestion
2026-08-06 15:38:18 +02:00
Javier Martinez
a5c6d241b2 fix: remove tool result (#2327) 2026-08-05 09:03:26 +02:00
Javier Martinez
b94e70741b chore(deps): update Claude specs and anthropic SDK (#2324)
* chore(deps): update Claude specs and anthropic SDK

# Conflicts:
#	uv.lock

* chore: create pr

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-04 12:12:34 +02:00
Javier Martinez
3acd63d4b5 fix: split celery task in two (parser & store), and reuse in the attach documents (#2326)
* feat: split vector_index_task into parse_task + extract_task

Split the single vector_index_task in extraction_tasks.py into two
atomic, independently-retryable tasks on the same queue:

- parse_task (private_gpt.ingestion.parse): validates and parses the
  source file into tree nodes, serialises them into nodes_json on the
  body, then dispatches extract_task on the same ingestion queue.
  When parse_only=True it returns nodes_json directly (used by the
  chat document preprocessing path) without dispatching extract_task.

- extract_task (private_gpt.ingestion.extract): deserialises the nodes
  from body.nodes_json and runs load_index (embedding + persistence).

Both tasks share IngestAsyncBody (two new optional fields: nodes_json
and parse_only) so no extra models or files are needed.

CeleryIngestionScheduler.ingest_async dispatches parse_task instead of
vector_index_task; the existing vector_index_task is kept unchanged for
the synchronous blocking ingest() path.

IngestionTaskHelper.revoke_ingestion_task now also cancels pending or
running parse_task and extract_task instances.

BaseIngestionScheduler gains bytes_to_text() satisfying the
DocumentConverter protocol. LocalIngestionScheduler delegates to
ConvertService; CeleryIngestionScheduler dispatches a parse_only
parse_task and converts the returned nodes to plain text in-process.

DocumentFilePreprocessingInterceptor now injects IngestionSchedulerFactory
instead of ConvertService, and preprocess_document_history accepts the
DocumentConverter protocol instead of the concrete ConvertService type.

* refactor: clean split into parse_task + store_vectors_task in extraction_tasks.py

Rewrote the previous approach to be simpler and self-contained:

- Everything lives in extraction_tasks.py — no extra files or models.
- parse_task (private_gpt.ingestion.parse): validates + parses the file,
  serialises nodes into body.nodes_json, then dispatches store_vectors_task
  on the same ingestion queue. When body.parse_only=True the dispatch is
  skipped and nodes_json is returned directly (chat bytes_to_text path).
- store_vectors_task (private_gpt.ingestion.store_vectors): deserialises
  body.nodes_json and runs load_index. This is the terminal task that
  triggers the final done/error AMQP callback.
- Both tasks set callback_task_name=VECTOR_INDEX_CALLBACK_TASK_NAME so
  all progress, done and error events share the pgpt.vector_index_task.*
  prefix — consumers see a unified event stream.
- vector_index_task is kept unchanged for the synchronous blocking path.
- IngestionTaskHelper.revoke_ingestion_task now covers all three task
  names using the same IngestAsyncBody isinstance check.

* refactor: nodes as list[BaseNode] (pickle), drop parse_only and vector_index_task

- nodes field on IngestAsyncBody is now list[BaseNode] | None — Celery uses
  pickle so the objects pass through unchanged, no dict/JSON round-trip needed.
- parse_only removed from IngestAsyncBody; it was an implementation detail of
  the scheduler that had no business on the API model. bytes_to_text on both
  schedulers now delegates directly to ConvertService.
- vector_index_task removed; _dispatch_sync_ingest dispatches parse_task,
  waits for it (parse is fast), extracts the store_vectors task-id from the
  result, and returns an AsyncResult for it — so ingest() and
  ingest_for_request() poll store_vectors completion exactly as before.
- store_vectors_task reads body.nodes directly, no deserialization step.

* fix: reuse parse_task for chat document conversion via async scheduler

The chat attach-document path was still parsing in-process: the Celery
scheduler's bytes_to_text delegated to ConvertService, so the arq chat
worker ran ParseComponent directly instead of going through the ingestion
scheduler.

- parse_task gains a dispatch_store kwarg (default True). When False it
  returns the parsed plain text via ConvertService and skips the
  store_vectors dispatch, so the same task serves both the ingestion
  pipeline and the chat convert path.
- CeleryIngestionScheduler.bytes_to_text now dispatches parse_task with
  dispatch_store=False on the ingestion queue and returns the text, so
  attached documents are converted on the Celery worker, not in the chat
  worker.
- IngestAsyncBody keeps nodes typed as list[BaseNode] and carries
  __getstate__/__setstate__ pickle hooks: Celery transports task args with
  pickle, which chokes on the circular parent/children refs of TreeNode.
  The hooks serialise nodes to their model_dump() dicts on the wire and
  rebuild them on receipt, keeping the Celery limitation inside the model
  abstraction instead of leaking list[dict] into the public type.

* fix: multimodality

* fix: update tests to use parse_task instead of removed vector_index_task

* fix: update tests and scheduler for parse_task + store_vectors_task split

- test_task_registry: update expected task names from vector_index to
  parse + store_vectors.
- test_ingestion_scheduler: fix dispatch_task mock to return a proper
  result (ready=True, failed=False, result='store-task-id') so the
  _dispatch_sync_ingest poll loop exits cleanly.
- ingest_async: wait for parse_task and return the store_vectors task_id
  so the status endpoint resolves to IngestResponse, not the intermediate
  string. Same pattern as _dispatch_sync_ingest.
- parse_task: clear body.callback before returning so parse_task's
  after_return hook does not fire an intermediate AMQP notification with
  the store task-id as data; store_vectors_task owns the final callback.

test_ingest_uri_async and test_di are pre-existing failures on main
(unrelated to this branch).

* fix: restore test_ingest_uri_async — pin injector to preserve mock broker

StatelessBackgroundTask.create_application_injector() replaces the global
injector with a fresh one during eager task execution, making the mock
BrokerComponent unreachable from task_after_return. Patch
create_application_injector to return the test injector so the mock broker
is reachable and the AMQP callback assertion can fire.

The test also now explicitly documents that the event type must be
pgpt.vector_index_task.done (the legacy name) so existing consumers are
not broken by the parse_task / store_vectors_task split.

* fix: ingest_async is truly fire-and-forget, sync path waits on store_vectors

The three callers have distinct semantics:

- ingest_async: fire-and-forget. Dispatches parse_task, returns its
  task_id immediately without waiting. parse_task dispatches
  store_vectors_task internally; the AMQP done/error callback fires from
  store_vectors_task under the legacy pgpt.vector_index_task.* name.

- ingest / ingest_for_request (sync path via _dispatch_sync_ingest):
  must block until ingestion is complete. Dispatches parse_task, waits
  for it (parsing only — fast), extracts the store_vectors task_id from
  its result, then polls that AsyncResult for completion.

- bytes_to_text (convert path): dispatches parse_task(dispatch_store=False),
  waits for it, returns the text. Unchanged.

test_ingest_uri_async updated: in eager mode parse_task's result is the
store_vectors task_id string; the test now follows the chain —
status(parse_task_id) → store_task_id → status(store_task_id) →
IngestResponse — which mirrors real client behaviour.

* refactor: normalize BaseIngestionScheduler to parse/store/ingest/delete × sync/async

Each operation now comes in two flavours — sync (runs to completion,
returns the result) and async (fire-and-forget, returns a task-id):

  parse       / parse_async
  store       / store_async
  ingest      / ingest_async   (parse + store combined)
  delete      / delete_async
  bytes_to_text                (DocumentConverter protocol, always sync)

LocalIngestionScheduler implements all operations in-process.
CeleryIngestionScheduler dispatches each step to the configured queue:
- ingest_async: dispatches parse_task (which chains store_vectors_task)
  and returns the parse task-id immediately — fire-and-forget.
- ingest / ingest_for_request: dispatches parse_task, waits for it,
  then polls the store_vectors AsyncResult to completion.
- parse_async: dispatches parse_task with dispatch_store=False, returns
  the parse task-id.
- store_async: dispatches store_vectors_task directly.
- bytes_to_text: dispatches parse_task(dispatch_store=False), waits,
  returns plain text.

_dispatch_sync_ingest removed — its logic now lives in ingest().

Tests updated to use the public ingest() method and to stub both the
dispatch_task mock and the AsyncResult store poll.
2026-08-04 11:18:44 +02:00
Javier Martinez
f672481277 fix: mcp oauth error (#2325)
* fix: rebuild httpx2 exceptions to an controllable exception

* fix: avoid to create loop before to control the env

* chore: enable verbose

* chore: run all tests
2026-08-03 10:31:41 +02:00
Javier Martinez
0216db9f4a fix: context stack (#2323)
* fix: revert all changes

* fix: avoid to duplicate layers

* fix: store original input

* fixx: ty
2026-07-30 17:45:51 +02:00
Javier Martinez
e534667c98 fix: improve perf (#2322)
* fix: improve perf

* Revert "fix: improve perf"

This reverts commit f558dd431c.

* Revert "fix: avoid duplicating deltas (#2321)"

This reverts commit b6be07c2ae.
2026-07-30 15:15:41 +02:00
Javier Martinez
94710b9272 feat: bump mcp to 2.0 (#2320)
* feat: improve coerce

* feat: update mcp to 2.0.0
2026-07-30 13:04:59 +02:00
Javier Martinez
b6be07c2ae fix: avoid duplicating deltas (#2321) 2026-07-30 12:34:53 +02:00
Javier Martinez
e7b579e3e3 fix: prepare stable version (#2318)
* fix: bash

(cherry picked from commit 2adf815cee)

* fix: ty

(cherry picked from commit fcf1223809)

# Conflicts:
#	private_gpt/events/models/_content_blocks.py

* fix: ensure not repeat system prompt

(cherry picked from commit 94b6a4af01)

* ...

(cherry picked from commit 690a106d04)

* fix: pipeline

(cherry picked from commit 872dc93798)

* fix: avoid to repeat runtime messages

(cherry picked from commit 10cb81ad5c)

* fix: defer loading

(cherry picked from commit 586b0a490e)

* fix: response output

(cherry picked from commit 0892d4fb0f)

# Conflicts:
#	private_gpt/components/engines/chat/async_chat_engine.py

* fix: aggregate tool calls

(cherry picked from commit ab260d4e94)

* fix: tools

(cherry picked from commit 33413de2b6)

* fix: disconnections from redis and cancel

(cherry picked from commit 8591c80c0f)

* fix: deduplicate system prompt

* fix: ty

* fix: ensure that it's calling as anthropic does

(cherry picked from commit 77ee6a014c)

# Conflicts:
#	private_gpt/events/models/_tool_result_blocks.py

* fix: ty

* test: fix them
2026-07-30 12:12:36 +02:00
Kobi Hikri
8440a4bda8 ci: attach provenance and SBOM attestations to the released image (#2316)
* ci: attach provenance and SBOM attestations to the released image

* ci: restore trailing newline at end of file
2026-07-29 15:09:26 +02:00
Alfonso Lozana
5219fc6575 feat: add reader overrides (#2317)
* feat: add reader overrides

* fix: fix disable readers

* fix: change override to register

* fix: control UnidentifiedImageError

* Revert "fix: control UnidentifiedImageError"

This reverts commit df2cc8ccee.

* fix: fallback resolved reader

* chore: remove not necessary var
2026-07-29 15:07:34 +02:00
Alfonso Lozana
0426d91ba1 feat: add db2 native connection (#2292)
* feat: add db2 native connection

* fix: make check
2026-07-29 10:32:46 +02:00
dependabot[bot]
6e9de829da chore(deps): bump astral-sh/setup-uv from 8.3.2 to 9.0.0 (#2314)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.3.2 to 9.0.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](11f9893b08...c771a70e62)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-29 10:29:31 +02:00
dependabot[bot]
8df26cf076 chore(deps): bump actions/stale from 10 to 11 (#2315)
Bumps [actions/stale](https://github.com/actions/stale) from 10 to 11.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v10...v11)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '11'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-29 10:29:15 +02:00
Alfonso Lozana
ae31dc1db9 fix: change sql prompt (#2313)
* feat: change sql prompt

* feat: add context query response

* chore: clean code
2026-07-28 16:50:54 +02:00
Javier Martinez
3492540ff1 ci: avoid to fail when there's not code changes (#2309) 2026-07-27 11:39:59 +02:00
Javier Martinez
a8da90a73e chore: enable preview with forks (#2308) 2026-07-23 16:05:02 +02:00
Javier Martinez
cdf0b35b77 fix: random bugs v3 (#2307)
* fix: extract citations

* fix: add logs in celery runner

* chore: add faster test run

* fix: add buffer to the condensation

* fix: tick quotes

* fix: citations

* fix: mypy

* fix: tools endpoint

* chore: add logs

* fix: async tool execution

* fix: race conditions in async runner

* fix: s3 mime type

* fix: cancel async tasks

* fix: guest mime

* test: add disconnect http

* fix: amqp callback

* fix: flush

* fix: warm up the vector

* fix: bash tool

* fix: tools

* fix: remove noise

* fix: ensure to cancel any pending timeout after execution

* ...

* fix: grpc

* fix: mypy

* fix: grpc

* fix: mypy

* fix: infinite loop

* test: add tests

* fix: update content router to be async

* fix: tools & params

* fix: mypy

* fix: mypy

* fix: random bugs

* fix: mypy

* fix: cancellation

* fix: issue with timeouts

* fix: timeout

* fix: fire and forget

* fix: citation robustness

* fix: avoid to duplicate suffixes

* fix: mypy

* fix: allow to set special tokens

* fix: duplicates layers

* fix: mypy

* fix: allow to upload skills with random metadata

* fix: mypy

* fix: rollback the old version

* fix: tests

* perf: add logs

* fix: ingestion

* fix: tools endpoints

* fix: chunked endpoint

* fix: it's losing filename & non-utf-8 files

* fix: mypy

* fix: update ui
2026-07-23 15:46:52 +02:00
Seven
cd543c2a5b docs: add DaoXE OpenAI-compatible gateway configuration example (#2303)
Add a provider guide showing how to configure PrivateGPT with DaoXE,
a multi-model multi-protocol AI API gateway at https://daoxe.com/v1.
Includes setup steps, advanced model profile examples, and a card in
the providers overview under a new "Cloud gateways" section.

Co-authored-by: hei <hei@heideMacBook-Pro.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 08:23:41 +02:00
Solaris-star
b925ab48ba docs: add SECURITY.md for private vulnerability reporting (#2305)
Provide a clear private disclosure path so researchers are not forced
to file public issues when Private Vulnerability Reporting is not
enabled.

Fixes #2304

Signed-off-by: Solaris-star <820622658@qq.com>
2026-07-22 18:04:51 +02:00
dependabot[bot]
1cf1564ffe chore(deps): bump actions/setup-python from 6 to 7 (#2306)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6 to 7.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 17:12:09 +02:00
Javier Martinez
20e3f6fbc8 chore: update typechecking deps (#2302) 2026-07-16 13:36:11 +02:00
Javier Martinez
091d5f7020 fix: random bugs (#2301)
* fix: celery callbacks

* fix: s3 + skill creator

* fix: resumable when there's params

* fix: add distributed cache

* fix: do durable context stack

* fix: mcp tools

* fix: present server tool

* fix: add cache to the skills

* fix: mcp

* fix: mypy
2026-07-16 09:14:43 +02:00
Javier Martinez
576589bdc5 feat: add websearch in a sandbox (#2300)
* feat: add websearch in a sandbox

* fix: celery callbacks

(cherry picked from commit fe7d0ce9d5)

* fix: mypy
2026-07-16 08:39:52 +02:00
Javier Martinez
21d42fd97a feat: code execution v4 (#2295)
* feat: add bundle to remove

* fix: spaces

* feat: add xml render as skill spec

* feat: add skill volume root to cache

* fix: deduplicate values

* fix: change the mount path to skill_id

* fix: use different paths

* feat: add principal

(cherry picked from commit 5db64fe721d5706440ce9f342b1388ffe742bc16)

# Conflicts:
#	private_gpt/components/code_execution/base.py
#	private_gpt/components/code_execution/code_execution_component.py
#	private_gpt/components/code_execution/local.py
#	private_gpt/components/environment/manager.py
#	private_gpt/components/tools/builders/bash_tool_builder.py
#	private_gpt/components/tools/builders/text_editor_tool_builder.py
#	private_gpt/components/tools/processors/bash_processor.py

* fix: mypy

...

* fix: config

* fix: sandbox config

* feat: add forward cookies

* fix: loop

* feat: add present server

* feat: add feature flag for tools

* refactor: move principal to another better place

* feat: add api key principal

* docs: fix docs

* docs: add present server

* fix: principal

* fix: mypy

* fix: avoid to block the loop

* fix: blocks in expansion

* fix: remove maximum concurrent users

...

* fix: multiplexer

* fix: readers

* fix: more fixes

...

* fix: impl

* feat: tool scheduler

* feat: add adaptative

* feat: add chat worker

* fix: config

* fix: max

* feat: add chat/tools workers

* fix: mypy

* feat: add generic scheduler

* fix: get result

* feat: do serializable the tool executor

* fix: tools

* fix: config

* fix: config

* fix: args

* fix: config

* fix: serializer

* Revert "fix: blocks in expansion"

This reverts commit a2110f94a8.

* fix: unify all logic

* feat: add ingestion scheduler

* fix: settings

* fix: config

* feat: add arq worker to chat

* fix: arq worker

* fix: add nest

* fix: mypy

* fix: await

* fix: script stress

* fix: tokenizer

* fix: chat scheduler

* fix: mypy

* fix: add async tokenizer

* fix: improve condense

* fix: tool scheduler

* feat: add initial real async chat worker

* fix: mypy

* fix: do resumable local executor

...

...

...

fix: revert usleess changes

fix: remove parent chat job

fix: refactor

fix: loop

ref: rename models

fix: chat engine

fix: mypy

...

...

...

fix: fix deps

* fix: tests

* fix: tests

* ...

* fix: stream

* fix: config

* fix: scheduler

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Handle PGPT_WORKER_MODE=celery in health check worker status

* fix: cancel

* fix: arch

* fix: test ingestion

* fix: deserialization of chat messages

* fix: broken results

* fix: mypy

* fix: test

* fix: config

* fix: remove arq tool worker

* fix: output cls

* fix: preserve early resumable tool callbacks

* fix: preserve async tool result order

* refactor: address worker PR review comments

* fix: mypy

* test: colocate ARQ chat enqueue coverage

* fix: remove redis from tests

* fix: mypy

* fix: tests

* test: isolate chat mocks and cancellation timing

* fix: tests

* fix: tests

* fix: test

(cherry picked from commit f8ee460af2)

* fix: worker config

* test: remove flaky chat cancellation assertion

(cherry picked from commit 1115ff2349)

# Conflicts:
#	tests/server/chat/test_chat_routes.py

* fix: emit chat pings from stream listeners

* fix: don't duplciate the output

* fix: rss memory

...

* fix: pass the args

* fix: threads

* fix: websearch

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-15 13:05:23 +02:00
Javier Martinez
cd8ca2214a feat: resumable chat worker + tool worker + async tokenizer (#2298)
* fix: avoid to block the loop

* fix: blocks in expansion

* fix: remove maximum concurrent users

...

* fix: multiplexer

* fix: readers

* fix: more fixes

...

* fix: impl

* feat: tool scheduler

* feat: add adaptative

* feat: add chat worker

* fix: max

* feat: add chat/tools workers

* fix: mypy

* feat: add generic scheduler

* fix: get result

* feat: do serializable the tool executor

* fix: tools

* fix: config

* fix: config

* fix: args

* fix: config

* fix: serializer

* Revert "fix: blocks in expansion"

This reverts commit a2110f94a8.

* fix: unify all logic

* feat: add ingestion scheduler

* fix: settings

* fix: config

* feat: add arq worker to chat

* fix: arq worker

* fix: add nest

* fix: mypy

* fix: await

* fix: script stress

* fix: tokenizer

* fix: chat scheduler

* fix: mypy

* fix: add async tokenizer

* fix: improve condense

* fix: tool scheduler

* feat: add initial real async chat worker

* fix: mypy

* fix: do resumable local executor

...

...

...

fix: revert usleess changes

fix: remove parent chat job

fix: refactor

fix: loop

ref: rename models

fix: chat engine

fix: mypy

...

...

...

fix: fix deps

* fix: tests

* fix: tests

* ...

* fix: stream

* fix: config

* fix: scheduler

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Handle PGPT_WORKER_MODE=celery in health check worker status

* fix: cancel

* fix: arch

* fix: test ingestion

* fix: deserialization of chat messages

* fix: broken results

* fix: mypy

* fix: test

* fix: config

* fix: remove arq tool worker

* fix: output cls

* fix: preserve early resumable tool callbacks

* fix: preserve async tool result order

* refactor: address worker PR review comments

* fix: mypy

* test: colocate ARQ chat enqueue coverage

* fix: remove redis from tests

* test: isolate chat mocks and cancellation timing

* fix: tests

(cherry picked from commit 218b599c66)

# Conflicts:
#	tests/server/chat/anthropic/test_anthropic_client.py
#	tests/server/chat/anthropic/test_langchain_anthropic.py
#	tests/server/chat/test_chat_knowledge_revamp.py
#	tests/server/chat/test_chat_routes.py
#	tests/server/chat/test_chat_routes_skills_integration.py

* fix: tests

(cherry picked from commit fc5ec0f72a)

* fix: ruff

* fix: test

* fix: worker config

(cherry picked from commit 1371c275a1)

* fix: principal

* test: remove flaky chat cancellation assertion

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-15 12:12:45 +02:00
dependabot[bot]
7321dc9644 chore(deps): bump astral-sh/setup-uv from 8.3.1 to 8.3.2 (#2296)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.3.1 to 8.3.2.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](f98e069381...11f9893b08)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 16:42:32 +02:00
dependabot[bot]
7e95d28bcc chore(deps): bump actions/setup-node from 6 to 7 (#2297)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 16:42:17 +02:00
dependabot[bot]
1f4b8d9d50 chore(deps): bump astral-sh/setup-uv from 8.2.0 to 8.3.1 (#2291)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.2.0 to 8.3.1.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](fac544c07d...f98e069381)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 17:52:19 +02:00
Javier Martinez
bcadb418f3 docs: add community forks (#2290) 2026-07-06 11:20:32 +02:00
Javier Martinez
bfd2633d89 feat: add code execution ui (#2289) 2026-07-06 11:20:22 +02:00
Javier Martinez
f3d24b5413 fix: update fern & resolve fern preview (#2288)
* chore: update fern cli

* docs: add examples

* fix: update doc
2026-07-06 11:20:05 +02:00
Javier Martinez
61ad9ca56a chore(deps): update Claude specs and anthropic SDK (#2287)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-06 09:54:45 +02:00
OrbisAI Security
4641db358c fix: CVE-2026-44209 security vulnerability (#2283)
Automated dependency upgrade by OrbisAI Security
2026-07-06 08:37:04 +02:00
Javier Martinez
603152a62a docs: code execution (#2279)
* fix: preview

* docs: add doc
2026-06-29 18:32:01 +02:00
Javier Martinez
f2cffd1ab9 feat: code execution v2 (#2278)
* fix: ensure that the publisher is ready to publish new messages

* fix: dockerfile

* fix: clones

(cherry picked from commit bc0a77e05010cfb628842787954dc181323b8607)

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat: M3 persistent sessions + M4 isolated bash + OpenSandbox provider

Introduces mount-aware sessions with canonical path abstraction:
- ContentBundle / SessionMount abstraction for skill/plugin mounting
- PathTranslator: rewrites commands and scrubs output (canonical ↔ real paths)
- LocalMount + ReadOnlyMount: local FS-backed mounts; read-only cache shared across sessions
- BashExecutor: asyncio subprocess with setsid + setrlimit isolation + killpg on timeout
- SkillLoader: downloads skill files from object storage as ContentBundles
- LocalCodeExecutionProvider: rewritten to use mounts, TTL reaper, BashExecutor
- OpenSandboxCodeExecutionProvider: new Docker/K8s backend via opensandbox SDK
- Async cascade: create_session / get_or_create_session / build_tool all async
- ObjectStorage.list_files() added to ABC + both implementations
- New settings: session_ttl_seconds, bash rlimit fields, OpenSandboxSettings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: generic ContentBundle with BundledFile, remove skill_filter from code_execution layer

- Replace ContentBundle/dataclass with pydantic BaseModel; add BundledFile with path, content, permissions
- Update ReadOnlyMount to use list[BundledFile] with per-file chmod
- Remove skill_filter and SkillLoader from create_session() in base, local, and code_execution_component
- Move skill-to-bundle resolution into BashToolBuilder (inject SkillLoader there)
- Update SkillLoader.load() to return list[BundledFile] objects

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: remove opensandbox

* feat: use sandbox inside of code executor

* fix: mypy

* feat: add workspace manager

* feat: improvements

* feat: add env abstraction

* feat: remove leftovers

* feat: improve skill content

* fix: macos

* fix: mypy

* feat: add code executor prompt

* feat: add content bundle in stack

* fix: mypy

* fix: layout

* feat: add skill prompt

* fix: order

* feat: allow to present final files

* feat: add container block

* fix: remove default config

* fix: session pers

* fix: do lazy env

* fix: mounter

* feat: refactor mounter

* fix: container

* feat: add requirements

* fix: add container registry

* fix: move to be lazy

* fix: mypy

* fix: current folder

* fix: stop sandbox in tabular

* fi: ensure to use absolute paths in bash & text editor

* feat: add files router

* feat: simplify

* feat: update present files

* fix: download files

* fix: mypy

* fix: tests

* fix: tests

* fix: bash executor in linux

* Revert "fix: bash executor in linux"

This reverts commit 483e208a96.

* Revert "fix: tests"

This reverts commit 50d9288f5e.

* test: remove test in ci

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 18:29:29 +02:00
Javier Martinez
4cca7d0b97 feat: allow to attach files as Anthropic does (#2265)
* feat: add convert/parser service

(cherry picked from commit 2350ad0a3e60291fbb0ded1d1f1d1c784dcc6b3c)

* fix: mypy & test

(cherry picked from commit 4e5358ee156dc11400b6f1fdbcc71a58220a581c)

* feat: add initial content

(cherry picked from commit 6eaeb4f1a8e20ce09fb208aca8468185d3866e3c)

* fix: return content as tree

* docs: add convert examples

* feat: add parallel support

* feat: add concurrency in multimodal interceptor

* refactor: move config to a common class

* fix: apply preprocessors only over the last user message

* fix: final tweaks to allow to configure feature flag

* fix: support legacy blocks

* test: fix

* fix: mypy

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: image/audio in the chat

* fix: copilot

* fix: name

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-25 15:35:46 +02:00
Javier Martinez
42a6c047d0 feat: add validation skill endpoint + skill prompt (#2272)
* feat: add skill validator endpoint

* fix: skills

* feat: add skill prompt

(cherry picked from commit c36d27f008)

# Conflicts:
#	private_gpt/chat/input_models.py
#	private_gpt/components/prompts/prompt_builder.py
#	private_gpt/server/chat/interceptors/platform_guidelines_interceptor.py

* fix: test

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: clarify skill visibility comment

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: rename has_loaded_non_eager variable to snake_case

* test: cover skill validation route

* test: fix invalid skill validation case

* test: cover skill tool visibility states

* feat: improve skill tools + prompt

* fix: mypy

* feat: allow to limit the skill maximum size

* feat: add validation error codes

* fix: tests

* fix: invalid frontmatter

* fix: edge cases

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-25 15:35:26 +02:00
Alfonso Lozana
78a1e8b9f6 feat: control docs parser (#2273)
* fix: ensure that the publisher is ready to publish new messages

* fix: dockerfile

* fix: clones

(cherry picked from commit bc0a77e05010cfb628842787954dc181323b8607)

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: add ExtractionUnsuccessfulError in docling reader

* feat: add vision pipeline

* feat: add fall back with vision

* feat: add settings of enable_vision_fallback

* doc: update doc

* chore: code refactor

* feat: remove pypdfium2 dependency

* fix: add settings and change only doc vision behaviour

* feat: change extraction_type_override to skip_strategy_inference (disable strategy on vision transform parser)

* chore: make check

---------

Co-authored-by: Javier Martinez <javiermartinezalvarez98@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-24 08:22:17 +02:00
Alfonso Lozana
5d60141f08 feat: improve web search (#2274)
* fix:[ZYL-3553] web scraper memory (#693)

* fix: web scraper memory

* chore: make check

chore: fix make check errors

chore: fix make check

fix: async_playwright for test

chore: fix  ruff check -

chore: try to fix mypy

chore: more fix...

chore: add playwright to evaluation

fix: mypy

Revert "chore: add playwright to evaluation"

This reverts commit d916b56dc144a405ae0ff0103d1b377764f1ecad.
# Conflicts:
#	private_gpt/components/tools/builders/web_fetch_builder.py
#	private_gpt/components/web/web_scraper_service.py
#	private_gpt/components/web/web_search/processors/clean_content.py
#	private_gpt/components/web/web_search/processors/select_best_links.py
#	private_gpt/components/web/web_search/web_search_service.py
#	private_gpt/server/tools/tool_service.py

* feat: improve web scraper pool (#695)

* feat: [ZYL-3673] web search improve quality (#697)

* feat: improve web scraper pool

* feat: improve select best links

* fix: add settings of context

* fix: brave config (#699)

---------

Co-authored-by: Javier Martinez <javiermartinezalvarez98@gmail.com>
2026-06-24 08:20:24 +02:00
dependabot[bot]
671eae37ae chore(deps): bump actions/checkout from 6 to 7 (#2275)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-24 08:19:45 +02:00
zylon-ci
88d7e259a4 chore(main): release 1.0.1 (#2263)
* chore(main): release 1.0.1

* build: update uv.lock for 1.0.1

* docs: update OpenAPI spec for 1.0.1

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Zylon CI <ci@zylon.ai>
v1.0.1
2026-06-18 15:55:36 +02:00
rokieg77-alt
a64f1c9cf0 perf(prompts): use date-level current_date to preserve prompt-prefix caching (#2271)
create_chat_header_prompt rendered current_date with sub-second
datetime.now().isoformat() into the system prompt header, before the
guidelines and retrieved-context blocks. Since it changes every request,
the system-prompt prefix is never byte-stable, which defeats LLM
prompt-prefix caching (OpenAI automatic prefix caching, Anthropic
cache_control, local KV-cache reuse).

Use date-level granularity; the model only needs the calendar date for
relative-date reasoning and the prefix stays stable within a day.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:58:47 +02:00
Javier Martinez
4c0c500bbd fix: ensure that the publisher is ready to publish new messages (#2266)
* fix: ensure that the publisher is ready to publish new messages

* fix: dockerfile

* fix: clones

(cherry picked from commit bc0a77e05010cfb628842787954dc181323b8607)

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-12 15:20:46 +02:00
dependabot[bot]
8ac84e3c35 chore(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (#2268)
Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 8.1.0 to 8.2.0.
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](08807647e7...fac544c07d)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 8.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-10 09:06:59 +02:00
Javier Martinez
4021cf4e20 fix: use PGPT_HOME for local data, caches, and cleanup paths (#2267)
* feat: use default user folder

* docs: update references to local paths

* fix: windows

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: align make test and wipe with PGPT_HOME paths

* fix: align wipe target with PGPT_HOME local_data

* fix: folders

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-06-10 09:06:02 +02:00