Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ All notable changes to this project are documented in this file. The format foll

## [Unreleased]

## [0.2.0] - 2026-10-21

### Added

- `PhpAiBridge\Transport`, with `CurlTransport` as the client's default and `Psr18Transport` for an application's PSR-18 HTTP client (Symfony HttpClient, Guzzle and others): `Client` takes one as an optional last constructor argument. `psr/http-client` and `psr/http-factory` are suggested, not required.
Expand Down Expand Up @@ -37,5 +39,6 @@ First release: a typed PHP client for bounded Python AI tasks (rerank, embed, re
- Trusted services only: one bearer token authorizes every job, so the application must authenticate users and own the mapping from job IDs to their owners.
- Private HTTP transport: deploy behind an authenticated TLS boundary; the example routes have no end-user authentication and publish no ports.

[Unreleased]: https://github.com/cristiangirlea/php-python-ai-bridge/compare/v0.1.0...HEAD
[Unreleased]: https://github.com/cristiangirlea/php-python-ai-bridge/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/cristiangirlea/php-python-ai-bridge/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/cristiangirlea/php-python-ai-bridge/releases/tag/v0.1.0
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ The downloaded cache remains for reuse; it is not included in Git.
See the [integration guide](docs/integration.md) for Composer setup, manual Symfony/Laravel configuration, application job ownership and failure handling. Dedicated framework adapters are not implemented yet.
The client sends through `ext-curl` by default; an application with a PSR-18 client such as Symfony HttpClient or Guzzle can pass `PhpAiBridge\Psr18Transport` instead, configured as the [integration guide](docs/integration.md#through-a-psr-18-http-client) shows.

This source tree is a Composer library with PSR-4 autoloading under `PhpAiBridge\`. The first tagged release is `v0.1.0` ([changelog](CHANGELOG.md)): install it with `composer require cristiangirlea/php-python-ai-bridge:^0.1` once the package is on Packagist, or from a VCS repository pinned to the tag until then, as the integration guide shows. `examples/bootstrap.php` is a repository-only autoloader for dependency-free examples, not an application installation method.
This source tree is a Composer library with PSR-4 autoloading under `PhpAiBridge\`. The latest tagged release is `v0.2.0` ([changelog](CHANGELOG.md)): install it with `composer require cristiangirlea/php-python-ai-bridge:^0.2` once the package is on Packagist, or from a VCS repository pinned to the tag until then, as the integration guide shows. `examples/bootstrap.php` is a repository-only autoloader for dependency-free examples, not an application installation method.

```php
use PhpAiBridge\Client;
Expand Down
6 changes: 3 additions & 3 deletions docs/integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ Three normal tasks are implemented. Reranking: given a query and up to 512 candi

## Install through Composer

The first tagged release is `v0.1.0`; see [the changelog](../CHANGELOG.md). Once the package is on Packagist, this is the normal path, run inside your application's dependency-acquisition container:
The latest tagged release is `v0.2.0`; see [the changelog](../CHANGELOG.md). Once the package is on Packagist, this is the normal path, run inside your application's dependency-acquisition container:

```sh
composer require cristiangirlea/php-python-ai-bridge:^0.1 --no-scripts --no-plugins
composer require cristiangirlea/php-python-ai-bridge:^0.2 --no-scripts --no-plugins
```

Until the Packagist listing exists, install the same tag from the repository instead. In your application's root `composer.json`, add this repository and requirement, preserving existing entries:
Expand All @@ -35,7 +35,7 @@ Until the Packagist listing exists, install the same tag from the repository ins
}
],
"require": {
"cristiangirlea/php-python-ai-bridge": "0.1.0"
"cristiangirlea/php-python-ai-bridge": "0.2.0"
}
}
```
Expand Down
2 changes: 1 addition & 1 deletion docs/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ The original prototype was not entirely developed with TDD. Review corrections u

- No measured line/branch coverage percentage, formal security audit or production certification.
- No full Symfony kernel or Laravel application/Octane integration test, including configuration caching and multi-user authorization.
- No Packagist release yet, so no install from Packagist has been exercised, nor one from the `v0.1.0` tag through a VCS repository: the consumer Composer-install check installs the library's `git archive` zip from an `artifact` repository inside its container, offline (falling back to a path repository in a git worktree), and the repository's own examples use a small local autoloader.
- No Packagist release yet, so no install from Packagist has been exercised, nor one from the `v0.2.0` tag through a VCS repository: the consumer Composer-install check installs the library's `git archive` zip from an `artifact` repository inside its container, offline (falling back to a path repository in a git worktree), and the repository's own examples use a small local autoloader.
- No sustained load/soak benchmark, throughput claim, p95/p99 latency, measured memory-per-job limit or CPU cost per inference; the only timing figures are the medians of sequential jobs below, warm after one cold first job. The peak of a child holding all four ONNX models during the worst-case rerank batch is measured once, on one machine, under [Measured model worker memory](#measured-model-worker-memory-informational); the model worker's 1536 MiB is a limit, which grows with `BRIDGE_CONCURRENCY` children each holding its own copies.
- No representative ranking-quality evaluation (for example NDCG/MRR), multilingual accuracy evaluation, NER quality on real data or GPU benchmark; the NER figures below come from 48 invented sentences by the same author as the development set used to tune the redact task.
- No repeated or semantic LLM evaluation. The one recorded run below is a single session per question per model on the demo worker, so it shows that the tools can be used, not a success rate or retrieval quality.
Expand Down
Loading