From 5880161042783ccd0957cea81e286577460e9979 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Fri, 12 Jun 2026 22:45:38 +0000 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20fix=20ParadeDB=E2=86=92pg=5Ftextsea?= =?UTF-8?q?rch=20refs,=20add=20RRF=20scoring,=20add=20graphile-llm=20+=20a?= =?UTF-8?q?gentic-server=20docs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace all ParadeDB/pg_search references with pg_textsearch across features.md, constructive-features, constructive-search, and blueprint-definition-format - Update unified search description to mention RRF (Reciprocal Rank Fusion) - Add graphile-llm and agentic-server sections to constructive-agents SKILL.md - Add graphile-llm and agentic-server rows to features.md AI section - Add graphile-llm and agentic-server to constructive-features SKILL.md --- .agents/skills/constructive-agents/SKILL.md | 85 ++++++++++++++++++- .../references/blueprint-definition-format.md | 2 +- .agents/skills/constructive-features/SKILL.md | 4 +- .agents/skills/constructive-search/SKILL.md | 4 +- features.md | 17 +++- 5 files changed, 103 insertions(+), 9 deletions(-) diff --git a/.agents/skills/constructive-agents/SKILL.md b/.agents/skills/constructive-agents/SKILL.md index 7da7525..b80ee2c 100644 --- a/.agents/skills/constructive-agents/SKILL.md +++ b/.agents/skills/constructive-agents/SKILL.md @@ -1,6 +1,6 @@ --- name: constructive-agents -description: "AI — agent module, LLM providers, RAG pipelines, embeddings, agentic-kit multi-provider client, Search* blueprint nodes (SearchUnified, SearchVector), ProcessFileEmbedding/ProcessImageEmbedding/ProcessChunks. Use when asked to 'add AI search', 'build RAG pipeline', 'embedding worker', 'agentic-kit', 'LLM integration', 'Ollama', 'Anthropic', 'OpenAI', 'file embedding', 'image embedding', 'chunking', 'SearchUnified', 'SearchVector', 'multiplayer agents', 'shared agents', 'multi-agent', 'agent_id', or when working with AI features in blueprints." +description: "AI — agent module, LLM providers, RAG pipelines, embeddings, agentic-kit multi-provider client, graphile-llm PostGraphile plugin, agentic-server Express router, Search* blueprint nodes (SearchUnified, SearchVector), ProcessFileEmbedding/ProcessImageEmbedding/ProcessChunks. Use when asked to 'add AI search', 'build RAG pipeline', 'embedding worker', 'agentic-kit', 'graphile-llm', 'agentic-server', 'LLM integration', 'text-to-vector', 'auto-embed', 'Ollama', 'Anthropic', 'OpenAI', 'file embedding', 'image embedding', 'chunking', 'SearchUnified', 'SearchVector', 'multiplayer agents', 'shared agents', 'multi-agent', 'agent_id', or when working with AI features in blueprints." metadata: author: constructive-io version: "1.0.0" @@ -151,6 +151,89 @@ The agent module auto-registers these permissions on install: | `invoke_agents` | Granted to all members | Use agent features (threads, messages, tasks) | | `manage_agents` | Admin-only | Administer agent infrastructure | +## graphile-llm (PostGraphile LLM Plugin) + +Server-side LLM integration for PostGraphile v5 — moves embedding logic from the client into the Graphile server layer so clients work with text/prompts instead of raw float vectors. + +### Preset + +```typescript +import { GraphileLlmPreset } from 'graphile-llm'; + +const preset = { + extends: [ + ConstructivePreset, + GraphileLlmPreset({ + defaultEmbedder: { provider: 'ollama', model: 'nomic-embed-text' }, + defaultChatCompleter: { provider: 'ollama', model: 'llama3' }, + enableRag: true, + metering: true, // opt-in billing integration + }), + ], +}; +``` + +### Plugins + +| Plugin | Purpose | +|--------|---------| +| `LlmModulePlugin` | Resolves embedder + chat completer from `llm_module` config, env vars, or preset options | +| `LlmTextSearchPlugin` | Adds `text: String` field to `VectorNearbyInput` — auto-embeds text queries for pgvector search | +| `LlmTextMutationPlugin` | Adds `{column}Text: String` companion fields on mutation inputs — auto-embeds on write | +| `LlmRagPlugin` | Discovers `@hasChunks` tables, adds `ragQuery` field for retrieval-augmented generation | +| `LlmMeteringPlugin` | Opt-in billing: quota checks + usage recording per embedding/chat call via billing module | + +### Key: text-to-vector in unifiedSearch + +`LlmTextSearchPlugin` enables pgvector to participate in `unifiedSearch` by intercepting the text input, calling the configured embedder to convert it to a vector, then passing that vector to the pgvector adapter. Without graphile-llm, pgvector requires a raw vector array and is excluded from `unifiedSearch` text fan-out. + +### Embedder Resolution (priority order) + +1. Per-database `llm_module` row in `services_public.api_modules` +2. Environment variables (`EMBEDDER_PROVIDER`, `EMBEDDER_MODEL`, `EMBEDDER_BASE_URL`) +3. Preset options (`defaultEmbedder`) + +### Providers + +| Provider | Embeddings | Chat | Package | +|----------|-----------|------|---------| +| Ollama | `nomic-embed-text`, etc. | `llama3`, etc. | built-in | +| OpenAI | `text-embedding-3-small`, etc. | `gpt-4o`, etc. | built-in | +| Custom | any | any | bring your own function | + +## agentic-server (Standalone Express LLM Service) + +Express-only equivalent of `graphile-llm` — provides agent threads, chat streaming, billing metering, and inference logging as a standalone Express router. Uses `@constructive-io/express-context` for tenant-scoped database access. + +```typescript +import express from 'express'; +import { createContextMiddleware } from '@constructive-io/express-context'; +import { createAgenticRouter } from 'agentic-server'; + +const app = express(); +app.use(createContextMiddleware()); +app.use(createAgenticRouter()); +app.listen(3001); +``` + +### Endpoints + +| Method | Path | Description | +|--------|------|-------------| +| POST | `/v1/threads` | Create a new conversation thread | +| POST | `/v1/threads/:thread_id/messages` | Send messages + get AI response (streaming SSE) | +| POST | `/v1/orgs/:entity_id/threads` | Create thread (entity-scoped) | +| POST | `/v1/orgs/:entity_id/threads/:thread_id/messages` | Send message (entity-scoped) | +| POST | `/v1/embed` | Generate embeddings | + +### When to use which + +| Scenario | Use | +|----------|-----| +| PostGraphile app (GraphQL API) | `graphile-llm` — runs as PostGraphile plugins, shares the GraphQL schema | +| Standalone Express service / cloud function | `agentic-server` — independent router, no PostGraphile dependency | +| Client-side LLM calls | `agentic-kit` — direct provider SDK (Ollama, Anthropic, OpenAI) | + ## References | File | Content | diff --git a/.agents/skills/constructive-blueprints/references/blueprint-definition-format.md b/.agents/skills/constructive-blueprints/references/blueprint-definition-format.md index 9e023d6..22d2e61 100644 --- a/.agents/skills/constructive-blueprints/references/blueprint-definition-format.md +++ b/.agents/skills/constructive-blueprints/references/blueprint-definition-format.md @@ -402,7 +402,7 @@ See [realtime-subscriptions.md](./realtime-subscriptions.md) for the full guide | `SearchUnified` | Orchestrates BM25 + trigram + FTS + composite field in one declaration | `source_fields` (optional, creates DataCompositeField first), `bm25` (sub-config), `trgm` (sub-config), `fts` (sub-config), `boost_recency` (optional `{"field": "updated_at"}`) | | `SearchVector` | `vector(N)` column + HNSW/IVFFlat index + stale tracking + job enqueue | `field_name` (default `'embedding'`), `dimensions` (default `768`), `index_method` (`'hnsw'`\|`'ivfflat'`), `metric` (`'cosine'`\|`'l2'`\|`'ip'`), `include_updated_at` (default `true`), `enqueue_job` (default `true`), `job_task_name` (default `'generate_embedding'`), `source_fields` (optional), `index_options` (optional), `chunks_config` (optional: `content_field_name`, `chunk_size`, `chunk_overlap`, `chunk_strategy`, `enqueue_chunking_job`, `chunking_task_name`) — see [`constructive-agents`](../../constructive-agents/SKILL.md) | | `SearchFullText` | `tsvector` column + GIN index + auto-update trigger | `field_name` (default `'search'`), `source_fields` (array of `{"field", "weight", "lang"}`), `lang_column` (optional — column name containing a `regconfig` value for dynamic per-row language stemming, e.g. `'lang_code'`), `search_score_weight` (default `1.0`) | -| `SearchBm25` | BM25 (pg_search/ParadeDB) index on existing text field | `field_name` (required — must already exist), `text_config` (default `'english'`), `search_score_weight` (default `1.0`), `k1` (optional BM25 tuning), `b` (optional BM25 tuning) | +| `SearchBm25` | BM25 (pg_textsearch) index on existing text field | `field_name` (required — must already exist), `text_config` (default `'english'`), `search_score_weight` (default `1.0`), `k1` (optional BM25 tuning), `b` (optional BM25 tuning) | | `SearchTrgm` | GIN trigram indexes on existing fields | `fields` (required, array of field names — must already exist). Sets `@trgmSearch` smart tag | | `SearchSpatial` | PostGIS `geometry`/`geography` column + GiST index | `field_name` (default `'geom'`), `geometry_type` (default `'Point'`), `srid` (default `4326`), `dimension` (default `2`), `use_geography` (default `false`), `index_method` (`'gist'`\|`'spgist'`) | | `SearchSpatialAggregate` | Materialized aggregate geometry on parent table + auto-update triggers | `field_name` (default `'geom_aggregate'`), `source_table_id` (required), `source_geom_field` (default `'geom'`), `source_fk_field` (optional), `aggregate_function` (default `'union'` — also `'collect'`, `'convex_hull'`, `'concave_hull'`), `geometry_type` (default `'MultiPolygon'`), `srid`, `dimension`, `use_geography`, `index_method` | diff --git a/.agents/skills/constructive-features/SKILL.md b/.agents/skills/constructive-features/SKILL.md index 664c3e5..c0cf356 100644 --- a/.agents/skills/constructive-features/SKILL.md +++ b/.agents/skills/constructive-features/SKILL.md @@ -140,7 +140,7 @@ When a feature is gated by a module, installing / omitting the module from a pre |---|---|---|---| | SearchUnified (orchestrated multi-algorithm) | `SearchUnified` blueprint node | — | [`constructive-agents`](../constructive-agents/SKILL.md) + [`constructive-search`](../constructive-search/SKILL.md) | | SearchFullText (tsvector + GIN) | `SearchFullText` blueprint node | — | [`constructive-platform`](../constructive-blueprints/references/blueprint-definition-format.md) | -| SearchBm25 (ParadeDB / pg_search) | `SearchBm25` blueprint node | — | [`constructive-platform`](../constructive-blueprints/references/blueprint-definition-format.md) | +| SearchBm25 (pg_textsearch) | `SearchBm25` blueprint node | — | [`constructive-platform`](../constructive-blueprints/references/blueprint-definition-format.md) | | SearchTrgm (trigram fuzzy) | `SearchTrgm` blueprint node | — | [`constructive-platform`](../constructive-blueprints/references/blueprint-definition-format.md) | | SearchVector (pgvector embeddings) | `SearchVector` blueprint node | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | SearchSpatial (PostGIS geometry) | `SearchSpatial` blueprint node | — | [`constructive-platform`](../constructive-blueprints/references/blueprint-definition-format.md) | @@ -155,6 +155,8 @@ When a feature is gated by a module, installing / omitting the module from a pre | Embedding stale tracking + job enqueue | `SearchVector` `include_updated_at` + `enqueue_job` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Chunk tables (long text splitting) | `SearchVector` `chunks_config` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Embedding worker pipeline | Graphile Worker + `generate_embedding` task | — | [`constructive-agents`](../constructive-agents/SKILL.md) | +| graphile-llm (server-side text→vector, RAG, metering) | `GraphileLlmPreset` in PostGraphile preset | — | [`constructive-agents`](../constructive-agents/SKILL.md) | +| agentic-server (standalone Express LLM service) | `createAgenticRouter()` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | agentic-kit LLM client (multi-provider) | `@agentic-kit/ollama`, `@agentic-kit/anthropic`, `@agentic-kit/openai` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | RAG pipelines (blueprint → embed → retrieve → generate) | app code + ORM | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Agent threads + messages | `agent_module` | `full` | [`constructive-entities`](../constructive-entities/SKILL.md) | diff --git a/.agents/skills/constructive-search/SKILL.md b/.agents/skills/constructive-search/SKILL.md index d27cb8e..85cc7db 100644 --- a/.agents/skills/constructive-search/SKILL.md +++ b/.agents/skills/constructive-search/SKILL.md @@ -25,7 +25,7 @@ Use this skill when: | Strategy | Best For | Technology | Score | |----------|----------|------------|-------| | **TSVector** | Keyword search with stemming | PostgreSQL `tsvector` + GIN | Higher = better | -| **BM25** | Relevance-ranked text search | ParadeDB `pg_search` | Higher = better | +| **BM25** | Relevance-ranked text search | `pg_textsearch` (`<@>` operator) | Higher = better | | **Trigram** | Fuzzy / typo-tolerant matching | `pg_trgm` extension | Lower = better (distance) | | **pgvector** | Semantic / embedding similarity | `pgvector` HNSW | Lower = better (distance) | | **PostGIS** | Spatial / geographic search | `postgis` extension | Lower = better (distance) | @@ -88,7 +88,7 @@ For tables needing only full-text search: Unified PostGraphile v5 search plugin that consolidates all strategies into a single adapter-based architecture. Each strategy is a `SearchAdapter`: - `TsvectorAdapter` — PostgreSQL full-text search -- `Bm25Adapter` — ParadeDB BM25 ranking +- `Bm25Adapter` — pg_textsearch BM25 ranking - `TrgmAdapter` — pg_trgm fuzzy matching - `PgvectorAdapter` — HNSW vector similarity - `PostgisAdapter` — spatial distance queries diff --git a/features.md b/features.md index dc2c83e..ee2a8b9 100644 --- a/features.md +++ b/features.md @@ -271,11 +271,11 @@ Six search strategies, from keyword matching to semantic vector similarity, unif | Strategy | Technology | Best For | |----------|------------|----------| | **Full-text (tsvector)** | PostgreSQL `tsvector` + GIN index | Keyword search with language-aware stemming | -| **BM25** | ParadeDB `pg_search` extension | Relevance-ranked full-text retrieval | +| **BM25** | `pg_textsearch` extension (BM25 scoring via `<@>` operator) | Relevance-ranked full-text retrieval | | **Trigram** | `pg_trgm` extension + GIN index | Fuzzy matching, typo tolerance, autocomplete | | **Vector (pgvector)** | `pgvector` extension + HNSW index | Semantic similarity, embeddings, RAG | | **Spatial (PostGIS)** | `postgis` extension + GiST index | Geographic proximity, geofencing, spatial containment | -| **Unified** | Composite of all above | Fan-out a single query across multiple algorithms with normalized scoring | +| **Unified** | Composite of all above | Fan-out a single query across multiple algorithms with RRF (Reciprocal Rank Fusion) scoring | ### Vector Search Details @@ -300,7 +300,7 @@ Custom PostgreSQL text search configurations are also supported. ### Unified Search -`SearchUnified` orchestrates multiple algorithms in a single declaration — embedding + BM25 + optional full-text + optional trigram. Results are normalized to a 0–1 `searchScore` and accessible via a single `unifiedSearch` filter. +`SearchUnified` orchestrates multiple algorithms in a single declaration — embedding + BM25 + optional full-text + optional trigram. Results are fused via Reciprocal Rank Fusion (RRF) — rank-based scoring that handles incompatible score scales (e.g. BM25 unbounded negatives vs tsvector [0,1]) by comparing rank positions, not raw scores. The composite `searchScore` (0–1) and `unifiedSearch` filter provide a single API for cross-algorithm search. --- @@ -328,7 +328,16 @@ Blueprint node (SearchUnified / SearchVector / ProcessFileEmbedding) | `ProcessExtraction` | Extract structured data from files | | `ProcessImageVersions` | Generate image variants (thumbnails, resized versions) | -### LLM Integration (agentic-kit) +### Server-Side LLM Integration + +Two server-side packages for embedding and chat: + +| Package | Runtime | Purpose | +|---------|---------|---------| +| `graphile-llm` | PostGraphile plugin | Server-side text→vector embedding, `text` field on `VectorNearbyInput` for auto-embed search, `{column}Text` mutation companions, RAG queries, billing metering | +| `agentic-server` | Express router | Standalone agent threads, streaming chat (SSE), embeddings, billing — same capabilities without PostGraphile | + +### LLM Client (agentic-kit) Multi-provider LLM client supporting: From 31300fdcfcd4b35d4f0388f952c9d53bac80aea3 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Fri, 12 Jun 2026 22:46:40 +0000 Subject: [PATCH 2/2] revert: remove graphile-llm + agentic-server docs (needs discussion first) --- .agents/skills/constructive-agents/SKILL.md | 85 +------------------ .agents/skills/constructive-features/SKILL.md | 2 - features.md | 11 +-- 3 files changed, 2 insertions(+), 96 deletions(-) diff --git a/.agents/skills/constructive-agents/SKILL.md b/.agents/skills/constructive-agents/SKILL.md index b80ee2c..7da7525 100644 --- a/.agents/skills/constructive-agents/SKILL.md +++ b/.agents/skills/constructive-agents/SKILL.md @@ -1,6 +1,6 @@ --- name: constructive-agents -description: "AI — agent module, LLM providers, RAG pipelines, embeddings, agentic-kit multi-provider client, graphile-llm PostGraphile plugin, agentic-server Express router, Search* blueprint nodes (SearchUnified, SearchVector), ProcessFileEmbedding/ProcessImageEmbedding/ProcessChunks. Use when asked to 'add AI search', 'build RAG pipeline', 'embedding worker', 'agentic-kit', 'graphile-llm', 'agentic-server', 'LLM integration', 'text-to-vector', 'auto-embed', 'Ollama', 'Anthropic', 'OpenAI', 'file embedding', 'image embedding', 'chunking', 'SearchUnified', 'SearchVector', 'multiplayer agents', 'shared agents', 'multi-agent', 'agent_id', or when working with AI features in blueprints." +description: "AI — agent module, LLM providers, RAG pipelines, embeddings, agentic-kit multi-provider client, Search* blueprint nodes (SearchUnified, SearchVector), ProcessFileEmbedding/ProcessImageEmbedding/ProcessChunks. Use when asked to 'add AI search', 'build RAG pipeline', 'embedding worker', 'agentic-kit', 'LLM integration', 'Ollama', 'Anthropic', 'OpenAI', 'file embedding', 'image embedding', 'chunking', 'SearchUnified', 'SearchVector', 'multiplayer agents', 'shared agents', 'multi-agent', 'agent_id', or when working with AI features in blueprints." metadata: author: constructive-io version: "1.0.0" @@ -151,89 +151,6 @@ The agent module auto-registers these permissions on install: | `invoke_agents` | Granted to all members | Use agent features (threads, messages, tasks) | | `manage_agents` | Admin-only | Administer agent infrastructure | -## graphile-llm (PostGraphile LLM Plugin) - -Server-side LLM integration for PostGraphile v5 — moves embedding logic from the client into the Graphile server layer so clients work with text/prompts instead of raw float vectors. - -### Preset - -```typescript -import { GraphileLlmPreset } from 'graphile-llm'; - -const preset = { - extends: [ - ConstructivePreset, - GraphileLlmPreset({ - defaultEmbedder: { provider: 'ollama', model: 'nomic-embed-text' }, - defaultChatCompleter: { provider: 'ollama', model: 'llama3' }, - enableRag: true, - metering: true, // opt-in billing integration - }), - ], -}; -``` - -### Plugins - -| Plugin | Purpose | -|--------|---------| -| `LlmModulePlugin` | Resolves embedder + chat completer from `llm_module` config, env vars, or preset options | -| `LlmTextSearchPlugin` | Adds `text: String` field to `VectorNearbyInput` — auto-embeds text queries for pgvector search | -| `LlmTextMutationPlugin` | Adds `{column}Text: String` companion fields on mutation inputs — auto-embeds on write | -| `LlmRagPlugin` | Discovers `@hasChunks` tables, adds `ragQuery` field for retrieval-augmented generation | -| `LlmMeteringPlugin` | Opt-in billing: quota checks + usage recording per embedding/chat call via billing module | - -### Key: text-to-vector in unifiedSearch - -`LlmTextSearchPlugin` enables pgvector to participate in `unifiedSearch` by intercepting the text input, calling the configured embedder to convert it to a vector, then passing that vector to the pgvector adapter. Without graphile-llm, pgvector requires a raw vector array and is excluded from `unifiedSearch` text fan-out. - -### Embedder Resolution (priority order) - -1. Per-database `llm_module` row in `services_public.api_modules` -2. Environment variables (`EMBEDDER_PROVIDER`, `EMBEDDER_MODEL`, `EMBEDDER_BASE_URL`) -3. Preset options (`defaultEmbedder`) - -### Providers - -| Provider | Embeddings | Chat | Package | -|----------|-----------|------|---------| -| Ollama | `nomic-embed-text`, etc. | `llama3`, etc. | built-in | -| OpenAI | `text-embedding-3-small`, etc. | `gpt-4o`, etc. | built-in | -| Custom | any | any | bring your own function | - -## agentic-server (Standalone Express LLM Service) - -Express-only equivalent of `graphile-llm` — provides agent threads, chat streaming, billing metering, and inference logging as a standalone Express router. Uses `@constructive-io/express-context` for tenant-scoped database access. - -```typescript -import express from 'express'; -import { createContextMiddleware } from '@constructive-io/express-context'; -import { createAgenticRouter } from 'agentic-server'; - -const app = express(); -app.use(createContextMiddleware()); -app.use(createAgenticRouter()); -app.listen(3001); -``` - -### Endpoints - -| Method | Path | Description | -|--------|------|-------------| -| POST | `/v1/threads` | Create a new conversation thread | -| POST | `/v1/threads/:thread_id/messages` | Send messages + get AI response (streaming SSE) | -| POST | `/v1/orgs/:entity_id/threads` | Create thread (entity-scoped) | -| POST | `/v1/orgs/:entity_id/threads/:thread_id/messages` | Send message (entity-scoped) | -| POST | `/v1/embed` | Generate embeddings | - -### When to use which - -| Scenario | Use | -|----------|-----| -| PostGraphile app (GraphQL API) | `graphile-llm` — runs as PostGraphile plugins, shares the GraphQL schema | -| Standalone Express service / cloud function | `agentic-server` — independent router, no PostGraphile dependency | -| Client-side LLM calls | `agentic-kit` — direct provider SDK (Ollama, Anthropic, OpenAI) | - ## References | File | Content | diff --git a/.agents/skills/constructive-features/SKILL.md b/.agents/skills/constructive-features/SKILL.md index c0cf356..69a3db0 100644 --- a/.agents/skills/constructive-features/SKILL.md +++ b/.agents/skills/constructive-features/SKILL.md @@ -155,8 +155,6 @@ When a feature is gated by a module, installing / omitting the module from a pre | Embedding stale tracking + job enqueue | `SearchVector` `include_updated_at` + `enqueue_job` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Chunk tables (long text splitting) | `SearchVector` `chunks_config` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Embedding worker pipeline | Graphile Worker + `generate_embedding` task | — | [`constructive-agents`](../constructive-agents/SKILL.md) | -| graphile-llm (server-side text→vector, RAG, metering) | `GraphileLlmPreset` in PostGraphile preset | — | [`constructive-agents`](../constructive-agents/SKILL.md) | -| agentic-server (standalone Express LLM service) | `createAgenticRouter()` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | agentic-kit LLM client (multi-provider) | `@agentic-kit/ollama`, `@agentic-kit/anthropic`, `@agentic-kit/openai` | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | RAG pipelines (blueprint → embed → retrieve → generate) | app code + ORM | — | [`constructive-agents`](../constructive-agents/SKILL.md) | | Agent threads + messages | `agent_module` | `full` | [`constructive-entities`](../constructive-entities/SKILL.md) | diff --git a/features.md b/features.md index ee2a8b9..cccbdbe 100644 --- a/features.md +++ b/features.md @@ -328,16 +328,7 @@ Blueprint node (SearchUnified / SearchVector / ProcessFileEmbedding) | `ProcessExtraction` | Extract structured data from files | | `ProcessImageVersions` | Generate image variants (thumbnails, resized versions) | -### Server-Side LLM Integration - -Two server-side packages for embedding and chat: - -| Package | Runtime | Purpose | -|---------|---------|---------| -| `graphile-llm` | PostGraphile plugin | Server-side text→vector embedding, `text` field on `VectorNearbyInput` for auto-embed search, `{column}Text` mutation companions, RAG queries, billing metering | -| `agentic-server` | Express router | Standalone agent threads, streaming chat (SSE), embeddings, billing — same capabilities without PostGraphile | - -### LLM Client (agentic-kit) +### LLM Integration (agentic-kit) Multi-provider LLM client supporting: