Release 2026.10.01.2: instrumentation imports without the database extras
Tests / test (==2.12.2) (push) Canceled after 0s
Tests / test (==2.14.3) (push) Canceled after 0s
Tests / test (>=3.3,<4) (push) Canceled after 0s
Tests / test (>=4,<5) (push) Canceled after 0s
Tests / test-postgres (==2.12.2) (push) Canceled after 0s
Tests / test-postgres (>=4,<5) (push) Canceled after 0s
Tests / canary (push) Canceled after 0s
Tests / test (==2.12.2) (push) Canceled after 0s
Tests / test (==2.14.3) (push) Canceled after 0s
Tests / test (>=3.3,<4) (push) Canceled after 0s
Tests / test (>=4,<5) (push) Canceled after 0s
Tests / test-postgres (==2.12.2) (push) Canceled after 0s
Tests / test-postgres (>=4,<5) (push) Canceled after 0s
Tests / canary (push) Canceled after 0s
This commit is contained in:
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Calendar Versioning](https://calver.org/) (YYYY.MM.DD).
|
||||
|
||||
## [2026.10.01.2] - 2026-10-01
|
||||
|
||||
The instrumentation imports on a base install, without the database extras.
|
||||
|
||||
### Fixed
|
||||
- `import fastmcp_feedback.instrumentation` failed on `pip install
|
||||
fastmcp-feedback` without the `instrumentation` extra: the package imported
|
||||
`storage.py` eagerly, which imports `sqlalchemy.ext.asyncio`, and SQLAlchemy
|
||||
2.1 raises `ImportError` there when `greenlet` is missing. `instrument(app)`
|
||||
with `JsonLinesSink`, `CallbackSink` or `MemorySink`, events, redaction and
|
||||
result classification now need only the base dependencies.
|
||||
- `DatabaseSink`, `EmbeddingVector`, `build_metadata`, `Embedder`,
|
||||
`EmbeddingSink`, `EmbeddingText`, `OpenAIEmbedder`, `extract_texts`,
|
||||
`backfill_embeddings` and `backfill_feedback` load on first access. Without
|
||||
the extra, accessing one raises `ImportError` naming the missing package and
|
||||
the extra to install (`[instrumentation]`, or `[instrumentation,embeddings]`
|
||||
for the embedding names), chained to the original error. Every access
|
||||
raises, not only the first, although SQLAlchemy itself reports a missing
|
||||
`greenlet` only once. Import paths are unchanged.
|
||||
- The middleware finds a `DatabaseSink` or `EmbeddingSink` among its sinks
|
||||
without importing their modules, so `database_sink`, `embedding_sink`,
|
||||
`capture_recent_calls`, `link_feedback`, `feedback_context`, `events_for`,
|
||||
`similar` and `similar_feedback` return their usual empty results on a base
|
||||
install.
|
||||
- `DEFAULT_TABLE_PREFIX`, `DEFAULT_EMBEDDING_DIM`, `EMBEDDING_SOURCES` and
|
||||
`DEFAULT_EVENT_TEXT_KEYS` moved to `instrumentation/constants.py` and import
|
||||
without the extras; `storage` and `embeddings` still export them.
|
||||
|
||||
## [2026.10.01.1] - 2026-10-01
|
||||
|
||||
A result that says it succeeded is no longer flagged for its own error string.
|
||||
|
||||
@@ -30,6 +30,20 @@ pip install fastmcp-feedback
|
||||
uv add "fastmcp-feedback[postgresql]"
|
||||
```
|
||||
|
||||
What each install covers:
|
||||
|
||||
| Install | Adds | Covers |
|
||||
|---------|------|--------|
|
||||
| `fastmcp-feedback` | FastMCP, SQLAlchemy, Pydantic | The feedback tools (sync SQLAlchemy, no greenlet), and `instrument(app)` with `JsonLinesSink`, `CallbackSink` and `MemorySink`, events, redaction and result classification |
|
||||
| `fastmcp-feedback[instrumentation]` | `sqlalchemy[asyncio]` (greenlet), `aiosqlite` | `DatabaseSink`, `build_metadata`, call history for linking feedback (`capture_recent_calls` across workers, `link_feedback`, `feedback_context`) |
|
||||
| `fastmcp-feedback[instrumentation,embeddings]` | `pgvector` | `EmbeddingSink`, `OpenAIEmbedder`, `similar()`, the backfill helpers; pgvector is only needed on PostgreSQL |
|
||||
|
||||
Postgres hosts add `asyncpg` for the async sinks. Without the
|
||||
`instrumentation` extra, `from fastmcp_feedback.instrumentation import
|
||||
DatabaseSink` raises an `ImportError` that names the missing package and the
|
||||
extra to install, and the middleware's database helpers return their empty
|
||||
defaults (`[]`, `False`).
|
||||
|
||||
### From Git (Latest Development)
|
||||
|
||||
```bash
|
||||
@@ -181,8 +195,7 @@ instrument(app, [
|
||||
|
||||
`DatabaseSink` needs the `instrumentation` extra
|
||||
(`uv add "fastmcp-feedback[instrumentation]"`), plus `asyncpg` for Postgres.
|
||||
Install the extra even if you already have SQLAlchemy: SQLAlchemy 2.1 no longer
|
||||
pulls in `greenlet` by itself, and its async engine cannot run without it.
|
||||
The other sinks work on the base install (see [Installation](#installation)).
|
||||
|
||||
### Using your own database and migrations
|
||||
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "fastmcp-feedback"
|
||||
version = "2026.10.01.1" # YYYYMMDD.patch versioning - update for each release
|
||||
version = "2026.10.01.2" # YYYYMMDD.patch versioning - update for each release
|
||||
description = "Production-ready feedback collection system for FastMCP servers"
|
||||
readme = "README.md"
|
||||
license = "MIT"
|
||||
|
||||
@@ -44,7 +44,7 @@ Quick Start:
|
||||
import logging
|
||||
|
||||
# Version information - CalVer YYYY.MM.DD
|
||||
__version__ = "2026.10.01.1"
|
||||
__version__ = "2026.10.01.2"
|
||||
__author__ = "Ryan Malloy"
|
||||
__email__ = "ryan@supported.systems"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user