diff --git a/.gitignore b/.gitignore index 76c509f2..209eb5dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,17 @@ .DS_Store .vscode -catalog-v001.xml \ No newline at end of file +catalog-v001.xml + +# Python virtual environments +.venv/ +venv/ +.venv-mcp/ +embeddings/MCP/.venv-mcp/ + +# Python caches / build artifacts +__pycache__/ +*.pyc +*.egg-info/ + +# Docker runtime data (Milvus bind mounts — rebuildable, see embeddings/docker/MILVUS.md §7) +embeddings/docker/volumes/ \ No newline at end of file diff --git a/embeddings/.dockerignore b/embeddings/.dockerignore new file mode 100644 index 00000000..bcfd52cd --- /dev/null +++ b/embeddings/.dockerignore @@ -0,0 +1,18 @@ +# Build context for embeddings/MCP/Dockerfile is this folder (embeddings/). +# The Dockerfile only COPYs poem_core/, MCP/, pyproject.toml, MAIN.md, and the +# three corpus section folders under Pipeline/ -- everything below is excluded +# to keep the build-context upload small. Not itself the correctness boundary +# (the Dockerfile's explicit COPY list is), just a size/speed optimization. + +MCP/.venv-mcp/ +**/__pycache__/ +**/*.pyc +**/*.pyo +.pytest_cache/ +*.egg-info/ +docker/volumes/ +Pipeline/cli_query_results/ +Pipeline/evaluation_results/ +Pipeline/test_results.txt +manuals/ +presentation/ diff --git a/embeddings/API/API.md b/embeddings/API/API.md new file mode 100644 index 00000000..0eee2374 --- /dev/null +++ b/embeddings/API/API.md @@ -0,0 +1,109 @@ +# POEM Semantic Search — REST API + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a concise API quick-start and health checks. + +A **FastAPI** HTTP/JSON layer over the POEM search engine. It's a third serving +surface alongside the CLI ([`Pipeline/search_similarity.py`](../Pipeline/search_similarity.py)) +and the MCP server ([`MCP/mcp_server.py`](../MCP/mcp_server.py)), reusing the **exact +same** engine — `poem_core` (embedding client, metrics, corpus loader, dedup, and +the Milvus/numpy vector store) plus the RDF enrichment in +[`MCP/graph_lookup.py`](../MCP/graph_lookup.py). + +This is the **"Milvus as an API from Python"** surface: the same `get_store()` that +talks to Milvus (or numpy) backs `/search` here, exposed as ordinary HTTP so any +client — curl, a browser, another service — can query without speaking MCP. + +> **Web UI for free:** FastAPI serves an interactive **Swagger UI at `/docs`** +> (and ReDoc at `/redoc`). That *is* the "web interface to try the query +> functions" — open it, hit **Try it out**, fill parameters, and see the JSON. + +--- + +## Endpoints + +| Method | Path | Purpose | +|---|---|---| +| `GET` | `/health` | Backend, corpus size, sections, metrics, embedding endpoint | +| `GET` | `/sections` | Available section names | +| `GET` | `/metrics` | Available similarity-metric names | +| `POST` | `/search` | Body `{query, top_k, section, metric}` → ranked hits | +| `GET` | `/search` | Same via query params (browser-friendly) | +| `GET` | `/statements/{entity_id}` | An entity's immediate graph relationships | +| `GET` | `/docs` · `/redoc` | Interactive API UI (Swagger / ReDoc) | + +A `/search` hit is the same shape the MCP `search` tool returns: +`id, label, section, score, type, description, aliases, snippet`. +`/statements` returns `{property, value, value_id}` triples. + +## Run it + +Use the MCP venv (Python 3.12) — it already has FastAPI + uvicorn + the search stack: + +```powershell +# Direct (from the repo root) +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\API\api_server.py + +# Or with autoreload (dev) +embeddings\MCP\.venv-mcp\Scripts\python.exe -m uvicorn api_server:app ` + --app-dir embeddings\API --reload +``` + +Then open **http://localhost:8000/docs**. (Change the port with `API_PORT`.) + +Fresh env instead? `pip install -r embeddings/API/requirements-api.txt` +(add `--trusted-host pypi.org --trusted-host files.pythonhosted.org` behind an +SSL-intercepting network). + +## Configuration (env vars, read live) + +| Var | Default | Purpose | +|---|---|---| +| `EMBED_BASE_URL` | `http://idea-llm-01.idea.rpi.edu:11435/v1` | OpenAI-compatible embedding endpoint (used by `/search`) | +| `EMBED_MODEL` | `qwen3-embedding` | Embedding model — **must match the model that built the stored vectors** (see caveat) | +| `VECTOR_BACKEND` | `milvus` | `milvus` (external server) or `numpy` (in-process) | +| `MILVUS_URI` / `MILVUS_TOKEN` | `http://localhost:19530` / — | Milvus server, when `VECTOR_BACKEND=milvus` | +| `API_PORT` | `8000` | HTTP port | + +> **Embedding-model compatibility.** The stored corpus is **4096-dim +> `qwen3-embedding`**. `/search` embeds the *query* with `EMBED_MODEL` and compares +> it to those vectors, so `EMBED_MODEL` must be the **same model** (same dimension). +> Pointing it at a different embedder (e.g. `nomic-embed-text`, 768-dim) makes +> `/search` fail or return nonsense. See [../docker/MILVUS.md](../docker/MILVUS.md) +> and [../MCP/LM_STUDIO.md](../MCP/LM_STUDIO.md). + +## Examples + +```bash +# Health / discovery (work offline; no embedding endpoint needed) +curl http://localhost:8000/health +curl http://localhost:8000/sections + +# Search (needs a reachable embedding endpoint) +curl "http://localhost:8000/search?query=anxiety%20in%20children&top_k=3§ion=instruments" + +curl -X POST http://localhost:8000/search \ + -H "Content-Type: application/json" \ + -d '{"query":"caregiver report of depression","top_k":3,"section":"instruments"}' + +# Describe a hit from the graph (offline) +curl http://localhost:8000/statements/RCADS-25-CG-EN +``` + +## Behavior notes + +- **Startup** loads the `.npy` corpus, the RDF graph, and builds the vector store + **once** (like the MCP server). First request is fast thereafter. +- `/health`, `/sections`, `/metrics`, `/statements` work **offline**. `/search` + needs the embedding endpoint; if it's unreachable the response is a clean + **503** telling you to fix `EMBED_BASE_URL`/`EMBED_MODEL`. +- Bad `metric`/`section`/`top_k` → **422** with the valid choices; unknown id on + `/statements` → **404**. +- With `VECTOR_BACKEND=milvus` and no server reachable, the store logs a warning + and falls back to numpy (see [../docker/MILVUS.md](../docker/MILVUS.md)). + +> **Verified** (2026-07-06, `.venv-mcp` Python 3.12, `VECTOR_BACKEND=numpy`, via +> FastAPI `TestClient`): `/health`, `/sections`, `/metrics` → 200; `/statements` +> resolves 40 relationships for `RCADS-25-CG-EN` and 404s an unknown id; `/search` +> (embed monkeypatched to a stored vector) returns ranked hits with `GAD-7` #1 at +> score 1.0; invalid metric → 422. Live `/search` against the real embedding +> endpoint needs the RPI network. diff --git a/embeddings/API/api_server.py b/embeddings/API/api_server.py new file mode 100644 index 00000000..10d1b125 --- /dev/null +++ b/embeddings/API/api_server.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python3 +"""FastAPI REST API exposing POEM semantic search over plain HTTP/JSON. + +A third serving layer alongside the CLI (``Pipeline/search_similarity.py``) and +the MCP server (``MCP/mcp_server.py``). It reuses the exact same building blocks — +the shared ``poem_core`` package (embedding client, similarity metrics, corpus +loader, dedup, and the pluggable vector store) plus the RDF enrichment in +``MCP/graph_lookup.py`` — and exposes them as ordinary HTTP endpoints so any +client (curl, a browser, another service) can query without speaking MCP. + +This is the "Milvus as an API from Python" surface: the same `get_store()` that +talks to Milvus (or numpy) backs ``/search`` here. + +Run it (from the MCP venv, which has fastapi/uvicorn + the poem_core deps): + + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe o:\\POEM\\embeddings\\API\\api_server.py + +or with autoreload for development: + + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m uvicorn api_server:app \\ + --app-dir o:\\POEM\\embeddings\\API --reload + +Then open the interactive web UI (Swagger) at http://localhost:8000/docs +(ReDoc at /redoc). Endpoints: + + GET /health backend / corpus / embedding-endpoint status + GET /sections available section names + GET /metrics available similarity-metric names + POST /search body {query, top_k, section, metric} -> ranked hits + GET /search same via query params (browser-friendly) + GET /statements/{id} an entity's immediate graph relationships + +Configuration is identical to the rest of the stack (env vars, read live): + EMBED_BASE_URL / EMBED_MODEL the OpenAI-compatible embedding endpoint + VECTOR_BACKEND 'milvus' (default) or 'numpy' + MILVUS_URI / MILVUS_TOKEN the Milvus server, when VECTOR_BACKEND=milvus + API_PORT HTTP port (default 8000) + +Requires Python >= 3.10. +""" +from __future__ import annotations + +import os +import sys +from typing import Optional +from contextlib import redirect_stdout + +# poem_core lives at embeddings/ (one level up from API/); graph_lookup lives in +# the sibling MCP/ folder. Add both so imports resolve when run from anywhere. +# (graph_lookup is POEM-specific RDF enrichment shared with the MCP server; it is +# imported from MCP/ rather than duplicated here.) +_HERE = os.path.dirname(os.path.abspath(__file__)) +_EMB_ROOT = os.path.dirname(_HERE) +_MCP_DIR = os.path.join(_EMB_ROOT, "MCP") +for _p in (_EMB_ROOT, _MCP_DIR): + if _p not in sys.path: + sys.path.insert(0, _p) + +from fastapi import FastAPI, HTTPException, Query +from pydantic import BaseModel, Field + +from poem_core.metrics import METRICS +from poem_core.corpus import SECTIONS, load_embeddings +from poem_core.embedding_client import embed_query +from poem_core.dedup import get_unique_top_results +from poem_core.vector_store import get_store +from poem_core import config +import graph_lookup + +# Keep descriptions lean in API payloads (same cap the MCP tool uses). +_DESC_MAX = 300 + +# --- Load corpus, graph, and vector store once at startup ------------------- +# load_embeddings() and the graph loader print progress; redirect to stderr so +# server logs stay clean and structured. +with redirect_stdout(sys.stderr): + _EMB, _TEXTS, _SECS = load_embeddings() + graph_lookup.ensure_loaded() + _STORE = get_store(_EMB, _TEXTS, _SECS) + _BACKEND = type(_STORE).__name__ + print(f"[api_server] {len(_TEXTS)} paragraphs from {SECTIONS}; " + f"backend={_BACKEND}; embed={config.EMBED_MODEL} " + f"@ {config.EMBED_BASE_URL}", file=sys.stderr) + + +# --- Schemas ---------------------------------------------------------------- +class SearchResult(BaseModel): + id: str + label: str + section: str + score: float + type: Optional[str] = None + description: Optional[str] = None + aliases: list[str] = [] + snippet: str + + +class SearchRequest(BaseModel): + query: str = Field(..., description="Natural-language search text (topic, symptom, or item wording).") + top_k: int = Field(5, ge=1, description="Number of unique entities to return.") + section: Optional[str] = Field(None, description=f"Restrict to one of {SECTIONS}; omit to search all.") + metric: str = Field("Cosine Similarity", description=f"Similarity metric; one of {list(METRICS)}.") + + +class Statement(BaseModel): + property: str + value: str + value_id: Optional[str] = None + + +app = FastAPI( + title="POEM Semantic Search API", + version="1.0.0", + description=( + "HTTP/JSON access to POEM instrument/scale/collection semantic search — the " + "same engine (poem_core + Milvus/numpy vector store) behind the CLI and the " + "MCP server. Use the **Try it out** buttons below to query live." + ), +) + + +def _run_search(query: str, top_k: int, section: Optional[str], metric: str) -> list[SearchResult]: + """Shared orchestration for both /search verbs — mirrors MCP `search`.""" + if metric not in METRICS: + raise HTTPException(422, f"Unknown metric {metric!r}. Choose one of: {list(METRICS)}") + if section is not None and section not in SECTIONS: + raise HTTPException(422, f"Unknown section {section!r}. Choose one of: {SECTIONS}") + if top_k < 1: + raise HTTPException(422, "top_k must be >= 1") + + try: + query_vec = embed_query(query) + except Exception as e: # embedding endpoint down / off-network + raise HTTPException( + 503, + f"Embedding endpoint unavailable ({type(e).__name__}: {e}). " + f"Point EMBED_BASE_URL/EMBED_MODEL at a reachable OpenAI-compatible server.", + ) + + # Widen the candidate window so dedup-by-entity still yields top_k uniques. + window = max(20, top_k * 4) + scores, txt, sec = _STORE.top_candidates(query_vec, metric, section, k=window) + raw = get_unique_top_results(scores, txt, sec, top_k_search=window, top_k_unique=top_k) + + results: list[SearchResult] = [] + for r in raw: + info = graph_lookup.resolve_entity_rich(r["entity"], r["section"]) + desc = info["description"] + if desc and len(desc) > _DESC_MAX: + desc = desc[:_DESC_MAX - 1].rstrip() + "…" + results.append(SearchResult( + id=info["id"], label=info["label"], section=r["section"], score=float(r["score"]), + type=info["type"], description=desc, aliases=info["aliases"], snippet=r["preview"], + )) + return results + + +@app.get("/health", summary="Service + backend status") +def health() -> dict: + return { + "status": "ok", + "vector_backend": _BACKEND, + "num_vectors": int(len(_TEXTS)), + "sections": SECTIONS, + "metrics": list(METRICS), + "embed_model": config.EMBED_MODEL, + "embed_base_url": config.EMBED_BASE_URL, + } + + +@app.get("/sections", summary="Available section names") +def sections() -> dict: + return {"sections": SECTIONS} + + +@app.get("/metrics", summary="Available similarity metrics") +def metric_names() -> dict: + return {"metrics": list(METRICS)} + + +@app.post("/search", response_model=list[SearchResult], summary="Semantic search (JSON body)") +def search_post(req: SearchRequest) -> list[SearchResult]: + return _run_search(req.query, req.top_k, req.section, req.metric) + + +@app.get("/search", response_model=list[SearchResult], summary="Semantic search (query params)") +def search_get( + query: str = Query(..., description="Natural-language search text."), + top_k: int = Query(5, ge=1, description="Number of unique entities to return."), + section: Optional[str] = Query(None, description=f"Restrict to one of {SECTIONS}."), + metric: str = Query("Cosine Similarity", description=f"One of {list(METRICS)}."), +) -> list[SearchResult]: + return _run_search(query, top_k, section, metric) + + +@app.get("/statements/{entity_id}", response_model=list[Statement], summary="An entity's graph relationships") +def statements(entity_id: str) -> list[Statement]: + try: + return graph_lookup.get_statements(entity_id) + except ValueError as e: + raise HTTPException(404, str(e)) + + +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="127.0.0.1", port=int(os.environ.get("API_PORT", "8000"))) diff --git a/embeddings/API/requirements-api.txt b/embeddings/API/requirements-api.txt new file mode 100644 index 00000000..a8c935ca --- /dev/null +++ b/embeddings/API/requirements-api.txt @@ -0,0 +1,22 @@ +# POEM Semantic Search REST API (FastAPI) — dependencies. +# +# Install into a Python >=3.10 environment that also has the shared search stack. +# The MCP venv (embeddings/MCP/.venv-mcp) already satisfies everything except +# FastAPI, so in practice you only need `pip install fastapi` there. +# +# /python.exe -m pip install -r embeddings/API/requirements-api.txt +# +# Behind an SSL-intercepting network, add: +# --trusted-host pypi.org --trusted-host files.pythonhosted.org + +fastapi>=0.110.0 +uvicorn[standard]>=0.29.0 + +# Shared search stack (same as MCP/requirements-mcp.txt) — pulled in transitively +# by poem_core; listed here so this file stands alone. +numpy>=1.24.0 +openai>=1.0.0 +rdflib>=6.0.0 + +# Optional: only used when VECTOR_BACKEND=milvus (otherwise the numpy backend runs). +pymilvus>=2.4.0 diff --git a/embeddings/MAIN.md b/embeddings/MAIN.md new file mode 100644 index 00000000..56559107 --- /dev/null +++ b/embeddings/MAIN.md @@ -0,0 +1,140 @@ +# POEM Embeddings — Overview + +Quick reference: see `embeddings/manuals/DOCS_SUMMARY.md` for a single-page quick-start. + +> Commands throughout this doc and the rest of `embeddings/` assume your repo +> checkout's **root** as the working directory (paths are written relative to +> it, e.g. `embeddings\MCP\...`) — adjust for wherever your own checkout lives. + +This folder turns the POEM mental-health ontology into a **semantic search** system and exposes that search to LLMs. It is split into two halves: + +``` +embeddings/ +├── MAIN.md ← you are here (overview of both halves) +├── ROADMAP.md ← next steps: building the LLM chatbot/agent on top +├── TESTING.md ← active test runbook (how to test every layer) +├── e2e_check.py ← one-command end-to-end acceptance harness (gates 1/2/4) +├── pyproject.toml ← installs the shared core: pip install -e embeddings +│ +├── poem_core/ ← SHARED core package (imported by both halves) +│ ├── config.py paths, endpoint, backend selection (one source of truth) +│ ├── embedding_client.py the one OpenAI-compatible embedding client +│ ├── metrics.py the 4 similarity metrics + Milvus metric mapping +│ ├── corpus.py manifest IO + load_embeddings() +│ ├── entities.py entity-name / URI helpers +│ ├── dedup.py get_unique_top_results() +│ ├── graph.py load_graph() — the POEM RDF loader +│ └── vector_store.py numpy + external-Milvus backends, get_store() +│ +├── docker/ +│ ├── milvus-compose.yml ← external Milvus Standalone server (separate process) +│ ├── MILVUS.md ← Milvus integration deep-dive (architecture, schema, verify) +│ ├── check_milvus.py ← one-command live Milvus/Zilliz verification +│ └── milvus_admin.py ← upload/update/switch accounts (status · push · drop) +│ +├── Pipeline/ ← build & query the embeddings (thin layers over poem_core) +│ ├── PIPELINE_DOCS.md ← full docs for this half +│ ├── generate_text_templates.py RDF graph → text templates +│ ├── sample_embeddings.py endpoint connectivity check +│ ├── generate_embeddings.py templates → .npy embeddings +│ ├── search_similarity.py query → ranked results (CLI) +│ ├── evaluate_search.py search-quality evaluation +│ ├── test_search_similarity.py test suite +│ ├── instruments/ scales/ collections/ stored .npy embeddings + texts.npy +│ └── ... (templates, results, requirements.txt) +│ +├── MCP/ ← serve the search to any LLM as an MCP tool (chatbot backend) +│ ├── MCP.md ← full docs for this half +│ ├── LM_STUDIO.md ← run the tools from a local LLM (LM Studio) + see params/JSON +│ ├── mcp_server.py FastMCP server exposing `search` + `get_statements` (stdio) +│ ├── graph_lookup.py RDF id/label resolution + get_statements +│ ├── try_search.py quick standalone check +│ ├── requirements-mcp.txt +│ └── .venv-mcp/ dedicated Python 3.12 env (git-ignored) +│ +├── API/ ← serve the search over plain HTTP/JSON (FastAPI; Swagger at /docs) +│ ├── API.md ← full docs for this half +│ ├── api_server.py FastAPI app: /search, /statements, /health (+ /docs UI) +│ └── requirements-api.txt +│ +└── agent/ ← Phase 2 LLM agent: chat in the terminal, grounded via the tools + ├── AGENT.md ← full docs: running it, choosing the chat model, LM Studio roles + ├── chat_agent.py OpenAI-compatible chat model + tool calls → MCP server (or REST API) + └── requirements-agent.txt +``` + +--- + +## The two halves + +### `Pipeline/` — build and query the embeddings +The data pipeline and search engine. It reads the POEM RDF graph, generates natural-language templates, embeds them with the `qwen3-embedding` model on RPI's embedding server, and stores one `.npy` vector per paragraph across three sections (`instruments`, `scales`, `collections`). `search_similarity.py` then embeds a query and ranks all stored paragraphs by four similarity metrics. This half runs on **Python 3.8+** and is usable directly via CLI or by importing its functions. + +→ **Full instructions:** [Pipeline/PIPELINE_DOCS.md](Pipeline/PIPELINE_DOCS.md) + +### `MCP/` — serve the search to any LLM +A thin **Model Context Protocol** server that imports the shared `poem_core` package and exposes two tools — `search` and `get_statements`. Any MCP-capable client (an agent framework, a custom chatbot, etc.) — with any LLM behind it, fine-tuned or not — can discover and call them without knowing anything about numpy, Milvus, or the embedding server. This is the first step toward a POEM chatbot. Requires **Python ≥ 3.10** (hence its own `.venv-mcp`). + +The **embedding LLM** behind the tool is configurable in code: bring your own OpenAI-compatible endpoint, or default to the POEM server (`idea-llm-01:11435`). + +→ **Full instructions:** [MCP/MCP.md](MCP/MCP.md) + +--- + +## How they relate + +``` + ┌───────────────────── poem_core ─────────────────────┐ +RDF graph ─Pipeline─► .npy │ config · embedding client · metrics · corpus │ + │ │ loader · graph loader · dedup · │ +query ───────────────────┘ │ vector store (numpy | external Milvus, exact FLAT) │ + └───────────────┬──────────────────┬─────────────────┘ + used by │ │ used by + ▼ ▼ + Pipeline/search_similarity.py MCP/mcp_server.py + (CLI search) (`search` + `get_statements` → LLM) +``` + +Both halves import the shared **`poem_core`** package (`embeddings/poem_core/`): config, the embedding client, similarity `METRICS`, the corpus loader (`load_embeddings`), result dedup (`get_unique_top_results`), the RDF graph loader (`load_graph`), and the pluggable vector store (`get_store`). The Pipeline/MCP entry scripts are thin layers that re-export from it, so there is exactly one implementation of each concern and no cross-folder `sys.path` hacks. Install once with `pip install -e embeddings`. + +--- + +## Quick start + +**Just want to run a search from the terminal?** Use the Pipeline (on RPI network/VPN): +```bash +python embeddings/Pipeline/search_similarity.py "instruments that measure anxiety in children" +``` + +**Want an LLM to call the search?** Use the MCP server: +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\mcp_server.py +``` + +See each half's doc for prerequisites and details. + +--- + +## Shared requirements + +- **Embedding server:** both halves default to `http://idea-llm-01.idea.rpi.edu:11435/v1` (model `qwen3-embedding`), reachable only on the RPI network/VPN — this server is HTTP-only (verified). Endpoint/model/dir are configurable via `EMBED_BASE_URL`, `EMBED_MODEL`, `EMBEDDINGS_DIR` (set `https://…` for a TLS-capable endpoint). +- **The MCP server depends on the Pipeline's stored embeddings** — run the Pipeline through Step 3 (`generate_embeddings.py`) before relying on `search`. + +## What's new + +- **One canonical input folder:** `generate_text_templates.py --input` (default `poem-demo/dist/data`). +- **Generic sections:** sections beyond `instruments`/`scales`/`collections` are supported — add one with `--section NAME=poem:Class`, and search/serve auto-detect any section folder on disk. +- **Incremental embeddings:** `generate_embeddings.py --incremental` re-embeds only changed/new entities (content-hash `manifest.json` per section). +- **Richer MCP results:** `search` returns `type`/`description`/`aliases`/`snippet` alongside `id`/`label`/`section`/`score`, with an `outputSchema`. +- **Shared `poem_core` package:** config, embedding client, metrics, corpus/manifest IO, RDF graph loader, dedup, and vector store live in one place; Pipeline + MCP re-export from it (`pip install -e embeddings`). +- **External Milvus by default:** `VECTOR_BACKEND=milvus` targets a separate-process Milvus Standalone server (`embeddings/docker/milvus-compose.yml`, `http://localhost:19530`). It uses **FLAT** indexes so results are exact (identical to numpy); L1/Manhattan falls back to numpy; and if no server is reachable the store degrades to `numpy` automatically. Set `VECTOR_BACKEND=numpy` to force the in-process backend. See **[docker/MILVUS.md](docker/MILVUS.md)** for the full integration deep-dive (code map, collection schema, verification). +- **SPARQL fix:** `COLLECTION_QUERY` now follows `sio:SIO_000059` (the predicate the current data uses) for collection membership, so collection paragraphs regain their member/family/language enrichment on the next `generate_text_templates` + `generate_embeddings` run. +- **REST API (FastAPI):** `embeddings/API/` serves the same search over HTTP/JSON with an interactive Swagger UI at `/docs` — the "Milvus as an API from Python" surface (same `get_store()` backend). See [API/API.md](API/API.md). +- **Local-LLM guide:** [MCP/LM_STUDIO.md](MCP/LM_STUDIO.md) — drive the `search`/`get_statements` tools from a local model in LM Studio and watch the tool-call parameters + JSON. Embedding caveat: queries must use `qwen3-embedding` (4096-dim) to match the stored corpus. +- **Milvus deployment survey:** [docker/MILVUS.md](docker/MILVUS.md) documents the integration and the local Docker-based Standalone deployment recommended for POEM. +- **Local Milvus demo:** [docker/MILVUS_DEMO.md](docker/MILVUS_DEMO.md) explains a quick, deployable demo that shows vector search, metadata filtering, updates, and growth; [docker/milvus_demo.py](docker/milvus_demo.py) runs it locally. +- **Test runbook + Milvus checker:** [TESTING.md](TESTING.md) gives copy-paste commands to actively test every layer; [docker/check_milvus.py](docker/check_milvus.py) verifies a live local Milvus backend (selection, parity, counts, reuse) in one command. +- **LLM agent + roadmap:** [agent/chat_agent.py](agent/chat_agent.py) is a runnable terminal chatbot (local model → tool calls → grounded POEM answers) — usage, chat-model selection, and LM Studio integration in [agent/AGENT.md](agent/AGENT.md); [ROADMAP.md](ROADMAP.md) lays out the phases to grow it into the full assistant. +- **Milvus account tooling:** [docker/milvus_admin.py](docker/milvus_admin.py) — `status` / `push` / `drop` to populate a local Milvus instance, update it after data changes, or switch targets via `--uri`/`--token` or env. See [MILVUS.md §14](docker/MILVUS.md). +- **End-to-end harness:** [e2e_check.py](e2e_check.py) runs the whole-process acceptance gates (offline suites → local Milvus backend → REST surface) in one command and prints the manual steps for the CLI + agent gates. See [TESTING.md](TESTING.md) "End-to-end acceptance test". +- **MCP server is now containerizable:** [MCP/Dockerfile](MCP/Dockerfile) + [docker/mcp-compose.yml](docker/mcp-compose.yml) run the server as a network-reachable HTTP service (`MCP_TRANSPORT=http`), alongside Milvus, for deployment beyond a single local subprocess-spawning client. See [MCP/MCP.md "Container deployment"](MCP/MCP.md#container-deployment). diff --git a/embeddings/MCP/Dockerfile b/embeddings/MCP/Dockerfile new file mode 100644 index 00000000..4aa029df --- /dev/null +++ b/embeddings/MCP/Dockerfile @@ -0,0 +1,72 @@ +# Build context MUST be embeddings/ (not this MCP/ folder, not the repo root): +# docker build -f embeddings/MCP/Dockerfile -t poem-mcp:latest embeddings +# (embeddings/docker/mcp-compose.yml sets this automatically.) +# +# Ships the MCP server + the shared poem_core package + the versioned corpus +# (.npy vectors under Pipeline/{instruments,scales,collections}). The POEM RDF +# graph (individualsFull.ttl, ontology/, POEM.rdf, poem-demo/dist/data/) lives +# one level above embeddings/ in the repo and is intentionally NOT baked into +# this image -- Docker can't COPY across the build-context boundary, and the +# graph is refreshed independently of the code/corpus. Bind-mount the repo +# root read-only at runtime instead and point POEM_PROJECT_ROOT at it: +# docker run -v :/data/repo:ro -e POEM_PROJECT_ROOT=/data/repo ... +# See MCP.md "Container deployment" for the full explanation and the compose +# file that wires this up automatically. +FROM python:3.12-slim + +WORKDIR /app + +# Only what's actually needed at runtime -- see .dockerignore for the rest. +COPY pyproject.toml MAIN.md ./ +COPY poem_core ./poem_core +COPY MCP ./MCP +COPY Pipeline/instruments ./Pipeline/instruments +COPY Pipeline/scales ./Pipeline/scales +COPY Pipeline/collections ./Pipeline/collections + +# This project's network intercepts TLS to pypi.org, which breaks plain pip +# installs with CERTIFICATE_VERIFY_FAILED (the same issue documented in +# MCP.md's setup instructions). --trusted-host works around it for the build +# only; override to an empty string with --build-arg on a network that +# doesn't need it: +# docker build --build-arg PIP_TRUSTED_HOST_FLAGS= ... +ARG PIP_TRUSTED_HOST_FLAGS="--trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org" + +# python:3.12-slim ships neither setuptools nor wheel; install them first, +# then install this package with --no-build-isolation so pip doesn't also try +# to fetch its own private copy into an ephemeral build env (which would hit +# the same certificate issue a second time, in a context these trusted-host +# flags don't reach). +RUN pip install --no-cache-dir $PIP_TRUSTED_HOST_FLAGS "setuptools>=61" wheel +RUN pip install --no-cache-dir --no-build-isolation $PIP_TRUSTED_HOST_FLAGS -e ".[mcp,milvus]" + +# Container default is http -- stdio needs a parent process spawning and +# talking to this over stdin/stdout, which doesn't apply to a detached / +# orchestrated container. MILVUS_SKIP_ENSURE=1: this image never manages a +# host Docker daemon (docker_preflight's self-heal is a bare-metal/dev-machine +# feature); an unreachable Milvus just falls back to numpy, same as today. +# GRPC_EXPERIMENTAL_ENABLE_HAPPY_EYEBALLS=false works around a real, reproduced +# hang: pymilvus's gRPC channel construction against a Docker Compose service +# hostname (e.g. MILVUS_URI=http://milvus-standalone:19530) can hang +# indefinitely even though plain TCP/HTTP to the same hostname succeeds +# instantly and connecting by raw container IP works fine -- a gRPC +# happy-eyeballs resolver quirk against Docker's embedded DNS, not a wiring +# problem in this image or docker/mcp-compose.yml. Harmless if MILVUS_URI +# targets a real DNS name (Zilliz Cloud, etc.) instead of a compose hostname. +ENV MCP_TRANSPORT=http \ + MCP_HOST=0.0.0.0 \ + MCP_PORT=8100 \ + MILVUS_SKIP_ENSURE=1 \ + GRPC_EXPERIMENTAL_ENABLE_HAPPY_EYEBALLS=false \ + PYTHONUNBUFFERED=1 + +EXPOSE 8100 + +# Assumes MCP_TRANSPORT=http (the default above); running this image with +# MCP_TRANSPORT=stdio has no HTTP surface to probe and will report unhealthy +# -- that mode only makes sense for a client that spawns `docker run -i` +# itself, which is not the deployment shape this image targets. +HEALTHCHECK --interval=30s --timeout=5s --start-period=45s --retries=3 \ + CMD python -c "import os, urllib.request as u; u.urlopen('http://127.0.0.1:' + os.environ.get('MCP_PORT', '8100') + '/health', timeout=3)" || exit 1 + +ENTRYPOINT ["python", "MCP/mcp_server.py"] diff --git a/embeddings/MCP/LM_STUDIO.md b/embeddings/MCP/LM_STUDIO.md new file mode 100644 index 00000000..307a0ef2 --- /dev/null +++ b/embeddings/MCP/LM_STUDIO.md @@ -0,0 +1,195 @@ +# Trying the POEM MCP Server with LM Studio + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a compact quick-start and troubleshooting tips. + +Run the POEM `search` / `get_statements` tools from a **local** LLM and watch the +tool calls (parameters in, JSON out) — no cloud, no API keys. + +**Why LM Studio:** it is both a local model runner *and* an **MCP host** (v0.3.17+), +so one app runs your chat model **and** lets it call this server's tools. (Ollama, +by contrast, runs models but is not an MCP host — see [§ Ollama](#ollama-as-the-embedding-provider).) + +--- + +## ⚠️ Read first: the embedding-model must match + +The `search` tool embeds your **query** and compares it to the **stored corpus +vectors**, which were built with **`qwen3-embedding` (4096-dim)**. So the query +**must be embedded by the same model**. Consequences: + +- ✅ **Keep `search`'s embedding on `qwen3-embedding`** — either the RPI endpoint + (`http://idea-llm-01.idea.rpi.edu:11435/v1`, needs VPN) or a **local** + `qwen3-embedding` served by LM Studio/Ollama at 4096-dim. +- ❌ **Do not** substitute a different embedder (e.g. `nomic-embed-text`, 768-dim). + The dimension mismatch makes `search` error or return nonsense — unless you + **regenerate the whole corpus** with that model (`generate_embeddings.py`). + +**LM Studio's role is the chat model + MCP host.** Its *embedding* side only helps +`search` if the model it serves is `qwen3-embedding`. + +--- + +## 0. One-command setup (any device) + +The whole registration below is automated by +[`setup_lmstudio.ps1`](./setup_lmstudio.ps1). On **any** Windows machine with +LM Studio installed and the POEM share mapped, run: + +```powershell +powershell -ExecutionPolicy Bypass -File O:\POEM\embeddings\MCP\setup_lmstudio.ps1 +``` + +(`O:\POEM` is this team's mapped share; substitute wherever your own checkout lives if it's not on a mapped `O:` drive.) + +Prerequisites: LM Studio ≥ 0.3.17, your repo checkout accessible (this team maps it to `O:`), **Python ≥ 3.10** on +the machine, and (for `search` only) the RPI network/VPN. + +What it does: + +1. Finds a Python ≥ 3.10 (`py -3.12/-3.11/-3.10`, then `python` on PATH). +2. Creates a **device-local venv** at `%LOCALAPPDATA%\POEM\mcp-venv`. This is + deliberate: a venv hard-codes the absolute path of its base interpreter in + `pyvenv.cfg`, so the shared `.venv-mcp` on `O:` only works on the machine + that created it — **venvs are not portable across machines**. +3. Installs `requirements-mcp.txt` + `pip install -e ..\..` (the `poem_core` + package), retrying with `--trusted-host` flags on this network's known + certificate failures. +4. Merges a `poem-search` entry into `%USERPROFILE%\.lmstudio\mcp.json` + (preserving any other servers), written with **forward slashes** — single + backslashes in JSON are invalid escapes and get silently dropped, which + mangles the path (`:\\embeddings\...` → `:embeddings...`). +5. Runs an offline smoke test (`try_search.py RCADS-25-CG-EN` — pure graph + lookup, no network). + +Then restart LM Studio → **Program** tab (chip icon) → enable **poem-search**. +First load is slow (~860 embedding files + the RDF graph). Re-running the +script is safe — it reuses the venv and updates the config entry in place. + +## 1. Install & load models + +1. Install **LM Studio ≥ 0.3.17** (MCP support) from lmstudio.ai. *(Not currently + installed on this machine — `lms` CLI / port 1234 were absent when this was written.)* +2. Download a **tool-calling chat model** (Discover tab) — e.g. *Qwen2.5-7B-Instruct* + or *Llama-3.1-8B-Instruct*. Tool/function calling is required for the model to + invoke `search`. +3. For embeddings, pick one: + - **RPI (simplest, reliable):** nothing to download; requires VPN. + - **Local `qwen3-embedding`:** load a `qwen3-embedding` GGUF in LM Studio (or + `ollama pull qwen3-embedding`) and start its local server (default + `http://localhost:1234/v1`). + +## 2. Point the MCP server at your embedding endpoint + +Configured with env vars — no code edit needed (`mcp_server.py` honors +`EMBED_BASE_URL`/`EMBED_MODEL`). You'll set these in `mcp.json` below. Examples: + +| Embedding source | `EMBED_BASE_URL` | `EMBED_MODEL` | +|---|---|---| +| RPI server (default) | `http://idea-llm-01.idea.rpi.edu:11435/v1` | `qwen3-embedding` | +| Local (LM Studio) | `http://localhost:1234/v1` | `qwen3-embedding` | + +## 3. Register the POEM server in LM Studio + +**Preferred: run [`setup_lmstudio.ps1`](./setup_lmstudio.ps1) (§0) — it writes +this config for you.** The manual steps below are the equivalent by hand. + +LM Studio launches MCP servers over **stdio** from an `mcp.json` (same schema as +Claude Desktop). In LM Studio: the **Program** panel (right sidebar) → **Install → +Edit `mcp.json`** (file lives at `%USERPROFILE%\.lmstudio\mcp.json`). Add: + +```json +{ + "mcpServers": { + "poem-search": { + "command": "C:/Users//AppData/Local/POEM/mcp-venv/Scripts/python.exe", + "args": ["O:/POEM/embeddings/MCP/mcp_server.py"], + "env": { + "VECTOR_BACKEND": "numpy", + "EMBED_BASE_URL": "http://idea-llm-01.idea.rpi.edu:11435/v1", + "EMBED_MODEL": "qwen3-embedding" + } + } + } +} +``` + +Notes: +- `command` must be a Python env **on this machine** with the deps installed — + the per-device venv the setup script creates (shown above), or `.venv-mcp` on + the machine that built it. A wrong interpreter (e.g. bare miniconda) fails + with `ModuleNotFoundError: fastmcp`. +- **Use forward slashes** (valid on Windows). If you use backslashes they must + be doubled (`\\`) — single `\` are invalid JSON escapes and get silently + dropped, mangling the path. +- The `env` block is optional: without it the server uses its defaults + (`milvus` backend with automatic numpy fallback, RPI embedding endpoint). + `VECTOR_BACKEND=numpy` skips the Milvus connection attempt on machines that + don't run it — see [../docker/MILVUS.md](../docker/MILVUS.md). +- Save, then enable **poem-search** in LM Studio. +- First launch loads ~778 vectors + the RDF graph (a few seconds); LM Studio shows + the server as running when ready. + +## 4. Chat, and watch the parameters + JSON + +In a chat with your tool-calling model, ask something that needs the tools: + +> *"Use poem-search to find instruments that measure anxiety in children, then +> describe the top result."* + +LM Studio will show a **tool-call card** you can expand to see exactly what you +asked for: + +- **Call parameters** (the arguments the model chose): + ```json + { "query": "instruments that measure anxiety in children", + "top_k": 5, "section": "instruments", "metric": "Cosine Similarity" } + ``` +- **Result** (the JSON the tool returned — approve the call to run it): + ```json + [ + { "id": "RCADS-47-CG-EN", "label": "…", "section": "instruments", + "score": 0.71, "type": "…", "description": "…", "aliases": ["…"], + "snippet": "…" } + ] + ``` + +The model then typically calls **`get_statements`** with a result's `id` (e.g. +`RCADS-25-CG-EN`) to read that entity's relationships, and writes a summary. + +## Ollama as the embedding provider + +Ollama is running here on `:11434` but is **not** an MCP host, so it can't call the +tools itself. It *can* serve embeddings — but only usefully if it serves +**`qwen3-embedding` at 4096-dim**. Its current `nomic-embed-text` is **768-dim** and +**incompatible** with the stored corpus (see the caveat above). If you obtain a +`qwen3-embedding` model for Ollama, point the server at it: + +``` +EMBED_BASE_URL = http://localhost:11434/v1 +EMBED_MODEL = qwen3-embedding +``` + +`qwen2.5:7b` (also installed in Ollama) is a fine **tool-calling chat** model — use +it as LM Studio's model, or with any other MCP client. + +## Prefer to inspect without an LLM? + +Two ways to see the same parameters/JSON directly: + +- **FastMCP dev inspector** — a web UI to call the tools by hand: + `fastmcp dev inspector …` (see [MCP.md §3](./MCP.md)). +- **REST API `/docs`** — Swagger UI over HTTP: run + [`API/api_server.py`](../API/api_server.py) and open `http://localhost:8000/docs` + (see [../API/API.md](../API/API.md)). + +## Troubleshooting + +| Symptom | Fix | +|---|---| +| Model never calls the tool | Use a **tool-calling** model; phrase the ask to require search; enable **poem-search** in LM Studio and approve tool calls. | +| `search` errors / empty | Embedding endpoint unreachable or wrong model. Confirm `EMBED_MODEL=qwen3-embedding` and `EMBED_BASE_URL` is reachable (VPN for RPI). | +| Dimension / shape error | You embedded the query with a non-4096 model. Use `qwen3-embedding`, or regenerate the corpus with your model. | +| Server won't start | Run the `command`+`args` in a terminal to see the real error; ensure `command` points at this machine's venv (re-run `setup_lmstudio.ps1` to rebuild it). | +| `ModuleNotFoundError` on start | `command` points at the wrong Python (not the venv), or the venv came from another machine — re-run `setup_lmstudio.ps1`. | +| Path in error looks mangled (`POEMembeddings...`) | Single backslashes in `mcp.json` were dropped by the JSON parser — use forward slashes or `\\`. | +| `get_statements` 404 | Pass an `id` from a `search` result (a skos:notation like `RCADS-25-CG-EN` or `SP`). | diff --git a/embeddings/MCP/MCP.md b/embeddings/MCP/MCP.md new file mode 100644 index 00000000..0013a02c --- /dev/null +++ b/embeddings/MCP/MCP.md @@ -0,0 +1,412 @@ +# POEM Search — MCP Server + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a one‑page quick-start and common commands. + +> **TL;DR** — Two tools over MCP: `search` (semantic search, needs the RPI +> VPN/embedding endpoint) and `get_statements` (graph lookup, fully offline). +> Sanity-check both with no protocol involved: +> ```powershell +> embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py RCADS-25-CG-EN +> ``` +> Then start the real server (stdio, for LM Studio / `agent/chat_agent.py`): +> ```powershell +> embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\mcp_server.py +> ``` +> Need it reachable over a network instead (containers, remote clients)? See +> [Container deployment](#container-deployment) below. + +This folder exposes the POEM semantic search (built in [`../Pipeline/`](../Pipeline/PIPELINE_DOCS.md)) as a **Model Context Protocol (MCP)** tool, so that *any* LLM — fine-tuned or not — running in an MCP-capable client can call it. It is the backend for a future POEM chatbot. + +The server does not reimplement search: it imports the shared **`poem_core`** package (the embedding client, similarity metrics, the corpus loader, result dedup, the RDF graph loader, and the vector store) and serves it. It exposes **two tools**, modeled on the [Wikidata MCP](https://www.wikidata.org/wiki/Wikidata:MCP#Tools) server: + +- **`search`** — semantic search that returns matching entities as `id` (skos:notation) + `label`. +- **`get_statements`** — a direct POEM-graph lookup that returns an entity's immediate relationships, given an `id` from a prior `search`. + +This is the two-call flow a chatbot uses: find entities by topic, then read one entity's relationships from the knowledge graph (and chain further via the ids those relationships expose). + +**Feature — bring your own embedding LLM:** the embedding model behind the `search` tool is configurable directly in `mcp_server.py`. Point it at your own OpenAI-compatible endpoint, or leave it on the default POEM server (`idea-llm-01:11435`). See [Configuration](#configuration). + +--- + +## What's in this folder + +| File | Purpose | +|------|---------| +| `mcp_server.py` | The MCP server. Loads the embedding corpus **and** the POEM RDF graph once at startup, and exposes the `search` and `get_statements` tools over stdio. | +| `graph_lookup.py` | RDF access for the tools: resolves an entity's `(id, label)` and returns its immediate relationships. Uses `poem_core.graph.load_graph()` / `poem_core.entities.readable_local_name()` so it queries the *same* graph the embeddings were built from. | +| `conftest.py` | Pins `VECTOR_BACKEND=numpy` for the test suite so it runs offline/deterministically (no Milvus server needed). | +| `try_search.py` | Quick standalone check — calls `search` / `get_statements` directly, no MCP protocol. | +| `test_mcp.py` | Offline pytest suite (graph + `get_statements` + monkeypatched `search`); one live test gated on `POEM_TEST_NETWORK=1`. | +| `test_mcp_intensive.py` | Intensive edge cases: nonexistent/malformed entity ids, `search` argument edge cases, `MCP_TRANSPORT` resolution, the `/health` route, and the startup failure guards. See [TESTING.md "Intensive edge-case suites"](../TESTING.md#intensive-edge-case-suites). | +| `requirements-mcp.txt` | Dependencies for the server (`fastmcp`, `numpy`, `openai`, `rdflib`, `pymilvus`). | +| `setup_lmstudio.ps1` | One-command LM Studio setup for **any** Windows device: builds a device-local venv, installs deps, registers `poem-search` in `%USERPROFILE%\.lmstudio\mcp.json`, and smoke-tests offline. See [LM_STUDIO.md §0](LM_STUDIO.md). | +| `.venv-mcp/` | Dedicated Python 3.12 virtual environment (git-ignored). FastMCP requires Python ≥ 3.10, while the Pipeline runs on 3.8 — hence a separate env. | +| `Dockerfile` | Containerizes the server for network/remote deployment. See [Container deployment](#container-deployment). | +| `http_smoke_test.py` | Offline-safe check of the HTTP transport (`get_statements` over a running container/server) — no VPN needed. | +| `../docker/mcp-compose.yml` | Compose service wiring the containerized server to the local Milvus stack. Merge with `milvus-compose.yml` via `-f` (see [Container deployment](#container-deployment)). | + +--- + +## Background + +**MCP** is an open, JSON-RPC–based standard that lets an LLM application (the *client/host* — an agent framework, a custom chatbot, etc.) call external capabilities (a *server*) through a uniform interface. We publish search once as an MCP server; any MCP-aware client can then discover and invoke it. Communication uses a **transport** — here **stdio** (the client launches the server as a subprocess and talks over stdin/stdout). + +**FastMCP** is the high-level Python framework for building MCP servers: you write a normal function, decorate it with `@mcp.tool`, and it auto-generates the tool schema from your type hints and uses the docstring as the description the LLM sees. + +--- + +## Prerequisites + +- **Python ≥ 3.10** (the bundled `.venv-mcp` uses 3.12). +- The Pipeline embeddings must already exist in `../Pipeline/instruments/`, `../Pipeline/scales/`, `../Pipeline/collections/` (see [PIPELINE_DOCS.md](../Pipeline/PIPELINE_DOCS.md), Step 3). The server loads these at startup. +- The **POEM RDF graph** must be present at the repo root — the same TTLs the Pipeline reads (`individualsFull.ttl`, `individuals/`, `ontology/`, `POEM.rdf`). `get_statements` and the `id`/`label` resolution in `search` query this graph (loaded once at startup via `graph_lookup`). +- **Network:** only the `search` tool needs the network — it embeds the query via the RPI embedding server (`idea-llm-01.idea.rpi.edu:11435`), reachable only on the RPI network/VPN. Off-network, the server still starts and loads the corpus + graph, `get_statements` works fully (pure graph lookup), but a `search` call times out. +- **Docker (only if `VECTOR_BACKEND=milvus`, the default):** you don't need to start anything by hand — on startup, `get_store()` calls `docker_preflight.ensure_milvus_ready()`, which launches Docker Desktop and brings up `milvus-compose.yml` for you if they aren't already running (adds a delay of up to a few minutes the first time; see [`../docker/MILVUS.md` §10a](../docker/MILVUS.md#10a-self-healing--surviving-a-reboot)). To skip this entirely (e.g. in a container, or to force numpy), set `VECTOR_BACKEND=numpy` or `MILVUS_SKIP_ENSURE=1`. + +### One-time environment setup + +The `.venv-mcp` env is already built. To recreate it from scratch: + +```powershell +py -3.12 -m venv embeddings\MCP\.venv-mcp +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pip install -r embeddings\MCP\requirements-mcp.txt +# Recommended: also install the shared core package (editable) so `import poem_core` resolves: +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pip install -e embeddings +``` + +> If pip fails with `CERTIFICATE_VERIFY_FAILED` on this network, add: +> `--trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org` + +Throughout this doc, `PYTHON` means the venv interpreter: +`embeddings\MCP\.venv-mcp\Scripts\python.exe` + +--- + +## The tools + +### `search` + +``` +search(query: str, + top_k: int = 5, + section: str | None = None, # 'instruments' | 'scales' | 'collections' + metric: str = "Cosine Similarity") # also: 'Dot Product', 'Euclidean (L2)', 'Manhattan (L1)' + -> list[dict] +``` + +Embeds `query`, ranks all stored paragraphs, and returns up to `top_k` entities, **deduplicated by entity** (so one instrument doesn't fill every slot). The return type is a `SearchResult` TypedDict, so FastMCP also emits an **`outputSchema`** and **structured content** for the tool (plus the serialized-JSON text block for back-compat). Each result: + +| key | meaning | +|-----|---------| +| `id` | the entity's `skos:notation` (e.g. `"RCADS-25-CG-EN"`, `"SP"`). Pass this to `get_statements`. | +| `label` | human-readable `rdfs:label` (e.g. `"Social Phobia (9.1)"`). | +| `section` | the section the hit came from (commonly `instruments`/`scales`/`collections`; others may exist — sections are auto-detected, see below). | +| `score` | similarity score (float; higher = more similar). | +| `type` | the entity's readable `rdf:type` (e.g. `"Psychometric Questionnaire"`), or `null`. | +| `description` | short ontology description (`rdfs:comment`/`dc:description`/`skos:definition`, truncated), or `null`. | +| `aliases` | up to 3 `skos:altLabel` alternatives (may be `[]`). | +| `snippet` | preview of the matched paragraph text. | + +`type`/`description`/`aliases` are **graph-internal enrichment** — pulled from the same POEM graph at no extra network cost — to give the LLM more to reason over without a follow-up `get_statements` call. + +Invalid `metric`/`section`, or `top_k < 1`, raise a `ValueError` surfaced to the client. + +```jsonc +// search("anxiety in children", top_k=2) +[ + {"id": "RCADS-25-CG-EN", "label": "RCADS-25-CG-EN", "section": "instruments", + "score": 0.71, "type": "Psychometric Questionnaire", + "description": null, "aliases": [], "snippet": "RCADS-25-CG-EN. Attributes include: ..."}, + {"id": "SP", "label": "Social Phobia (9.1)", "section": "scales", + "score": 0.66, "type": "Questionnaire Scale", + "description": null, "aliases": [], "snippet": "Social Phobia (9.1). Attributes include: ..."} +] +``` + +### `get_statements` + +``` +get_statements(entity_id: str, + lang: str = "en") # accepted for forward-compatibility; labels returned as stored + -> list[dict] +``` + +Resolves `entity_id` (an `id` from a prior `search` — a `skos:notation`; an `fhir:code` or `rdfs:label` also works) to a graph node and returns its **immediate outgoing relationships**. Each item is `{property, value, value_id}`, where `value_id` is the object's own id when the object is itself a graph entity — so it can be fed straight back into `get_statements` to traverse the graph — and `null` for plain literal values. An id matching no entity raises `ValueError`. + +```jsonc +// get_statements("RCADS-25-CG-EN") -> (excerpt) +[ + {"property": "instance of", "value": "psychometric questionnaire", "value_id": null}, + {"property": "has attribute","value": "Caregiver", "value_id": null}, + {"property": "has attribute","value": "Major Depressive Disorder (10.1)", "value_id": "MDD"}, + {"property": "has member", "value": "My child feels sad or empty","value_id": null}, + {"property": "notation", "value": "RCADS-25-CG-EN", "value_id": null} +] +``` + +Resolution by section: instruments resolve by notation (notation == code == label); scales resolve their label to recover the notation (`"Social Phobia (9.1)"` → id `"SP"`); collections have no notation, so their `id` is the label (e.g. `"RCADS"`). + +--- + +## How to run + +> **See also:** [LM_STUDIO.md](LM_STUDIO.md) — run these tools from a local LLM (LM Studio) and watch the call parameters/JSON. · [../API/API.md](../API/API.md) — the same search as a plain HTTP/JSON REST API (Swagger UI at `/docs`). + +### 1. Quick sanity check (no MCP) + +Full two-call flow (`search` needs the RPI network; it then describes the top hit via `get_statements`): + +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py +``` + +Offline `get_statements` only — pass an id, no network needed: + +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py RCADS-25-CG-EN +``` + +Run the offline test suite the same way: + +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pytest embeddings\MCP\test_mcp.py -v +``` + +### 2. Start the server (stdio) + +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\mcp_server.py +``` + +### 3. Inspect interactively (dev UI) + +Launches the **MCP Inspector** web UI (needs Node/`npx` — installed here). On FastMCP **3.x** the inspector is a `dev` **subcommand**: + +```powershell +embeddings\MCP\.venv-mcp\Scripts\fastmcp.exe dev inspector embeddings\MCP\mcp_server.py +``` + +> On FastMCP **2.x** this was `fastmcp dev ` (no `inspector`). That older form errors on 3.x with *"Unknown command … Available commands: inspector, apps."* — add `inspector` as above. + +Open the URL it prints — e.g. `http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=…` — **including the token** (recent Inspector builds reject a bare `localhost:6274`). Then **Tools → `search` / `get_statements` → fill arguments → Run**. Override ports with `--ui-port` / `--server-port`. + +**Dependency gotcha.** `fastmcp dev inspector` runs the server in an isolated `uv` environment, which may not see this project's deps (`numpy`, `rdflib`, `openai`, `pymilvus`, `poem_core`). If the terminal shows a `ModuleNotFoundError`, either inject them: + +```powershell +embeddings\MCP\.venv-mcp\Scripts\fastmcp.exe dev inspector embeddings\MCP\mcp_server.py ` + --with-requirements embeddings\MCP\requirements-mcp.txt --with-editable embeddings +``` + +…or bypass fastmcp's environment entirely and point the Inspector at the ready-made venv (most reliable): + +> **Windows path gotcha — use forward slashes.** The Inspector CLI/UI re-tokenizes the command and args with the npm `shell-quote` package, which applies **POSIX** escaping rules (`\P` → `P`) *inside the Inspector's own Node code* — this happens regardless of which shell you run `npx` from (PowerShell, cmd, or Git Bash all trigger it identically, since the shell itself isn't the one doing the mangling). Backslash-separated paths get their backslashes silently stripped: `embeddings\MCP\mcp_server.py` becomes `o:POEMembeddingsMCPmcp_server.py`, a legal-but-obscure Windows "drive-relative" path that Windows then resolves against drive O:'s current directory — producing a garbled, nonexistent path (you'll see an error like `can't open file 'O:\\POEM\\POEMembeddingsMCPmcp_server.py'`). The interpreter path suffers the same fate, so `spawn-rx`'s executable lookup falls back to whatever `python.exe` is first on `PATH` (often the wrong install). **Use forward slashes** for both paths to sidestep it entirely — Windows accepts `/` in paths everywhere that matters here, and `shell-quote` leaves them alone: + +```powershell +npx @modelcontextprotocol/inspector /embeddings/MCP/.venv-mcp/Scripts/python.exe /embeddings/MCP/mcp_server.py +``` + +As with every run mode, `search` needs the RPI network (to embed the query); `get_statements` works offline. + +### 4. Connect from a Python MCP client + +```python +import asyncio +from fastmcp import Client + +client = Client(r"embeddings\MCP\mcp_server.py") # launched over stdio + +async def main(): + async with client: + print([t.name for t in await client.list_tools()]) + res = await client.call_tool("search", { + "query": "caregiver report of depression", + "top_k": 3, + "section": "instruments", + }) + for r in res.data: + print(f"[{r['section']}] {r['id']} ({r['label']}) {r['score']:+.4f}") + + # Follow up: read the top hit's relationships from the graph. + top_id = res.data[0]["id"] + stmts = await client.call_tool("get_statements", {"entity_id": top_id}) + for s in stmts.data: + chain = f" -> {s['value_id']}" if s["value_id"] else "" + print(f" {s['property']}: {s['value']}{chain}") + +asyncio.run(main()) +``` + +Run it with the venv python, from the repo root, so the same interpreter is +used to spawn the server and the relative path above resolves. + +### 5. Register with an MCP client + +> **LM Studio:** don't do this by hand — run [`setup_lmstudio.ps1`](./setup_lmstudio.ps1) once per device (see [LM_STUDIO.md §0](LM_STUDIO.md)). It builds a device-local venv (the shared `.venv-mcp` only works on the machine that created it) and writes the config entry with escape-proof forward-slash paths. + +Most MCP clients accept a JSON config that lists servers to launch. Unlike the +commands above, this needs an **absolute** path — the client isn't necessarily +launched from your repo checkout. Add an entry like the following, substituting +`` for your own repo's location (key/field names vary by +client), and restart the client: + +```json +{ + "mcpServers": { + "poem-search": { + "command": "\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe", + "args": ["\\embeddings\\MCP\\mcp_server.py"] + } + } +} +``` + +--- + +## Configuration + +### Choosing the embedding LLM (bring your own, or use the default) + +The `search` tool turns each query into a vector using an embedding model. You can **attach your own LLM / embedding endpoint** or fall back to the default POEM server — configured **in code**, at the top of `mcp_server.py`: + +```python +# --- Embedding LLM / backend configuration (in mcp_server.py) --- +EMBED_LLM_BASE_URL: str | None = None # e.g. "http://localhost:1234/v1" +EMBED_LLM_MODEL: str | None = None # e.g. "nomic-embed-text" + +DEFAULT_EMBED_BASE_URL = "http://idea-llm-01.idea.rpi.edu:11435/v1" +DEFAULT_EMBED_MODEL = "qwen3-embedding" +``` + +- **Use your own:** set `EMBED_LLM_BASE_URL` (and `EMBED_LLM_MODEL` if the model name differs) to any **OpenAI-compatible** embeddings endpoint — a local server, vLLM, Ollama, etc. No API key is required (`api_key="not-needed"`). +- **Use the default:** leave both as `None` and the server uses `idea-llm-01.idea.rpi.edu:11435` with model `qwen3-embedding`. + +On startup the server logs which backend it chose, e.g.: +`[mcp_server] Embedding backend: qwen3-embedding @ http://idea-llm-01.idea.rpi.edu:11435/v1` + +> Precedence: the in-code value wins; if left `None`, an existing `EMBED_BASE_URL` / `EMBED_MODEL` environment variable is honored; otherwise the default is used. Whatever you pick must produce embeddings **compatible with the stored `.npy` vectors** — those were generated with `qwen3-embedding`, so a different model only makes sense if you also regenerate embeddings via the [Pipeline](../Pipeline/PIPELINE_DOCS.md). + +### Other settings (environment variables, read by `../Pipeline/search_similarity.py`) + +| Variable | Default | Purpose | +|----------|---------|---------| +| `EMBED_BASE_URL` | `http://idea-llm-01.idea.rpi.edu:11435/v1` | Embedding server endpoint (set in code via `EMBED_LLM_BASE_URL`). The RPI server is HTTP-only; set `https://…` for a TLS-capable endpoint. | +| `EMBED_MODEL` | `qwen3-embedding` | Embedding model (set in code via `EMBED_LLM_MODEL`) | +| `EMBEDDINGS_DIR` | the `Pipeline/` folder | Where `.npy` embeddings are loaded from | +| `VECTOR_BACKEND` | `milvus` | Vector store: `milvus` (external server, default) or `numpy` (in-process). | +| `MILVUS_URI` | `http://localhost:19530` | External Milvus server URL (any OS). Only used when `VECTOR_BACKEND=milvus`. | +| `MILVUS_TOKEN` | *(empty)* | Auth token for a remote/cloud Milvus server (e.g. Zilliz Cloud). | +| `MILVUS_COLLECTION` | `poem` | Base collection name (one FLAT collection per metric is derived from it). | +| `MCP_TRANSPORT` | `stdio` | `stdio` (default, unchanged local-subprocess behavior) or `http` (network transport — see [Container deployment](#container-deployment)). | +| `MCP_HOST` | `127.0.0.1` | Bind address, `http` transport only. The Dockerfile sets `0.0.0.0`. | +| `MCP_PORT` | `8100` | Bind port, `http` transport only. Deliberately not `8000` — that's `API/api_server.py`'s port, and both surfaces may run at once. | +| `MILVUS_SKIP_ENSURE` | *(unset)* | Set to `1` to skip the automatic Docker/Milvus self-heal (`docker_preflight.ensure_milvus_ready()`) entirely — the container image sets this, since it never manages a host Docker daemon. | + +> **Sections are auto-detected.** The server loads whatever section subfolders exist under `EMBEDDINGS_DIR` (any folder with a `texts.npy`). Adding a new section — e.g. `items` — is just a matter of generating its embeddings; no code change here. + +> **Milvus is the default backend** and runs as a separate process (`docker compose -f embeddings/docker/milvus-compose.yml up -d`). It uses **FLAT** indexes, so results are exact (identical to numpy); Manhattan/L1 is served by an internal numpy fallback. If the server is unreachable or `pymilvus` is not installed, the store **falls back to numpy automatically** (logged to stderr) — so the server still works offline. Install `pymilvus` (see `requirements-mcp.txt`) to enable the Milvus path. + +--- + +## Container deployment + +Everything above assumes a client (LM Studio, `agent/chat_agent.py`, `try_search.py`) +launches `mcp_server.py` itself and talks over **stdio**. To run the server as a +standalone, network-reachable service instead — e.g. in Docker, for a remote or +shared deployment — switch it to the **HTTP transport** and containerize it. + +### Why the RDF graph isn't baked into the image + +The POEM RDF graph (`individualsFull.ttl`, `ontology/`, `POEM.rdf`, +`poem-demo/dist/data/`) lives **one level above `embeddings/`** in the repo, and +`poem_core/graph.py` additionally globs the *entire* repo tree for more TTLs by +filename keyword. Docker can't `COPY` across the build-context boundary, and +that open-ended glob makes a curated file list unmaintainable — so the image +ships the **code and the corpus** (`.npy` vectors, already inside `embeddings/`) +but expects the **graph** to be supplied via a **read-only bind mount of the +repo root** at runtime, with `POEM_PROJECT_ROOT` pointed at the mount (an +override `poem_core/config.py` already supports). This mirrors how +`milvus-compose.yml` already bind-mounts Milvus's own data rather than baking +it into an image — and it means graph updates take effect on container +restart, with no rebuild. Trade-off: the image alone isn't fully self-contained +for `get_statements` — a deployment host needs a mounted repo checkout. + +### Build and run standalone + +```powershell +# Build context is embeddings/, not this MCP/ folder or the repo root: +docker build -f embeddings/MCP/Dockerfile -t poem-mcp:latest embeddings + +# Run with the numpy backend (no Milvus needed) and the repo root mounted +# read-only for the graph: +docker run --rm -d --name poem-mcp ` + -e VECTOR_BACKEND=numpy ` + -e POEM_PROJECT_ROOT=/data/repo ` + -v :/data/repo:ro ` + -p 8100:8100 ` + poem-mcp:latest + +# Confirm it's healthy, then exercise it (offline-safe: get_statements only): +docker inspect -f "{{.State.Health.Status}}" poem-mcp +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\http_smoke_test.py +``` + +The image defaults to `MCP_TRANSPORT=http`, `MCP_HOST=0.0.0.0`, `MCP_PORT=8100`, +and `MILVUS_SKIP_ENSURE=1` (a container never manages a host Docker daemon — +that's a bare-metal/dev-machine feature; an unreachable Milvus just falls back +to numpy, same as always). The `/health` route (used by the image's +`HEALTHCHECK`) reports paragraph count, graph triple count, and the active +vector backend — a 200 only confirms the process finished loading at startup, +not that the embedding endpoint `search` needs is reachable. + +### Run alongside Milvus (compose) + +`embeddings/docker/mcp-compose.yml` defines an `mcp` service meant to be merged +with `milvus-compose.yml` (it alone won't validate — its `depends_on` only +resolves once both files are merged): + +```powershell +docker compose -f embeddings/docker/milvus-compose.yml ` + -f embeddings/docker/mcp-compose.yml up -d --build +``` + +This wires `MILVUS_URI=http://milvus-standalone:19530` over the compose +network Milvus's own file already names `milvus`, waits for Milvus's health +check before starting, and bind-mounts the repo root for the graph. Off the +RPI network? Uncomment and set `EMBED_BASE_URL`/`EMBED_MODEL` in the compose +file to point at any other reachable OpenAI-compatible embedding endpoint. + +Tear down: `docker compose -f embeddings/docker/milvus-compose.yml -f embeddings/docker/mcp-compose.yml down`. + +### Two gotchas + +- If you export `MCP_TRANSPORT=http` in a shell to test the container locally, + **unset it** before running `agent/chat_agent.py` or LM Studio in that *same* + shell — it'll leak into the spawned subprocess and break their stdio flow. +- **Milvus over a compose hostname can hang on first connect.** Reproduced and + fixed during development: `pymilvus`'s gRPC channel construction against a + Docker Compose service hostname (`MILVUS_URI=http://milvus-standalone:19530`) + can hang indefinitely, even though plain TCP/HTTP to that same hostname + succeeds instantly and connecting by the container's raw IP works fine — a + gRPC happy-eyeballs resolver quirk against Docker's embedded DNS, not a + wiring problem in the compose file. The image sets + `GRPC_EXPERIMENTAL_ENABLE_HAPPY_EYEBALLS=false` by default to work around it + (harmless if `MILVUS_URI` targets a real DNS name instead, e.g. Zilliz + Cloud). If a from-scratch build ever hangs at "Loaded graph: N triples" with + the container stuck at `unhealthy`, this env var is the first thing to check. + +### What's still out of scope + +No auth or TLS termination on the HTTP transport (see the closing "Out of +scope" note above) — put a reverse proxy in front for anything beyond a +trusted local network. That, plus observability, is Phase 5 territory per +[`../ROADMAP.md`](../ROADMAP.md). + +--- + +## Notes & gotchas + +- **stdio keeps stdout clean.** Under stdio, stdout is reserved for the JSON-RPC protocol. Both the corpus loader and the graph loader print progress, so `mcp_server.py` runs them under `redirect_stdout(sys.stderr)`. Don't add bare `print()` calls that go to stdout. +- **Imports resolve via the shared core package.** `mcp_server.py` and `graph_lookup.py` add the `embeddings/` root to `sys.path` and import from `poem_core` (config, metrics, corpus, embedding client, dedup, vector store, graph) — no more reaching into the sibling `Pipeline/` folder. The blessed setup is `pip install -e embeddings`, which makes `poem_core` importable without the path shim. `graph_lookup` still sets `POEM_PROJECT_ROOT` to the repo root (belt-and-suspenders) so `poem_core.graph.load_graph()` finds the repo's TTLs. +- **Corpus + graph load once.** Both load at server startup; each `search` call is then one embedding network call + a numpy matmul, and each `get_statements` call is an in-memory graph lookup (no network). +- **Graph is the merged repo snapshots.** `load_graph()` merges several overlapping TTL copies (`individuals/`, `browser/…`, `poem-demo/…`) — the same union the embeddings were built from. `get_statements` cleans the merge artifacts: it folds equivalent predicates to one readable name, renders member items via their stem text, drops `owl:NamedIndividual`, and suppresses unresolved bare-id references. +- **Out of scope (future):** auth on the HTTP transport, multilingual labels (the `lang` arg is a placeholder), and extra tools (e.g. `list_sections`, `get_full_text`). The chatbot/LLM client itself now ships as [`../agent/chat_agent.py`](../agent/AGENT.md), and a network transport is covered in [Container deployment](#container-deployment) below — both were previously listed here as future work. diff --git a/embeddings/MCP/WORKLOG.md b/embeddings/MCP/WORKLOG.md new file mode 100644 index 00000000..8be174a6 --- /dev/null +++ b/embeddings/MCP/WORKLOG.md @@ -0,0 +1,77 @@ +# POEM MCP — Work Log + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a single-page quick-start and common commands. + +A short log of the MCP work, from first learning the protocol to a two-tool +server (`search` + `get_statements`) backed by the embedding pipeline and the +POEM RDF graph. Dates are 2026. + +--- + +## Thu May 28 – Mon Jun 1 — Learning MCP + +- Read the **Model Context Protocol** spec: the host/client/server split, the + JSON-RPC message model, and **transports** (settled on **stdio** — the client + launches the server as a subprocess and talks over stdin/stdout). +- Picked **FastMCP** as the framework: decorate a plain function with + `@mcp.tool`; the schema is generated from type hints and the docstring becomes + the description the LLM sees. +- Studied the **Wikidata MCP** server as the design template + (`wikidata.org/wiki/Wikidata:MCP`, `wd-mcp.wmcloud.org/docs`): a `search` + returning entity **id + label**, and a **`get_statements`** returning an + entity's property/value relationships. Adopted this two-call shape as the + target for POEM. +- Confirmed the data we'd expose: the existing embedding search in + `../Pipeline/` (instruments / scales / collections) and the POEM RDF graph + (`skos:notation` ids, `rdfs:label` labels). + +## Tue Jun 2 — MCP server built + +- `mcp_server.py`: wraps the existing pipeline (no search reimplemented) and + serves a `search` tool over stdio. Imports `search_similarity` / + `evaluate_search` from the sibling `../Pipeline/` via `sys.path`. +- Corpus loaded **once** at startup; loader output redirected to **stderr** so + stdout stays clean for the JSON-RPC stream. +- "Bring your own embedding LLM" config block at the top of the server + (`EMBED_LLM_BASE_URL` / `EMBED_LLM_MODEL`), defaulting to the POEM server. +- Dedicated `.venv-mcp` (Python 3.12, FastMCP needs ≥ 3.10) + `requirements-mcp.txt`; + `try_search.py` for a no-protocol sanity check. + +## Wed–Thu Jun 3–4 — Hardening & docs + +- Wired dedup-by-entity (`get_unique_top_results`) into the tool and added + argument validation (metric / section / `top_k`) surfaced as `ValueError`. +- Wrote `MCP.md`: background, prerequisites, the tool reference, how to run + (sanity check, stdio, `fastmcp dev inspector`, Python client, client registration), and + the configuration / gotchas. + +## Fri Jun 5 — Tests + +- `test_mcp.py` (pytest): `search` result shape + argument-validation tests, + using a monkeypatched embedding call so the suite runs **offline**; live + embedding-server test gated behind `POEM_TEST_NETWORK=1`. Graph-tool tests + added once that tool landed (next day). + +## Sat Jun 6 (today) — Graph-backed results + +- `search` now returns the **slim** shape `{id, label, section, score}` — `id` + is the `skos:notation` a follow-up call can use. +- New **`get_statements(entity_id)`** tool + `graph_lookup.py`: a direct query + against the POEM graph returning an entity's **immediate relationships** as + `{property, value, value_id}` (chainable `value_id` for entity objects), + mirroring the Wikidata MCP. Reuses the Pipeline's `load_graph()` so it's the + same graph the embeddings were built from. +- Resolution cascade (notation → code → label) covers all three sections; + output is cleaned (readable predicates, item stem text, noise dropped). +- `rdflib` added to requirements; `try_search.py` updated to the two-call flow; + `test_mcp.py` extended with offline graph / `get_statements` tests. + **Suite: 13 passed, 1 skipped (live).** + +--- + +### Status + +`search` + `get_statements` work end-to-end. `get_statements` is fully offline; +`search` needs the RPI embedding server (VPN). Out of scope for now: the chatbot +client itself, HTTP transport/auth, multilingual labels, and further tools +(`list_sections`, `get_full_text`). diff --git a/embeddings/MCP/__pycache__/graph_lookup.cpython-312.pyc b/embeddings/MCP/__pycache__/graph_lookup.cpython-312.pyc new file mode 100644 index 00000000..bae45d21 Binary files /dev/null and b/embeddings/MCP/__pycache__/graph_lookup.cpython-312.pyc differ diff --git a/embeddings/MCP/__pycache__/mcp_server.cpython-312.pyc b/embeddings/MCP/__pycache__/mcp_server.cpython-312.pyc new file mode 100644 index 00000000..f9ef60ca Binary files /dev/null and b/embeddings/MCP/__pycache__/mcp_server.cpython-312.pyc differ diff --git a/embeddings/MCP/__pycache__/test_mcp.cpython-312-pytest-9.0.3.pyc b/embeddings/MCP/__pycache__/test_mcp.cpython-312-pytest-9.0.3.pyc new file mode 100644 index 00000000..a42e061b Binary files /dev/null and b/embeddings/MCP/__pycache__/test_mcp.cpython-312-pytest-9.0.3.pyc differ diff --git a/embeddings/MCP/conftest.py b/embeddings/MCP/conftest.py new file mode 100644 index 00000000..af58dbea --- /dev/null +++ b/embeddings/MCP/conftest.py @@ -0,0 +1,9 @@ +"""Pytest config for the MCP suite. + +Pins the vector backend to numpy so importing ``mcp_server`` (which builds the +store at import time) is deterministic and offline — no running Milvus server +needed. An explicit VECTOR_BACKEND in the environment still wins. +""" +import os + +os.environ.setdefault("VECTOR_BACKEND", "numpy") diff --git a/embeddings/MCP/graph_lookup.py b/embeddings/MCP/graph_lookup.py new file mode 100644 index 00000000..8c742f0b --- /dev/null +++ b/embeddings/MCP/graph_lookup.py @@ -0,0 +1,318 @@ +#!/usr/bin/env python3 +"""RDF graph access for the POEM MCP server. + +Encapsulates everything the MCP tools need from the POEM knowledge graph so +``mcp_server.py`` stays thin: + + * ``resolve_entity(entity, section)`` -- turn a search hit's entity string + (the first line of its embedding template) into a stable ``(id, label)`` + pair, where ``id`` is the ``skos:notation`` where one exists. + * ``get_statements(entity_id)`` -- given an id from a prior ``search`` result, + return that entity's immediate outgoing relationships as a list of + ``{property, value, value_id}`` dicts (mirrors the Wikidata MCP tool). + +The graph is the *same* one the embedding templates were built from: this +module reuses ``load_graph()`` / ``readable_local_name()`` from the sibling +``Pipeline/generate_text_templates.py`` (which merges individualsFull.ttl, every +instrument/scale/collection TTL in the repo, the ontology, and POEM.rdf). So +every entity string the ``search`` tool can return is resolvable here. + +Loading is lazy and warmed explicitly via ``ensure_loaded()`` so the caller can +control *when* the (chatty) load happens -- e.g. the server warms it at startup +under ``redirect_stdout(sys.stderr)`` to keep the stdio JSON-RPC stream clean. +""" +from __future__ import annotations + +import os +import sys + +# The shared core package lives one level up (embeddings/poem_core); make it +# importable whether this module is imported by the server, a test, or run +# standalone. +_HERE = os.path.dirname(os.path.abspath(__file__)) +_EMB_ROOT = os.path.dirname(_HERE) # embeddings/ +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +# poem_core.config reads POEM_PROJECT_ROOT at import time to find the TTLs; point +# it at the repo root (embeddings -> POEM). The config default already resolves +# there, so this is belt-and-suspenders for unusual launch directories. +_REPO_ROOT = os.path.dirname(_EMB_ROOT) +os.environ.setdefault("POEM_PROJECT_ROOT", _REPO_ROOT) + +from rdflib import Graph, URIRef, Literal, Namespace, RDF # noqa: E402,F401 +from rdflib.namespace import RDFS, SKOS, OWL # noqa: E402 + +from poem_core.graph import load_graph # noqa: E402 +from poem_core.entities import readable_local_name # noqa: E402 + +FHIR = Namespace("http://hl7.org/fhir/") +DCT = Namespace("http://purl.org/dc/terms/") +_SIO = "http://semanticscience.org/resource/" +# item -> item stem ("is referred to by"); used to render an instrument's +# member items (which carry no label of their own) as their stem text, matching +# how the embedding templates represent instrument members. +_HAS_STEM = URIRef(_SIO + "SIO_000253") + +# Opaque predicates -> the same human-readable vocabulary the templates use, so +# get_statements output reads naturally. Keyed by full predicate URI string. +# Anything not here falls back to the predicate's own rdfs:label (from the +# ontology) or readable_local_name(). +PREDICATE_OVERRIDES: dict[str, str] = { + str(RDF.type): "instance of", + _SIO + "SIO_000059": "has member", + _SIO + "hasMember": "has member", + _SIO + "SIO_000008": "has attribute", + _SIO + "hasAttribute": "has attribute", + str(SKOS.notation): "notation", + str(RDFS.label): "label", + str(FHIR.code): "code", +} + +# --------------------------------------------------------------------------- +# Lazy-loaded graph + reverse indexes (built once) +# --------------------------------------------------------------------------- +_G: Graph | None = None + +# value-string -> IRI (deterministic: smallest IRI string wins on collision) +_notation_to_iri: dict[str, URIRef] = {} +_code_to_iri: dict[str, URIRef] = {} +_label_to_iri: dict[str, URIRef] = {} +# IRI -> value-string +_iri_to_notation: dict[URIRef, str] = {} +_iri_to_code: dict[URIRef, str] = {} +_iri_to_label: dict[URIRef, str] = {} +# IRI -> enrichment (built once in ensure_loaded) +_iri_to_description: dict[URIRef, str] = {} +_iri_to_aliases: dict[URIRef, list[str]] = {} + + +def _index(forward: dict[str, URIRef], reverse: dict[URIRef, str], predicate) -> None: + """Populate value<->IRI maps for one predicate over the whole graph.""" + assert _G is not None + for subj, obj in _G.subject_objects(predicate): + if not isinstance(subj, URIRef): + continue + val = str(obj) + # Forward map: keep the lexicographically smallest IRI for determinism. + existing = forward.get(val) + if existing is None or str(subj) < str(existing): + forward[val] = subj + # Reverse map: first value seen for an IRI wins (stable across runs + # because triple order within a value is irrelevant for our use). + reverse.setdefault(subj, val) + + +def ensure_loaded() -> None: + """Load the POEM graph and build reverse indexes (idempotent). + + Call this once up front (e.g. under redirect_stdout) to control when the + chatty load happens; the lookup functions also call it on demand. + """ + global _G + if _G is not None: + return + _G = load_graph() + _index(_notation_to_iri, _iri_to_notation, SKOS.notation) + _index(_code_to_iri, _iri_to_code, FHIR.code) + _index(_label_to_iri, _iri_to_label, RDFS.label) + _index_enrichment() + + +def _index_enrichment() -> None: + """Build IRI -> description / aliases maps for richer search results. + + description: first available of rdfs:comment / dc:description / skos:definition + (deterministic: smallest string wins on collision). + aliases: all skos:altLabel values, sorted, deduplicated. + """ + assert _G is not None + # (priority, value): lower priority number wins; smallest string breaks ties. + best: dict[URIRef, tuple[int, str]] = {} + for prio, pred in enumerate((RDFS.comment, DCT.description, SKOS.definition)): + for subj, obj in _G.subject_objects(pred): + if not isinstance(subj, URIRef): + continue + val = str(obj).strip() + if not val: + continue + cur = best.get(subj) + if cur is None or (prio, val) < cur: + best[subj] = (prio, val) + for subj, (_, val) in best.items(): + _iri_to_description[subj] = val + + aliases: dict[URIRef, set[str]] = {} + for subj, obj in _G.subject_objects(SKOS.altLabel): + if isinstance(subj, URIRef): + aliases.setdefault(subj, set()).add(str(obj).strip()) + for subj, vals in aliases.items(): + _iri_to_aliases[subj] = sorted(v for v in vals if v) + + +# --------------------------------------------------------------------------- +# Entity resolution +# --------------------------------------------------------------------------- + +def resolve_entity(entity: str, section: str | None = None) -> tuple[str, str]: + """Map a search hit's entity string to a stable ``(id, label)``. + + ``id`` is the ``skos:notation`` where one exists; otherwise the fhir:code + or, failing both, the entity string itself. The cascade matches the three + section shapes: + + * instruments: notation == code == label == entity -> matched by notation + * scales: entity is the rdfs:label ("Social Phobia (9.1)"); the id + is recovered as the notation ("SP") -> matched by label + * collections: no notation; id falls back to the label ("RCADS") + """ + ensure_loaded() + + iri = _notation_to_iri.get(entity) + if iri is not None: + return entity, _iri_to_label.get(iri, entity) + + iri = _code_to_iri.get(entity) + if iri is not None: + return _iri_to_notation.get(iri, entity), _iri_to_label.get(iri, entity) + + iri = _label_to_iri.get(entity) + if iri is not None: + eid = _iri_to_notation.get(iri) or _iri_to_code.get(iri) or entity + return eid, entity + + return entity, entity + + +def find_iri(entity_id: str) -> URIRef | None: + """Resolve an id (as returned by ``search``) to a graph IRI, or None. + + Same cascade as resolve_entity: notation -> fhir:code -> rdfs:label. + """ + ensure_loaded() + return ( + _notation_to_iri.get(entity_id) + or _code_to_iri.get(entity_id) + or _label_to_iri.get(entity_id) + ) + + +def _readable_type(iri: URIRef) -> str | None: + """A human-readable rdf:type for an entity. + + Skips owl:NamedIndividual (true of everything) and prefers a POEM-namespace + class. Returns the type's rdfs:label if present, else its readable localname. + """ + assert _G is not None + types = [t for t in _G.objects(iri, RDF.type) + if isinstance(t, URIRef) and t != OWL.NamedIndividual] + if not types: + return None + types.sort(key=lambda t: (0 if "purl.org/twc/poem" in str(t) else 1, str(t))) + chosen = types[0] + return _iri_to_label.get(chosen) or readable_local_name(str(chosen)) + + +def resolve_entity_rich(entity: str, section: str | None = None) -> dict: + """Like ``resolve_entity`` but with extra graph-internal fields for the LLM. + + Returns ``{id, label, description, aliases, type}``: ``description`` from + rdfs:comment / dc:description / skos:definition, ``aliases`` from + skos:altLabel (≤3), ``type`` the readable rdf:type. Missing fields are None + / ``[]`` so the shape is stable. + """ + ensure_loaded() + eid, label = resolve_entity(entity, section) + iri = find_iri(entity) or find_iri(eid) + if iri is None: + return {"id": eid, "label": label, "description": None, "aliases": [], "type": None} + return { + "id": eid, + "label": label, + "description": _iri_to_description.get(iri), + "aliases": _iri_to_aliases.get(iri, [])[:3], + "type": _readable_type(iri), + } + + +# --------------------------------------------------------------------------- +# Statements (immediate outgoing relationships) +# --------------------------------------------------------------------------- + +def _predicate_label(predicate: URIRef) -> str: + override = PREDICATE_OVERRIDES.get(str(predicate)) + if override is not None: + return override + return _iri_to_label.get(predicate) or readable_local_name(str(predicate)) + + +def _object_to_value(obj) -> tuple[str, str | None]: + """Render a triple object as ``(value, value_id)``. + + Literals -> (text, None). Entity IRIs -> (best label, chainable id) where + the id is the object's notation/code if it has one (so the model can feed + it back into get_statements), else None. + """ + if isinstance(obj, URIRef): + value = ( + _iri_to_label.get(obj) + or _iri_to_notation.get(obj) + or _iri_to_code.get(obj) + or _stem_label(obj) + or readable_local_name(str(obj)) + ) + value_id = _iri_to_notation.get(obj) or _iri_to_code.get(obj) + return value, value_id + # Literal or BNode + return str(obj), None + + +def _stem_label(obj: URIRef) -> str | None: + """Render an instrument's member item by dereferencing item -> stem label. + + Member items (``.../item/N``) carry no label of their own; the human text + lives one hop away on the item stem. Returns the (deterministic) stem label + or None if the object isn't an item-with-stem. + """ + assert _G is not None + labels = [ + str(lbl) + for stem in _G.objects(obj, _HAS_STEM) + for lbl in _G.objects(stem, RDFS.label) + ] + return min(labels) if labels else None + + +def get_statements(entity_id: str) -> list[dict]: + """Return ``entity_id``'s immediate outgoing relationships from the graph. + + Each item is ``{"property": str, "value": str, "value_id": str | None}``, + deduplicated and stably sorted. Raises ValueError if the id resolves to no + entity. + """ + iri = find_iri(entity_id) + if iri is None: + raise ValueError(f"No entity found for id {entity_id!r}") + + assert _G is not None + seen: set[tuple[str, str, str | None]] = set() + out: list[dict] = [] + for predicate, obj in _G.predicate_objects(iri): + # owl:NamedIndividual is true of every individual -- pure noise. + if predicate == RDF.type and obj == OWL.NamedIndividual: + continue + prop = _predicate_label(predicate) + value, value_id = _object_to_value(obj) + # Drop unresolved references: a bare-integer value with no chainable id + # is an entity URI (e.g. .../item/16) that no loaded snapshot gave a + # label/stem -- noise, never a meaningful relationship in this data. + if value_id is None and value.isdigit(): + continue + key = (prop, value, value_id) + if key in seen: + continue + seen.add(key) + out.append({"property": prop, "value": value, "value_id": value_id}) + + out.sort(key=lambda d: (d["property"], d["value"])) + return out diff --git a/embeddings/MCP/http_smoke_test.py b/embeddings/MCP/http_smoke_test.py new file mode 100644 index 00000000..e82f6f0b --- /dev/null +++ b/embeddings/MCP/http_smoke_test.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""Tiny standalone check of the MCP server's HTTP transport. + +Offline-safe: only exercises `get_statements` (a pure graph lookup), so it +proves the container/HTTP path end-to-end without needing the RPI VPN or a +reachable embedding endpoint (`search` needs that; transport is orthogonal). + +Run against a running container or `MCP_TRANSPORT=http` server (default +http://127.0.0.1:8100/mcp): + + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe embeddings\\MCP\\http_smoke_test.py +""" +from __future__ import annotations + +import asyncio +import os +import sys + +from fastmcp import Client + +URL = os.environ.get("MCP_HTTP_URL", "http://127.0.0.1:8100/mcp") +ENTITY_ID = os.environ.get("MCP_SMOKE_ENTITY_ID", "RCADS-25-CG-EN") + + +async def main() -> None: + print(f"Connecting to {URL} ...") + async with Client(URL) as client: + tools = [t.name for t in await client.list_tools()] + print(f"Tools: {tools}") + assert "search" in tools and "get_statements" in tools, ( + f"expected 'search' and 'get_statements', got {tools}" + ) + + result = await client.call_tool("get_statements", {"entity_id": ENTITY_ID}) + stmts = result.data + assert isinstance(stmts, list) and stmts, f"expected a non-empty list, got {stmts!r}" + + print(f"\nget_statements({ENTITY_ID!r}) -> {len(stmts)} statements (first 5):") + for s in stmts[:5]: + chain = f" -> id={s['value_id']}" if s.get("value_id") else "" + print(f" {s['property']}: {s['value']}{chain}") + + print(f"\nOK -- HTTP transport is serving both tools correctly.") + + +if __name__ == "__main__": + try: + asyncio.run(main()) + except Exception as e: + print(f"FAILED: {e}", file=sys.stderr) + sys.exit(1) diff --git a/embeddings/MCP/mcp_server.py b/embeddings/MCP/mcp_server.py new file mode 100644 index 00000000..7a13c13c --- /dev/null +++ b/embeddings/MCP/mcp_server.py @@ -0,0 +1,346 @@ +#!/usr/bin/env python3 +"""MCP server exposing POEM semantic search as a tool for any LLM. + +Wraps the existing search functions in ``search_similarity.py`` and serves a +single ``search`` tool over the Model Context Protocol (FastMCP, stdio +transport). An MCP-capable LLM client (an agent framework, a custom chatbot, +etc.) can then discover and call ``search`` without knowing anything about +numpy, the stored ``.npy`` embeddings, or the embedding server. + +Run it: + python embeddings/MCP/mcp_server.py # stdio transport + +Or with the dev inspector (FastMCP 3.x): + fastmcp dev inspector embeddings/MCP/mcp_server.py + +The search building blocks live in the shared ``poem_core`` package +(``embeddings/poem_core/``): the embedding client, similarity metrics, the corpus +loader, result dedup, and the vector store. This file adds the ``embeddings/`` +root to sys.path so ``import poem_core...`` resolves when run as a script. + +Requires Python >= 3.10 (FastMCP). + +Embedding backend (the LLM that turns queries into vectors): by default the +``search`` tool uses the POEM embedding server (idea-llm-01:11435). To attach +your OWN LLM / embedding endpoint, set EMBED_LLM_BASE_URL (and EMBED_LLM_MODEL) +in the configuration block below -- any OpenAI-compatible embeddings endpoint +works. EMBEDDINGS_DIR still controls where the stored ``.npy`` vectors load from. +""" +from __future__ import annotations + +import os +import sys +from typing import TypedDict +from contextlib import redirect_stdout + +# The shared core package lives one level up (embeddings/poem_core). Add the +# embeddings/ root to sys.path so `import poem_core...` and the sibling +# `graph_lookup` resolve, whether this file is run as a script or imported. +_HERE = os.path.dirname(os.path.abspath(__file__)) +_EMB_ROOT = os.path.dirname(_HERE) +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +from fastmcp import FastMCP +from starlette.requests import Request +from starlette.responses import JSONResponse + +# =========================================================================== +# Embedding LLM / backend configuration (edit here -- in code, not the terminal) +# =========================================================================== +# The `search` tool turns each query into a vector using an embedding model +# served over an OpenAI-compatible API. Choose which one to use: +# +# * Attach your OWN LLM / embedding endpoint by setting EMBED_LLM_BASE_URL +# (and EMBED_LLM_MODEL if the model name differs). Any OpenAI-compatible +# embeddings endpoint works -- a local server, vLLM, Ollama, etc. +# * Leave them as None to fall back to the default POEM embedding server. +# +# Applied below *before* importing search_similarity, which builds its OpenAI +# client from these values at import time. +EMBED_LLM_BASE_URL: str | None = None # e.g. "http://localhost:1234/v1" +EMBED_LLM_MODEL: str | None = None # e.g. "nomic-embed-text" + +DEFAULT_EMBED_BASE_URL = "http://idea-llm-01.idea.rpi.edu:11435/v1" +DEFAULT_EMBED_MODEL = "qwen3-embedding" + +# In-code choice wins; otherwise honor an existing env var; otherwise default. +if EMBED_LLM_BASE_URL is not None: + os.environ["EMBED_BASE_URL"] = EMBED_LLM_BASE_URL +else: + os.environ.setdefault("EMBED_BASE_URL", DEFAULT_EMBED_BASE_URL) + +if EMBED_LLM_MODEL is not None: + os.environ["EMBED_MODEL"] = EMBED_LLM_MODEL +else: + os.environ.setdefault("EMBED_MODEL", DEFAULT_EMBED_MODEL) + +from poem_core.metrics import METRICS +from poem_core.corpus import SECTIONS, load_embeddings +from poem_core.embedding_client import embed_query +from poem_core.dedup import get_unique_top_results +from poem_core.vector_store import get_store + +# Graph access for id/label resolution and the get_statements tool. Lives in +# this folder (graph_lookup.py); wraps the same RDF graph the embedding +# templates were built from. +import graph_lookup + +# --------------------------------------------------------------------------- +# Load the corpus and graph once at startup. +# +# load_embeddings() reads ~860 .npy files and graph_lookup.ensure_loaded() +# parses the POEM TTLs; both print progress to stdout. Under the stdio +# transport, stdout is reserved for the JSON-RPC protocol, so any stray print +# would corrupt the stream -- redirect that output to stderr. +# +# Any failure here (missing .npy corpus, unreachable/empty RDF graph, vector +# store construction error) is fatal -- there is nothing useful this server +# can do without them -- so it prints a traceback plus an actionable checklist +# and exits non-zero, rather than either continuing half-loaded or letting a +# raw traceback be the only signal (important for container orchestrators, +# which need a clean, fast, unambiguous startup failure to act on). +# +# Wrapped in a function (called once, immediately below) rather than left as +# bare module-level code so tests can re-invoke it with mocked loaders to +# exercise the failure paths (see MCP/test_mcp_intensive.py) without needing a +# subprocess per scenario. +# --------------------------------------------------------------------------- +def _startup() -> None: + global _EMB, _TEXTS, _SECS, _STORE + try: + with redirect_stdout(sys.stderr): + _EMB, _TEXTS, _SECS = load_embeddings() + print(f"[mcp_server] Loaded {len(_TEXTS)} paragraphs from {SECTIONS}") + print(f"[mcp_server] Embedding backend: {os.environ['EMBED_MODEL']} " + f"@ {os.environ['EMBED_BASE_URL']}") + graph_lookup.ensure_loaded() + if len(graph_lookup._G) == 0: + # The single most likely container-deployment mistake: the RDF + # graph lives outside embeddings/ (see MCP.md "Container + # deployment"), so a forgotten bind mount loads a graph with zero + # triples instead of raising -- get_statements would then just + # always report "not found", which is much harder to diagnose + # than a startup failure. + raise RuntimeError( + "graph loaded but has 0 triples -- POEM_PROJECT_ROOT=" + f"{os.environ.get('POEM_PROJECT_ROOT', '')!r} probably " + "isn't a real POEM checkout (e.g. a container bind mount wasn't " + "attached)" + ) + print(f"[mcp_server] Loaded graph: {len(graph_lookup._G)} triples") + # Vector backend: numpy (default) or milvus, via VECTOR_BACKEND. + _STORE = get_store(_EMB, _TEXTS, _SECS) + print(f"[mcp_server] Vector backend: {type(_STORE).__name__}") + except Exception: + import traceback + traceback.print_exc(file=sys.stderr) + sys.stderr.write( + "\n[mcp_server] FATAL: startup failed loading the corpus/graph/vector " + "store (traceback above). Common causes:\n" + " - EMBEDDINGS_DIR isn't pointing at Pipeline/{instruments,scales,collections}\n" + " (.npy files missing -- run Pipeline/generate_embeddings.py, or check\n" + " the container COPY/mount).\n" + " - POEM_PROJECT_ROOT / POEM_DATA_DIR doesn't point at a checkout\n" + " containing the POEM RDF TTLs (individualsFull.ttl, ontology/, POEM.rdf,\n" + " poem-demo/dist/data/) -- in a container this must be a bind mount.\n" + " - VECTOR_BACKEND=milvus but Milvus is unreachable and MILVUS_SKIP_ENSURE\n" + " isn't set -- try VECTOR_BACKEND=numpy, or fix MILVUS_URI.\n" + "See MCP.md 'Prerequisites' and 'Container deployment'.\n" + ) + sys.exit(1) + + +_startup() + +mcp = FastMCP("POEM Embedding Search") + +# Max characters of an entity description to include (keep payloads lean for +# conversational LLM use, per MCP structured-content guidance). +_DESC_MAX = 300 + + +class SearchResult(TypedDict): + """One search hit. Declared as a TypedDict so FastMCP emits an outputSchema + and structured content for the `search` tool.""" + id: str + label: str + section: str + score: float + type: str | None + description: str | None + aliases: list[str] + snippet: str + + +@mcp.tool +def search( + query: str, + top_k: int = 5, + section: str | None = None, + metric: str = "Cosine Similarity", +) -> list[SearchResult]: + """Semantic search over POEM mental-health instruments, scales, and collections. + + Embeds the query and returns the ``top_k`` most relevant entities, ranked by + similarity and deduplicated by entity (so one instrument does not fill every + slot). Use this to find questionnaires/scales relevant to a topic, symptom, + or item wording, then pass a result's ``id`` to ``get_statements`` to read + that entity's relationships from the graph. + + Args: + query: Natural-language search text (a topic, symptom, or item wording). + top_k: Number of unique entities to return (default 5). + section: Restrict to one of the available sections (commonly + 'instruments', 'scales', 'collections'; others may exist). Omit to + search all sections. + metric: Similarity metric. One of 'Cosine Similarity' (default), + 'Dot Product', 'Euclidean (L2)', 'Manhattan (L1)'. + + Returns: + A list of result dicts ordered best-first, each with: + - id: the entity's skos:notation (e.g. 'RCADS-25-CG-EN', 'SP'); + pass this to get_statements. + - label: human-readable rdfs:label (e.g. 'Social Phobia (9.1)'). + - section: the section the hit came from (e.g. 'instruments'). + - score: similarity score (float; higher is more similar). + - type: the entity's readable rdf:type, or null. + - description: a short description from the ontology, or null. + - aliases: up to 3 alternative labels (may be empty). + - snippet: a preview of the matched paragraph text. + """ + if metric not in METRICS: + raise ValueError( + f"Unknown metric {metric!r}. Choose one of: {list(METRICS)}" + ) + if section is not None and section not in SECTIONS: + raise ValueError( + f"Unknown section {section!r}. Choose one of: {SECTIONS}" + ) + if top_k < 1: + raise ValueError(f"top_k must be >= 1, got {top_k}") + + query_vec = embed_query(query) + + # Pull a wider candidate window from the vector store so dedup-by-entity + # still yields top_k uniques. The numpy backend scores the whole corpus; + # the milvus backend returns its top-`window` hits. + window = max(20, top_k * 4) + scores, txt, sec = _STORE.top_candidates(query_vec, metric, section, k=window) + + raw = get_unique_top_results( + scores, + txt, + sec, + top_k_search=window, + top_k_unique=top_k, + ) + + # Resolve each hit's entity string to a stable (id, label) + enrichment. + results: list[SearchResult] = [] + for r in raw: + info = graph_lookup.resolve_entity_rich(r["entity"], r["section"]) + desc = info["description"] + if desc and len(desc) > _DESC_MAX: + desc = desc[:_DESC_MAX - 1].rstrip() + "…" + results.append({ + "id": info["id"], + "label": info["label"], + "section": r["section"], + "score": r["score"], + "type": info["type"], + "description": desc, + "aliases": info["aliases"], + "snippet": r["preview"], + }) + return results + + +@mcp.tool +def get_statements(entity_id: str, lang: str = "en") -> list[dict]: + """Return a POEM entity's immediate relationships from the knowledge graph. + + Call this after ``search`` to describe one of its results: pass the result's + ``id`` (a skos:notation such as 'RCADS-25-CG-EN' or 'SP'). Performs a direct + lookup in the POEM RDF graph and returns the entity's immediate outgoing + statements (property-value pairs). + + Args: + entity_id: An id from a prior ``search`` result (skos:notation; also + accepts an fhir:code or rdfs:label). + lang: Language for labels (accepted for forward-compatibility; labels + are currently returned as stored in the graph). + + Returns: + A list of ``{property, value, value_id}`` dicts. ``value_id`` is the + object's own id when the object is itself a graph entity (so it can be + fed back into ``get_statements`` to traverse the graph), and null for + plain literal values. Raises ValueError if the id matches no entity. + """ + return graph_lookup.get_statements(entity_id) + + +# --------------------------------------------------------------------------- +# HTTP-only liveness probe (see "Container deployment" in MCP.md). Inert under +# stdio transport -- no HTTP server is running in that mode, so nothing calls +# this route; it costs nothing to register unconditionally. +# --------------------------------------------------------------------------- +@mcp.custom_route("/health", methods=["GET"]) +async def health(_request: Request) -> JSONResponse: + """Liveness probe for HTTP-transport deployments (container HEALTHCHECK etc.). + + A 200 only confirms the process is alive and finished loading at startup -- + a load failure exits non-zero before the server ever starts listening (see + the try/except around the corpus/graph/store loading above). Does NOT + probe the embedding endpoint the `search` tool depends on; that's a + separate, optional concern (see MCP.md). + """ + return JSONResponse({ + "status": "ok", + "paragraphs": len(_TEXTS), + "graph_triples": len(graph_lookup._G), + "vector_backend": type(_STORE).__name__, + }) + + +# --------------------------------------------------------------------------- +# Transport selection (see "Container deployment" in MCP.md). +# +# MCP_TRANSPORT=stdio (default) -- unchanged behavior: the client (LM Studio, +# agent/chat_agent.py, try_search.py) launches this file as a subprocess +# and talks over stdin/stdout. Nothing below runs differently than before. +# MCP_TRANSPORT=http -- serves over HTTP at http://HOST:PORT/mcp +# for a containerized / remotely-reachable deployment. No auth/TLS here -- +# that's Phase 5 hardening territory (see ../ROADMAP.md), not this file. +# +# MCP_PORT defaults to 8100, not 8000 -- API/api_server.py already uses 8000, +# and both surfaces may run on the same host at once (see ../ROADMAP.md's +# three-serving-surfaces design). +# +# Split into a pure function (env -> validated settings, or ValueError) so +# tests can exercise the "unknown MCP_TRANSPORT" validation directly, without +# needing to run this file as a subprocess (see MCP/test_mcp_intensive.py). +# --------------------------------------------------------------------------- +def _resolve_transport() -> tuple[str, str, int]: + transport = os.environ.get("MCP_TRANSPORT", "stdio").lower() + host = os.environ.get("MCP_HOST", "127.0.0.1") + port = int(os.environ.get("MCP_PORT", "8100")) + if transport not in ("stdio", "http"): + raise ValueError( + f"Unknown MCP_TRANSPORT={transport!r}; expected 'stdio' or 'http'." + ) + return transport, host, port + + +if __name__ == "__main__": + try: + _transport, _host, _port = _resolve_transport() + except ValueError as e: + sys.exit(f"[mcp_server] {e}") + + if _transport == "stdio": + mcp.run() # stdio transport (default, unchanged) + else: + print(f"[mcp_server] Serving over HTTP at http://{_host}:{_port}/mcp " + f"(health: http://{_host}:{_port}/health)", file=sys.stderr) + mcp.run(transport="http", host=_host, port=_port) diff --git a/embeddings/MCP/requirements-mcp.txt b/embeddings/MCP/requirements-mcp.txt new file mode 100644 index 00000000..2e42db8b --- /dev/null +++ b/embeddings/MCP/requirements-mcp.txt @@ -0,0 +1,23 @@ +# Requirements for the MCP server (embeddings/MCP/mcp_server.py). +# Install in a dedicated Python >= 3.10 virtual environment (FastMCP needs 3.10+). +# +# Blessed setup also installs the shared core package (poem_core): +# pip install -e embeddings # core + runtime deps +# pip install -e "embeddings[mcp,milvus]" # + fastmcp + pymilvus +# +# Upper bounds are set to the next major version to avoid a silent breaking +# change; kept in sync with pyproject.toml's [mcp]/[milvus] extras, which the +# Dockerfile installs from directly (this file is the path for +# setup_lmstudio.ps1's manual per-device venv). No full lockfile -- this +# environment's PyPI cert-trust issues make pip-compile-style generation +# unreliable; version ranges are the safer, faster option. +fastmcp>=3.4.2,<4.0.0 +numpy>=2.0.0,<3.0.0 +openai>=2.0.0,<3.0.0 +# get_statements / id-label resolution query the POEM RDF graph (the same TTLs +# the Pipeline reads). +rdflib>=6.0.0,<8.0.0 +# Default vector backend is the external Milvus server (VECTOR_BACKEND=milvus). +# pymilvus is the client; without it (or with no server reachable) the store +# falls back to the in-process numpy backend automatically. +pymilvus>=3.0.0,<4.0.0 diff --git a/embeddings/MCP/setup_lmstudio.ps1 b/embeddings/MCP/setup_lmstudio.ps1 new file mode 100644 index 00000000..f9afadf8 --- /dev/null +++ b/embeddings/MCP/setup_lmstudio.ps1 @@ -0,0 +1,188 @@ +<# +.SYNOPSIS + One-command setup of the POEM MCP server for LM Studio on this device. + +.DESCRIPTION + Run this on any Windows machine that has LM Studio installed and the POEM + repo reachable (e.g. the O: network share mapped). It: + + 1. Finds a Python >= 3.10 interpreter on this machine. + 2. Creates a device-local venv at %LOCALAPPDATA%\POEM\mcp-venv + (venvs hard-code the path of their base interpreter, so a venv on the + shared drive only works on the machine that created it -- each device + needs its own). + 3. Installs the server dependencies (requirements-mcp.txt) plus the + shared poem_core package (pip install -e embeddings). + 4. Adds/updates the "poem-search" entry in this user's LM Studio config + (%USERPROFILE%\.lmstudio\mcp.json), preserving any other servers. + Paths are written with forward slashes so JSON escaping can't mangle + them. + 5. Runs an offline smoke test (get_statements, no network needed). + + Afterwards: restart LM Studio, open the Program tab (chip icon), and + enable "poem-search". First load is slow (~860 .npy files + RDF graph). + The `search` tool additionally needs the RPI network/VPN (it embeds + queries via idea-llm-01.idea.rpi.edu:11435); `get_statements` is offline. + +.EXAMPLE + powershell -ExecutionPolicy Bypass -File O:\POEM\embeddings\MCP\setup_lmstudio.ps1 +#> + +$ErrorActionPreference = "Stop" + +# Paths are derived from this script's location, so the share can be mapped +# to any drive letter. +$McpDir = $PSScriptRoot +$EmbRoot = Split-Path $McpDir -Parent +$ServerPy = Join-Path $McpDir "mcp_server.py" +$Reqs = Join-Path $McpDir "requirements-mcp.txt" +$VenvDir = Join-Path $env:LOCALAPPDATA "POEM\mcp-venv" +$VenvPy = Join-Path $VenvDir "Scripts\python.exe" +$CfgDir = Join-Path $env:USERPROFILE ".lmstudio" +$CfgPath = Join-Path $CfgDir "mcp.json" + +foreach ($p in @($ServerPy, $Reqs)) { + if (-not (Test-Path $p)) { + throw "Cannot find $p -- is the POEM share mapped and this script run from embeddings\MCP\?" + } +} + +Write-Host "== POEM MCP server setup for LM Studio ==" -ForegroundColor Cyan +Write-Host "Repo: $EmbRoot" +Write-Host "Venv: $VenvDir" +Write-Host "Config: $CfgPath" +Write-Host "" + +# -------------------------------------------------------------------------- +# 1. Find a Python >= 3.10 +# -------------------------------------------------------------------------- +function Get-PythonVersionOk { + param([string]$Exe, [string[]]$ExtraArgs) + # Probe quietly; a missing launcher/interpreter must not abort the script. + $ErrorActionPreference = "Continue" + try { + $ver = & $Exe @ExtraArgs -c "import sys; print('%d.%d' % sys.version_info[:2]); sys.exit(0 if sys.version_info >= (3, 10) else 1)" 2>$null + if ($LASTEXITCODE -eq 0 -and $ver) { return ($ver | Select-Object -First 1) } + } catch { } + return $null +} + +$candidates = @( + @{ Exe = "py"; Args = @("-3.12") }, + @{ Exe = "py"; Args = @("-3.11") }, + @{ Exe = "py"; Args = @("-3.10") }, + @{ Exe = "py"; Args = @("-3") }, + @{ Exe = "python"; Args = @() }, + @{ Exe = "python3"; Args = @() } +) + +$basePy = $null +foreach ($c in $candidates) { + if (-not (Get-Command $c.Exe -ErrorAction SilentlyContinue)) { continue } + $ver = Get-PythonVersionOk -Exe $c.Exe -ExtraArgs $c.Args + if ($ver) { $basePy = $c; $basePyVer = $ver; break } +} + +if (-not $basePy) { + throw "No Python >= 3.10 found on this machine. Install one from https://www.python.org/downloads/ (check 'Add to PATH'), then re-run this script." +} +Write-Host ("[1/5] Using Python {0} ({1} {2})" -f $basePyVer, $basePy.Exe, ($basePy.Args -join " ")) + +# -------------------------------------------------------------------------- +# 2. Create the device-local venv (reuse it if it already works) +# -------------------------------------------------------------------------- +$venvOk = $false +if (Test-Path $VenvPy) { + $ErrorActionPreference = "Continue" + & $VenvPy -c "import sys; sys.exit(0 if sys.version_info >= (3, 10) else 1)" 2>$null + if ($LASTEXITCODE -eq 0) { $venvOk = $true } + $ErrorActionPreference = "Stop" +} + +if ($venvOk) { + Write-Host "[2/5] Reusing existing venv at $VenvDir" +} else { + Write-Host "[2/5] Creating venv at $VenvDir ..." + New-Item -ItemType Directory -Force (Split-Path $VenvDir -Parent) | Out-Null + & $basePy.Exe @($basePy.Args) -m venv $VenvDir + if ($LASTEXITCODE -ne 0 -or -not (Test-Path $VenvPy)) { throw "venv creation failed." } +} + +# -------------------------------------------------------------------------- +# 3. Install dependencies (retry with --trusted-host on cert failures, +# a known issue on this network -- see MCP.md) +# -------------------------------------------------------------------------- +$trusted = @("--trusted-host", "pypi.org", "--trusted-host", "files.pythonhosted.org", "--trusted-host", "pypi.python.org") + +function Invoke-Pip { + param([string[]]$PipArgs, [string]$What) + $ErrorActionPreference = "Continue" + & $VenvPy -m pip install @PipArgs + if ($LASTEXITCODE -ne 0) { + Write-Host " pip failed; retrying with --trusted-host flags ..." -ForegroundColor Yellow + & $VenvPy -m pip install @trusted @PipArgs + } + $ErrorActionPreference = "Stop" + if ($LASTEXITCODE -ne 0) { throw "pip install failed for $What." } +} + +Write-Host "[3/5] Installing server dependencies (this can take a few minutes) ..." +Invoke-Pip -PipArgs @("-r", $Reqs) -What "requirements-mcp.txt" +Invoke-Pip -PipArgs @("-e", $EmbRoot) -What "poem_core (editable install)" + +# -------------------------------------------------------------------------- +# 4. Add/update the poem-search entry in LM Studio's mcp.json +# -------------------------------------------------------------------------- +Write-Host "[4/5] Updating $CfgPath ..." +New-Item -ItemType Directory -Force $CfgDir | Out-Null + +$cfg = $null +if (Test-Path $CfgPath) { + $raw = Get-Content $CfgPath -Raw -ErrorAction SilentlyContinue + if ($raw -and $raw.Trim()) { + try { $cfg = $raw | ConvertFrom-Json } + catch { throw "$CfgPath exists but is not valid JSON -- fix or delete it, then re-run. Not overwriting it." } + } +} +if (-not $cfg) { $cfg = [pscustomobject]@{ mcpServers = [pscustomobject]@{} } } +if (-not $cfg.PSObject.Properties["mcpServers"]) { + $cfg | Add-Member -MemberType NoteProperty -Name "mcpServers" -Value ([pscustomobject]@{}) +} + +# Forward slashes: valid on Windows and immune to JSON backslash-escaping bugs. +$entry = [pscustomobject]@{ + command = ($VenvPy -replace "\\", "/") + args = [string[]]@(($ServerPy -replace "\\", "/")) +} +if ($cfg.mcpServers.PSObject.Properties["poem-search"]) { + $cfg.mcpServers."poem-search" = $entry +} else { + $cfg.mcpServers | Add-Member -MemberType NoteProperty -Name "poem-search" -Value $entry +} + +$json = $cfg | ConvertTo-Json -Depth 10 +[System.IO.File]::WriteAllText($CfgPath, $json, (New-Object System.Text.UTF8Encoding($false))) + +# -------------------------------------------------------------------------- +# 5. Offline smoke test: get_statements needs no network, but does load the +# full corpus + graph, so this also proves the server can start here. +# -------------------------------------------------------------------------- +Write-Host "[5/5] Offline smoke test (loads corpus + graph; takes a minute) ..." +$ErrorActionPreference = "Continue" +& $VenvPy (Join-Path $McpDir "try_search.py") "RCADS-25-CG-EN" +$smokeExit = $LASTEXITCODE +$ErrorActionPreference = "Stop" + +Write-Host "" +if ($smokeExit -eq 0) { + Write-Host "== Setup complete ==" -ForegroundColor Green +} else { + Write-Host "== Setup finished, but the smoke test FAILED (exit $smokeExit) ==" -ForegroundColor Yellow + Write-Host " Check the error above. Common causes: embeddings/TTLs missing on the share, or a dependency that failed to install." +} +Write-Host "Venv: $VenvPy" +Write-Host "Config: $CfgPath (server name: poem-search)" +Write-Host "" +Write-Host "Next: restart LM Studio -> Program tab (chip icon) -> enable 'poem-search'." +Write-Host "First load is slow (~860 embedding files + RDF graph)." +Write-Host "'search' needs the RPI network/VPN; 'get_statements' works offline." diff --git a/embeddings/MCP/test_mcp.py b/embeddings/MCP/test_mcp.py new file mode 100644 index 00000000..9aa01a49 --- /dev/null +++ b/embeddings/MCP/test_mcp.py @@ -0,0 +1,181 @@ +#!/usr/bin/env python3 +"""Tests for the POEM MCP server tools. + +Designed to run fully OFFLINE (no embedding server / RPI network needed): + * graph_lookup / get_statements hit only the local RDF graph. + * the search-shape test monkeypatches the embedding call. + +Run with the MCP venv interpreter: + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + o:\\POEM\\embeddings\\MCP\\test_mcp.py -v + +A single live end-to-end test (real embedding call) is gated behind +POEM_TEST_NETWORK=1 and skipped by default. +""" +import os +import sys + +import numpy as np +import pytest + +# Make the MCP folder importable regardless of pytest's rootdir/cwd. +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +import graph_lookup # noqa: E402 +import mcp_server as srv # noqa: E402 (import loads corpus + graph once) + +# Known fixtures from the POEM graph. +INSTRUMENT_ID = "RCADS-25-CG-EN" # instrument: notation == code == label +SCALE_ID = "SP" # scale notation +SCALE_LABEL = "Social Phobia (9.1)" # scale rdfs:label (the embedding entity) +COLLECTION_ID = "RCADS" # collection: id falls back to rdfs:label + + +@pytest.fixture(scope="session", autouse=True) +def _graph(): + graph_lookup.ensure_loaded() + + +# --------------------------------------------------------------------------- +# Entity resolution +# --------------------------------------------------------------------------- + +def test_find_iri_resolves_each_section(): + assert graph_lookup.find_iri(INSTRUMENT_ID) is not None + assert graph_lookup.find_iri(SCALE_ID) is not None + assert graph_lookup.find_iri(COLLECTION_ID) is not None + + +def test_find_iri_unknown_is_none(): + assert graph_lookup.find_iri("NO-SUCH-ID-123") is None + + +def test_resolve_instrument_id_equals_label(): + eid, label = graph_lookup.resolve_entity(INSTRUMENT_ID, "instruments") + assert eid == INSTRUMENT_ID + assert label == INSTRUMENT_ID + + +def test_resolve_scale_label_recovers_notation(): + # The scale's embedding entity is its rdfs:label; id must be the notation. + eid, label = graph_lookup.resolve_entity(SCALE_LABEL, "scales") + assert eid == SCALE_ID + assert label == SCALE_LABEL + + +# --------------------------------------------------------------------------- +# get_statements +# --------------------------------------------------------------------------- + +def test_get_statements_shape_and_keys(): + sts = graph_lookup.get_statements(INSTRUMENT_ID) + assert isinstance(sts, list) and sts + for s in sts: + assert set(s) == {"property", "value", "value_id"} + assert isinstance(s["property"], str) and s["property"] + assert isinstance(s["value"], str) and s["value"] + assert s["value_id"] is None or isinstance(s["value_id"], str) + + +def test_get_statements_instrument_has_type_members_and_chain(): + sts = graph_lookup.get_statements(INSTRUMENT_ID) + props = {s["property"] for s in sts} + assert "instance of" in props + assert "has member" in props + # At least one object is itself a graph entity (chainable id present). + assert any(s["value_id"] for s in sts) + # No bare unresolved item-id leaks through as a value. + assert not any(s["value"].isdigit() for s in sts) + + +def test_get_statements_chained_value_id_resolves(): + sts = graph_lookup.get_statements(INSTRUMENT_ID) + chain_ids = [s["value_id"] for s in sts if s["value_id"]] + assert chain_ids + # Feed a chainable id back in -- the described conversational flow. + follow = graph_lookup.get_statements(chain_ids[0]) + assert isinstance(follow, list) and follow + + +def test_get_statements_scale_has_notation_and_label(): + sts = graph_lookup.get_statements(SCALE_ID) + pairs = {(s["property"], s["value"]) for s in sts} + assert ("notation", SCALE_ID) in pairs + assert ("label", SCALE_LABEL) in pairs + + +def test_get_statements_unknown_raises(): + with pytest.raises(ValueError): + graph_lookup.get_statements("NO-SUCH-ID-123") + + +# --------------------------------------------------------------------------- +# search tool (offline via a stubbed embedding call) +# --------------------------------------------------------------------------- + +@pytest.fixture +def stub_embed(monkeypatch): + """Replace the network embedding call with a fixed unit vector.""" + dim = srv._EMB.shape[1] + vec = np.ones(dim, dtype=np.float32) + monkeypatch.setattr(srv, "embed_query", lambda q: vec) + return vec + + +def test_search_returns_enriched_shape(stub_embed): + results = srv.search("anxiety in children", top_k=3) + assert isinstance(results, list) and 1 <= len(results) <= 3 + for r in results: + assert set(r) == { + "id", "label", "section", "score", + "type", "description", "aliases", "snippet", + } + assert r["section"] in srv.SECTIONS + assert isinstance(r["score"], float) + assert isinstance(r["id"], str) and r["id"] + assert isinstance(r["label"], str) and r["label"] + assert r["type"] is None or isinstance(r["type"], str) + assert r["description"] is None or isinstance(r["description"], str) + assert isinstance(r["aliases"], list) + assert isinstance(r["snippet"], str) + + +def test_search_section_filter(stub_embed): + results = srv.search("depression", top_k=5, section="scales") + assert results + assert all(r["section"] == "scales" for r in results) + + +def test_search_ids_are_chainable_into_get_statements(stub_embed): + # The two-call flow: search -> take an id -> get_statements. + results = srv.search("social phobia", top_k=3, section="scales") + sts = srv.get_statements(results[0]["id"]) + assert isinstance(sts, list) and sts + + +def test_search_validates_arguments(stub_embed): + with pytest.raises(ValueError): + srv.search("x", metric="Nonexistent") + with pytest.raises(ValueError): + srv.search("x", section="nonexistent") + with pytest.raises(ValueError): + srv.search("x", top_k=0) + + +# --------------------------------------------------------------------------- +# Optional live end-to-end (real embedding server) -- skipped by default +# --------------------------------------------------------------------------- + +@pytest.mark.skipif( + os.environ.get("POEM_TEST_NETWORK") != "1", + reason="set POEM_TEST_NETWORK=1 to run the live embedding-server test", +) +def test_search_live_then_statements(): + results = srv.search("caregiver report of child depression", top_k=3) + assert results + sts = srv.get_statements(results[0]["id"]) + assert sts + + +if __name__ == "__main__": + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/MCP/test_mcp_intensive.py b/embeddings/MCP/test_mcp_intensive.py new file mode 100644 index 00000000..b30b8393 --- /dev/null +++ b/embeddings/MCP/test_mcp_intensive.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python3 +"""Intensive edge-case tests for the MCP server, complementing test_mcp.py: + + * A wide matrix of nonexistent/malformed entity ids passed to the actual + `get_statements` tool (not just graph_lookup directly). + * Search argument edge cases beyond the basic validation already covered. + * The MCP_TRANSPORT resolution logic (stdio/http/unknown), including one + real subprocess black-box check of the __main__ entrypoint. + * The /health liveness route, exercised in-process over the real ASGI app + (no network port bound). + * The startup failure paths added for container deployments: the 0-triples + graph guard and the generic-exception-exits-cleanly contract. + +Designed to run fully OFFLINE (no embedding server needed): the search tests +monkeypatch the embedding call, exactly like test_mcp.py. + +Run with the MCP venv interpreter: + embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + embeddings\\MCP\\test_mcp_intensive.py -v +""" +from __future__ import annotations + +import os +import subprocess +import sys + +import numpy as np +import pytest + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +import graph_lookup # noqa: E402 +import mcp_server as srv # noqa: E402 + + +@pytest.fixture +def stub_embed(monkeypatch): + """Replace the network embedding call with a fixed unit vector (same + convention as test_mcp.py).""" + dim = srv._EMB.shape[1] + vec = np.ones(dim, dtype=np.float32) + monkeypatch.setattr(srv, "embed_query", lambda q: vec) + return vec + + +# --------------------------------------------------------------------------- +# get_statements -- a wide matrix of ids that don't (or shouldn't) resolve. +# Every one of these must raise ValueError specifically -- not TypeError, +# AttributeError, KeyError, or anything else that would surface as a raw +# traceback in a real client instead of a clean tool error. +# --------------------------------------------------------------------------- + +NONEXISTENT_IDS = [ + "", + " ", + "NO-SUCH-ID-999", + "rcads-25-cg-en", # real id, wrong case -- resolution is case-sensitive + "RCADS_25_CG_EN", # underscores instead of hyphens + "RCADS-25-CG-ÉN", # unicode lookalike + "x" * 500, # very long garbage + "../../etc/passwd", # path-traversal-shaped + "'; DROP TABLE instruments; --", # injection-shaped + "12345", # plausible-looking numeric id + "", + "RCADS-25-CG-EN ", # trailing whitespace on an otherwise-real id + " RCADS-25-CG-EN", # leading whitespace on an otherwise-real id +] + + +@pytest.mark.parametrize("bad_id", NONEXISTENT_IDS) +def test_get_statements_rejects_nonexistent_ids(bad_id): + with pytest.raises(ValueError): + srv.get_statements(bad_id) + + +def test_get_statements_rejects_none(): + with pytest.raises(ValueError): + srv.get_statements(None) # type: ignore[arg-type] + + +def test_get_statements_error_message_names_the_bad_id(): + bad_id = "TOTALLY-MADE-UP-ID" + with pytest.raises(ValueError, match=r"TOTALLY-MADE-UP-ID"): + srv.get_statements(bad_id) + + +def test_get_statements_still_works_for_a_real_id_after_failures(): + """Guards against a stateful bug where a failed lookup corrupts the + reverse indexes for subsequent (valid) lookups.""" + with pytest.raises(ValueError): + srv.get_statements("NO-SUCH-ID") + sts = srv.get_statements("RCADS-25-CG-EN") + assert isinstance(sts, list) and sts + + +# --------------------------------------------------------------------------- +# search -- argument edge cases beyond test_mcp.py's basic validation. +# --------------------------------------------------------------------------- + +@pytest.mark.parametrize("bad_top_k", [-1, 0, -1000000]) +def test_search_rejects_non_positive_top_k(stub_embed, bad_top_k): + with pytest.raises(ValueError): + srv.search("anxiety", top_k=bad_top_k) + + +def test_search_rejects_wrong_case_section(stub_embed): + with pytest.raises(ValueError): + srv.search("anxiety", section="Instruments") # real value is lowercase + + +def test_search_rejects_wrong_case_metric(stub_embed): + with pytest.raises(ValueError): + srv.search("anxiety", metric="cosine similarity") # real value is title-case + + +def test_search_rejects_empty_string_section(stub_embed): + with pytest.raises(ValueError): + srv.search("anxiety", section="") + + +def test_search_handles_empty_query_without_crashing(stub_embed): + results = srv.search("", top_k=3) + assert isinstance(results, list) and len(results) <= 3 + + +def test_search_handles_whitespace_only_query(stub_embed): + results = srv.search(" ", top_k=3) + assert isinstance(results, list) and len(results) <= 3 + + +def test_search_handles_unicode_query(stub_embed): + results = srv.search("不安障害の質問票", top_k=3) + assert isinstance(results, list) and len(results) <= 3 + + +def test_search_top_k_larger_than_corpus_does_not_crash(stub_embed): + huge = 5000 # corpus is 778 vectors total + results = srv.search("anxiety", top_k=huge) + assert isinstance(results, list) + assert 0 < len(results) <= huge + + +# --------------------------------------------------------------------------- +# _resolve_transport -- MCP_TRANSPORT/MCP_HOST/MCP_PORT validation. +# --------------------------------------------------------------------------- + +@pytest.fixture(autouse=True) +def _clean_transport_env(monkeypatch): + for var in ("MCP_TRANSPORT", "MCP_HOST", "MCP_PORT"): + monkeypatch.delenv(var, raising=False) + + +def test_resolve_transport_default_is_stdio(): + assert srv._resolve_transport() == ("stdio", "127.0.0.1", 8100) + + +def test_resolve_transport_http(monkeypatch): + monkeypatch.setenv("MCP_TRANSPORT", "http") + assert srv._resolve_transport() == ("http", "127.0.0.1", 8100) + + +def test_resolve_transport_case_insensitive(monkeypatch): + monkeypatch.setenv("MCP_TRANSPORT", "HTTP") + transport, _, _ = srv._resolve_transport() + assert transport == "http" + + +def test_resolve_transport_custom_host_and_port(monkeypatch): + monkeypatch.setenv("MCP_TRANSPORT", "http") + monkeypatch.setenv("MCP_HOST", "0.0.0.0") + monkeypatch.setenv("MCP_PORT", "9999") + assert srv._resolve_transport() == ("http", "0.0.0.0", 9999) + + +def test_resolve_transport_unknown_value_raises(monkeypatch): + monkeypatch.setenv("MCP_TRANSPORT", "carrier-pigeon") + with pytest.raises(ValueError, match="carrier-pigeon"): + srv._resolve_transport() + + +@pytest.mark.slow +def test_mcp_server_subprocess_exits_cleanly_on_unknown_transport(): + """Black-box proof that the __main__ entrypoint actually surfaces + _resolve_transport()'s ValueError as a clean non-zero exit, not just that + the pure function raises in-process (see the unit tests above). Spawns a + real subprocess (full corpus + graph load) -- see TESTING.md "Fast vs. + full test runs" to skip this in a quick dev loop.""" + env = os.environ.copy() + env["VECTOR_BACKEND"] = "numpy" + env["MCP_TRANSPORT"] = "carrier-pigeon" + script = os.path.join(os.path.dirname(os.path.abspath(__file__)), "mcp_server.py") + result = subprocess.run( + [sys.executable, script], env=env, capture_output=True, text=True, timeout=90, + ) + assert result.returncode != 0 + assert "Unknown MCP_TRANSPORT" in result.stderr + assert "carrier-pigeon" in result.stderr + + +# --------------------------------------------------------------------------- +# /health -- exercised in-process over the real ASGI app, no port bound. +# --------------------------------------------------------------------------- + +def test_health_route_reports_ok_and_real_counts(): + from starlette.testclient import TestClient + + app = srv.mcp.http_app() + with TestClient(app) as client: + resp = client.get("/health") + assert resp.status_code == 200 + body = resp.json() + assert body["status"] == "ok" + assert body["paragraphs"] == len(srv._TEXTS) + assert body["graph_triples"] == len(graph_lookup._G) + assert body["vector_backend"] in ("NumpyVectorStore", "MilvusVectorStore") + + +# --------------------------------------------------------------------------- +# _startup() failure paths -- the container-deployment guards. +# +# These intentionally corrupt module globals via mocked loaders, so each test +# snapshots and restores srv._EMB/_TEXTS/_SECS/_STORE itself (monkeypatch only +# undoes attribute swaps *it* performed, not reassignments _startup() makes to +# module globals internally) -- otherwise a failure here would silently break +# every other test in this file and in test_mcp.py that runs afterward in the +# same process. +# --------------------------------------------------------------------------- + +@pytest.fixture +def _preserve_server_state(): + saved = (srv._EMB, srv._TEXTS, srv._SECS, srv._STORE) + saved_graph = graph_lookup._G + yield + srv._EMB, srv._TEXTS, srv._SECS, srv._STORE = saved + graph_lookup._G = saved_graph + + +def test_startup_zero_triples_is_a_fatal_error(_preserve_server_state, monkeypatch, capsys): + real_emb, real_texts, real_secs = srv._EMB, srv._TEXTS, srv._SECS + monkeypatch.setattr(srv, "load_embeddings", lambda: (real_emb, real_texts, real_secs)) + monkeypatch.setattr(graph_lookup, "ensure_loaded", lambda: None) + monkeypatch.setattr(graph_lookup, "_G", []) # simulate an empty/never-loaded graph + + with pytest.raises(SystemExit) as exc_info: + srv._startup() + assert exc_info.value.code == 1 + err = capsys.readouterr().err + assert "0 triples" in err + assert "FATAL" in err + + +def test_startup_generic_exception_exits_cleanly_not_a_traceback_escape( + _preserve_server_state, monkeypatch, capsys, +): + def boom(): + raise OSError("disk full") + + monkeypatch.setattr(srv, "load_embeddings", boom) + + with pytest.raises(SystemExit) as exc_info: + srv._startup() + assert exc_info.value.code == 1 + err = capsys.readouterr().err + assert "FATAL" in err + assert "disk full" in err + + +def test_startup_succeeds_again_after_a_prior_failure(_preserve_server_state): + """Confirms _startup() is safely re-runnable: a failing call (mocked + load_embeddings, scoped to the `with` block below) doesn't leave anything + behind that breaks a subsequent real call with the real loaders.""" + with pytest.MonkeyPatch.context() as mp: + mp.setattr(srv, "load_embeddings", lambda: (_ for _ in ()).throw(OSError("boom"))) + with pytest.raises(SystemExit): + srv._startup() + + srv._startup() # real loaders again, outside the `with` block + assert srv._TEXTS is not None and len(srv._TEXTS) > 0 + assert len(graph_lookup._G) > 0 + + +if __name__ == "__main__": + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/MCP/try_search.py b/embeddings/MCP/try_search.py new file mode 100644 index 00000000..6a51e63c --- /dev/null +++ b/embeddings/MCP/try_search.py @@ -0,0 +1,47 @@ +"""Quick standalone check of the two tools (no MCP protocol involved). + +Loads mcp_server.py and calls its `search` and `get_statements` functions +directly, demonstrating the two-call flow a chatbot would use: search by +topic, then read one result's relationships from the graph. Run with the MCP +venv python: + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe o:\\POEM\\embeddings\\MCP\\try_search.py + +`search` hits the embedding server (idea-llm-01:11435) and only succeeds on the +RPI network/VPN; off-network it times out. `get_statements` is offline (pure +graph lookup) -- pass an id on the command line to exercise it without network: + ... try_search.py RCADS-25-CG-EN +""" +import os +import sys +import importlib.util as u + +_HERE = os.path.dirname(os.path.abspath(__file__)) +s = u.spec_from_file_location("mcp_server", os.path.join(_HERE, "mcp_server.py")) +m = u.module_from_spec(s) +s.loader.exec_module(m) + + +def show_statements(entity_id: str) -> None: + print(f"\nget_statements({entity_id!r}):") + for st in m.get_statements(entity_id): + chain = f" -> id={st['value_id']}" if st["value_id"] else "" + print(f" {st['property']}: {st['value']}{chain}") + + +# Offline path: an id was supplied -> just exercise get_statements (no network). +if len(sys.argv) > 1: + show_statements(sys.argv[1]) + sys.exit(0) + +# Full flow: search (needs RPI network), then describe the top hit. +results = m.search("instruments that measure anxiety in children", top_k=5) +for r in results: + print(f"[{r['section']}] {r['id']} ({r['label']}) score={r['score']:+.4f}") + +if results: + show_statements(results[0]["id"]) + +''' +MCP\.venv-mcp\Scripts\python.exe embeddings/MCP/try_search.py RCADS-25-CG-EN # offline +fastmcp dev inspector embeddings/MCP/mcp_server.py +''' \ No newline at end of file diff --git a/embeddings/PIPELINE_DOCS.md b/embeddings/PIPELINE_DOCS.md deleted file mode 100644 index 3727229f..00000000 --- a/embeddings/PIPELINE_DOCS.md +++ /dev/null @@ -1,536 +0,0 @@ -# POEM Embeddings Pipeline — Documentation - -Complete reference for replicating the semantic search pipeline on top of the POEM ontology. - ---- - -## Overview - -The pipeline converts the POEM RDF knowledge graph into searchable vector embeddings in four stages: - -``` -individualsFull.ttl + instruments.ttl + scales.ttl + ... - | - v - generate_text_templates.py → templates_official.txt - | - v - sample_embeddings.py (connectivity check — run once) - | - v - generate_embeddings.py → instruments/ scales/ collections/ - (paragraph_N.npy + texts.npy per section) - | - v - search_similarity.py ← query sentence → ranked results - | - v - test_search_similarity.py → test_results.txt -``` - ---- - -## Prerequisites - -**Python:** 3.10 or later (uses `tuple[...]` type hints) - -**Install dependencies:** -```bash -pip install openai numpy rdflib pytest -``` - -| Package | Used by | -|----------|--------------------------------------------------------------------------| -| `openai` | sample_embeddings.py, generate_embeddings.py, search_similarity.py | -| `numpy` | generate_embeddings.py, search_similarity.py, test_search_similarity.py | -| `rdflib` | generate_text_templates.py | -| `pytest` | test_search_similarity.py | - -**Network access:** The embedding endpoint is hosted at RPI's IDEA cluster: -``` -http://idea-llm-02.idea.rpi.edu:1234/v1 -``` -This endpoint is only reachable when on the RPI campus network or connected via VPN. No API key is required (`api_key="not-needed"` is set in all scripts). If a script raises `httpx.ConnectTimeout` or `openai.APITimeoutError`, connect to VPN and retry. - ---- - -## Step-by-Step Replication - -### Step 1 — Generate text templates from the RDF graph - -**Script:** `embeddings/generate_text_templates.py` - -```bash -# Generate all three sections (instruments, scales, collections) -python embeddings/generate_text_templates.py - -# Write to a custom output file -python embeddings/generate_text_templates.py --output embeddings/templates_official.txt - -# Generate only one section -python embeddings/generate_text_templates.py --only instruments -python embeddings/generate_text_templates.py --only scales -python embeddings/generate_text_templates.py --only collections -``` - -**Expected output:** A text file with three sections delimited by `=== INSTRUMENTS ===`, `=== SCALES ===`, and `=== COLLECTIONS ===`. Each paragraph describes one entity from the ontology. - ---- - -### Step 2 — Verify the embedding endpoint - -**Script:** `embeddings/sample_embeddings.py` - -Run this before the full pipeline to confirm the embedding server is reachable. It embeds the first 3 template blocks and prints the vector length for each. - -```bash -python embeddings/sample_embeddings.py -``` - -**Expected output:** -``` -Text 0 embedding length: 2048 - Preview: GAD-7. Attributes include:... - -Text 1 embedding length: 2048 - Preview: MTT-35-CG-EN-1. Attributes include:... -... -``` - -If this raises `httpx.ConnectTimeout`, you are not on the RPI network. Connect to VPN and retry. - ---- - -### Step 3 — Generate embeddings and save as numpy files - -**Script:** `embeddings/generate_embeddings.py` - -```bash -python embeddings/generate_embeddings.py -``` - -**Expected output:** -``` -Section 'instruments': 5732 paragraphs -Section 'scales': 408 paragraphs -Section 'collections': 54 paragraphs - -[instruments] Saved texts index (5732 entries) - Embedding batch 1 (50 texts)... - ... - Saved 5732 paragraph files to embeddings/instruments/ - -[scales] Saved texts index (408 entries) - ... - -[collections] Saved texts index (54 entries) - ... - -Done! -``` - ---- - -### Step 4 — Search with similarity metrics - -**Script:** `embeddings/search_similarity.py` - -Requires VPN/campus network access (calls the embedding endpoint to vectorize the query). - -```bash -# Single query -python embeddings/search_similarity.py "instruments that measure anxiety in children" - -# Adjust number of results per metric (default: 5) -python embeddings/search_similarity.py "caregiver therapy attendance" --top-k 10 - -# Interactive mode — type multiple queries without restarting -python embeddings/search_similarity.py -``` - -**Expected output (per metric):** -``` -====================================================================== - Cosine Similarity — Top 5 results -====================================================================== - # 1 [instruments ] score=+0.8912 - RCADS-25-Y-EN. Attributes include: - instance of: psychometric questionnaire ... - # 2 [instruments ] score=+0.8801 - ... -``` - ---- - -### Step 5 — Run the test suite - -**Script:** `embeddings/test_search_similarity.py` - -```bash -# Recommended: run directly — prints to console AND saves to test_results.txt -python embeddings/test_search_similarity.py - -# Or run via pytest -python -m pytest embeddings/test_search_similarity.py -v - -# Unit tests only — no VPN or .npy files needed -python -m pytest embeddings/test_search_similarity.py -v -k "TestSimilarityMetrics" - -# Function-import integration tests only -python -m pytest embeddings/test_search_similarity.py -v -k "TestSearchQueries" - -# CLI subprocess tests only -python -m pytest embeddings/test_search_similarity.py -v -k "TestCLISearch" -``` - -Results are saved to `embeddings/test_results.txt` when run directly with `python`. - -`TestSearchQueries` and `TestCLISearch` are **automatically skipped** if the `embeddings/instruments/` folder is absent or empty — complete Step 3 first to enable them. - -`TestCLISearch` also writes two result files to `embeddings/cli_query_results/` during the run. - ---- - -## Running with Podman - -Podman is the recommended container runtime — it is daemonless and rootless, which fits research/HPC environments like RPI's clusters. - -### Prerequisites - -```bash -# Install Podman (Fedora/RHEL) -sudo dnf install podman podman-compose - -# Install Podman (Debian/Ubuntu) -sudo apt install podman - -# Install podman-compose via pip (any OS) -pip install podman-compose -``` - -### Build the image - -Run from the **project root** (one level above `embeddings/`): - -```bash -podman build -f docker/Containerfile-embeddings -t poem-embeddings . -``` - -The image is built from `python:3.11-slim` and installs all dependencies from `embeddings/requirements.txt`. - -### Volume layout - -| Host path | Container path | Access | -|-----------|----------------|--------| -| Your RDF graph folder (TTL files) | `/data/graph` | read-only | -| Output folder (.npy files + templates) | `/data/embeddings` | read-write | - -### Run the full pipeline (templates → embed) - -```bash -podman run --rm \ - -v /path/to/your/graph:/data/graph:ro,Z \ - -v /path/to/output:/data/embeddings:Z \ - poem-embeddings pipeline -``` - -The `:Z` label relabels volumes for SELinux — it is a no-op on non-SELinux systems. - -### Available commands - -| Command | What it does | -|---------|-------------| -| `pipeline` | Generate templates then embeddings (default) | -| `templates` | Run `generate_text_templates.py` only | -| `sample` | Verify the embedding endpoint is reachable | -| `embed` | Run `generate_embeddings.py` only | -| `search "query"` | Run a similarity search query | -| `test` | Run the pytest test suite | - -```bash -# Single search query -podman run --rm \ - -v /path/to/output:/data/embeddings:Z \ - poem-embeddings search "instruments that measure anxiety in children" - -# Verify the endpoint before a full run -podman run --rm poem-embeddings sample -``` - -### Override environment variables - -Any of the following can be set with `-e` to point the pipeline at a different graph or embedding server: - -| Variable | Default | Purpose | -|----------|---------|---------| -| `POEM_PROJECT_ROOT` | `/data/graph` | Root of the mounted RDF graph | -| `TEMPLATES_OUTPUT` | `/data/embeddings/templates.txt` | Where templates are written | -| `TEMPLATES_PATH` | `/data/embeddings/templates.txt` | Templates file read by `embed` | -| `EMBEDDINGS_DIR` | `/data/embeddings` | Where `.npy` files are written/read | -| `EMBED_BASE_URL` | `http://idea-llm-02.idea.rpi.edu:1234/v1` | Embedding server URL | -| `EMBED_MODEL` | `qwen3-embedding:latest` | Model name on the server | -| `BATCH_SIZE` | `50` | Texts per API call | - -```bash -# Use a different embedding server -podman run --rm \ - -e EMBED_BASE_URL=http://my-server:8080/v1 \ - -e EMBED_MODEL=my-model:latest \ - -v /path/to/graph:/data/graph:ro,Z \ - -v /path/to/output:/data/embeddings:Z \ - poem-embeddings pipeline -``` - -### Using podman-compose - -A compose file is provided at `docker/embeddings-compose.yml`. Copy it and the `docker/` folder to your working directory, then place your TTL files in a `graph/` subfolder: - -``` -myproject/ -├── graph/ ← put your .ttl files here -├── embeddings_output/ ← created automatically -└── docker/ - ├── Containerfile-embeddings - ├── embeddings-compose.yml - └── entrypoint.sh -``` - -```bash -# Build -podman-compose -f docker/embeddings-compose.yml build - -# Run pipeline -podman-compose -f docker/embeddings-compose.yml run --rm embeddings pipeline - -# Search -podman-compose -f docker/embeddings-compose.yml run --rm embeddings search "anxiety instruments" -``` - ---- - -## Script Reference - -### `generate_text_templates.py` - -| Property | Value | -|----------|-------| -| **Purpose** | Queries the POEM RDF knowledge graph via SPARQL and formats results as natural-language text blocks | -| **Input** | `individualsFull.ttl`, `individuals/*.ttl`, `ontology/*.ttl`, `POEM.rdf` | -| **Output** | A `.txt` file with `=== INSTRUMENTS ===`, `=== SCALES ===`, `=== COLLECTIONS ===` sections | -| **Default output path** | `embeddings/templates.txt` | -| **Requires network** | No | - -**Key configuration:** -- `PROJECT_ROOT` — auto-detected from script location (one level up from `embeddings/`) -- `KEYWORDS` — TTL files matching `("collection", "instrument", "scale")` are loaded automatically -- SPARQL queries: `INSTRUMENT_QUERY`, `SCALE_QUERY`, `COLLECTION_QUERY` — edit these to change what fields are extracted - -**CLI flags:** - -| Flag | Default | Description | -|------|---------|-------------| -| `--output FILE` | `embeddings/templates.txt` | Path to write the output text file | -| `--only {instruments,scales,collections}` | *(all three)* | Generate only one section | - ---- - -### `sample_embeddings.py` - -| Property | Value | -|----------|-------| -| **Purpose** | Minimal connectivity check — embeds 3 blocks and prints vector lengths | -| **Input** | `embeddings/templates.txt` (first 3 non-header blocks) | -| **Output** | Printed embedding lengths and vector previews to stdout | -| **Endpoint** | `http://idea-llm-02.idea.rpi.edu:1234/v1` | -| **Model** | `qwen3-embedding:latest` | -| **Requires network** | Yes — RPI VPN or campus | - -Run this before `generate_embeddings.py` whenever the endpoint may have changed or after a period of inactivity. - ---- - -### `generate_embeddings.py` - -| Property | Value | -|----------|-------| -| **Purpose** | Embeds all template blocks and saves one `.npy` file per paragraph | -| **Input** | `embeddings/templates_official.txt` | -| **Output** | `embeddings/instruments/`, `embeddings/scales/`, `embeddings/collections/` | -| **Endpoint** | `http://idea-llm-02.idea.rpi.edu:1234/v1` | -| **Model** | `qwen3-embedding:latest` | -| **Requires network** | Yes — RPI VPN or campus | - -**Key configuration constants** (edit at top of file): - -| Constant | Default | Description | -|----------|---------|-------------| -| `TEMPLATES_PATH` | `embeddings/templates_official.txt` | Input file | -| `BATCH_SIZE` | `50` | Number of texts per API call | - -**Output structure per section:** - -| File | Shape | dtype | Description | -|------|-------|-------|-------------| -| `texts.npy` | `(N,)` | object | Source text strings, index-aligned with paragraph files | -| `paragraph_0.npy` | `(dim,)` | float32 | Embedding vector for paragraph 0 | -| `paragraph_1.npy` | `(dim,)` | float32 | Embedding vector for paragraph 1 | -| ... | | | | - ---- - -### `search_similarity.py` - -| Property | Value | -|----------|-------| -| **Purpose** | Embeds a query and ranks all stored paragraphs by four similarity metrics | -| **Input** | Query string + `embeddings/instruments/`, `embeddings/scales/`, `embeddings/collections/` | -| **Output** | Ranked results printed to stdout per metric | -| **Endpoint** | `http://idea-llm-02.idea.rpi.edu:1234/v1` | -| **Model** | `qwen3-embedding:latest` | -| **Requires network** | Yes — RPI VPN or campus (to embed the query) | - -**Key configuration constants:** - -| Constant | Default | Description | -|----------|---------|-------------| -| `SECTIONS` | `["instruments", "scales", "collections"]` | Subfolders to load | -| `DEFAULT_TOP_K` | `5` | Results shown per metric | - -**CLI flags:** - -| Argument | Default | Description | -|----------|---------|-------------| -| `query` (positional) | *(none — interactive mode)* | Query sentence | -| `--top-k N` | `5` | Number of results per metric | - -**Importable functions** (used by the test suite): - -| Function | Signature | Description | -|----------|-----------|-------------| -| `load_embeddings()` | `→ (embeddings, texts, sections)` | Load all .npy files from disk | -| `embed_query(query)` | `str → np.ndarray` | Embed one string via API | -| `cosine_similarity(q, M)` | `→ np.ndarray` | Scores in `[-1, 1]`, higher = more similar | -| `dot_product(q, M)` | `→ np.ndarray` | Raw dot product, higher = more similar | -| `euclidean_distance(q, M)` | `→ np.ndarray` | Negated L2 distance, higher = more similar | -| `manhattan_distance(q, M)` | `→ np.ndarray` | Negated L1 distance, higher = more similar | - ---- - -### `test_search_similarity.py` - -| Property | Value | -|----------|-------| -| **Purpose** | Test suite — verifies metric math (unit tests) and search correctness (integration tests) | -| **Input** | Stored `.npy` embeddings + embedding endpoint (integration tests only) | -| **Output** | Console output + `embeddings/test_results.txt` | -| **Requires network** | Only for `TestSearchQueries` (integration tests) | - -**Test classes:** - -| Class | Count | Requires endpoint | Requires .npy files | How it tests | -|-------|-------|-------------------|---------------------|--------------| -| `TestSimilarityMetrics` | 15 | No | No | Imports functions directly, uses synthetic numpy vectors | -| `TestSearchQueries` | 29 | Yes | Yes | Imports functions directly, runs real queries via API | -| `TestCLISearch` | 48 | Yes | Yes | Calls `search_similarity.py` as a subprocess, exactly like the terminal | - -`TestSearchQueries` and `TestCLISearch` are auto-skipped if `embeddings/instruments/` is absent or empty. - -Five `TestCLISearch` tests additionally write their output to `embeddings/cli_query_results/`: -- `instruments_anxiety.txt` — instruments measuring anxiety in children -- `scales_ocd_sp.txt` — Social Phobia / OCD scale query -- `symptom_fear_speaking.txt` — fear of public speaking (SNOMED symptom) -- `teacher_informant.txt` — teacher informant school anxiety query (top-10) -- `rcads47_full.txt` — RCADS-47 full-scale query (top-10) - -`TestCLISearch` query categories: -- Instrument queries by code/name (5) -- `--top-k` flag variants (3) -- Scale queries (3) -- Collection queries (2) -- Verbatim item text (3) -- Edge cases (4) -- SNOMED symptom-grounded queries from `constructs.ttl` (7) -- New informant types from `informants.ttl`: Teacher, Therapist, Adult (3) -- Scale notation queries from `scales.ttl`: SP, SAD, MDD, Clarity, Relationship (5) -- Clinical use-case queries (6) -- Multilingual queries inspired by `itemStems.ttl` (2) -- Write-to-file (5) - ---- - -## Output File Layout - -After running all steps the `embeddings/` folder looks like this: - -``` -embeddings/ -├── generate_text_templates.py -├── sample_embeddings.py -├── generate_embeddings.py -├── search_similarity.py -├── test_search_similarity.py -├── PIPELINE_DOCS.md -├── templates.txt (default output of generate_text_templates.py) -├── templates_official.txt (curated input used by generate_embeddings.py) -├── test_results.txt (saved output of test_search_similarity.py) -├── cli_query_results/ -│ ├── instruments_anxiety.txt (instruments measuring anxiety in children) -│ ├── scales_ocd_sp.txt (Social Phobia / OCD scale query) -│ ├── symptom_fear_speaking.txt (fear of public speaking — SNOMED symptom) -│ ├── teacher_informant.txt (teacher informant school anxiety, top-10) -│ └── rcads47_full.txt (RCADS-47 full-scale query, top-10) -│ -├── instruments/ -│ ├── texts.npy shape (N_inst,) dtype=object -│ ├── paragraph_0.npy shape (embedding_dim,) dtype=float32 -│ ├── paragraph_1.npy -│ └── ... -│ -├── scales/ -│ ├── texts.npy shape (N_scl,) dtype=object -│ ├── paragraph_0.npy -│ └── ... -│ -└── collections/ - ├── texts.npy shape (N_col,) dtype=object - ├── paragraph_0.npy - └── ... -``` - -**To load a stored embedding manually:** -```python -import numpy as np - -# Load one paragraph vector -vec = np.load("embeddings/instruments/paragraph_0.npy") -print(vec.shape) # e.g. (2048,) - -# Look up its source text -texts = np.load("embeddings/instruments/texts.npy", allow_pickle=True) -print(texts[0]) -``` - ---- - -## Similarity Metrics Reference - -| Metric | Formula | Range | Interpretation | -|--------|---------|-------|----------------| -| **Cosine Similarity** | `(q · m) / (‖q‖ ‖m‖)` | `[-1, 1]` | 1 = identical direction, 0 = orthogonal, -1 = opposite. Best metric for semantic meaning regardless of vector magnitude. | -| **Dot Product** | `q · m` | `(-∞, +∞)` | Unnormalized similarity. Sensitive to vector magnitude — larger vectors score higher even at the same angle. | -| **Euclidean (L2)** | `−‖q − m‖₂` | `(-∞, 0]` | Geometric distance, negated so higher = closer. Accounts for both direction and magnitude. | -| **Manhattan (L1)** | `−Σ|qᵢ − mᵢ|` | `(-∞, 0]` | Sum of absolute coordinate differences, negated. More robust to outlier dimensions than L2. | - -All metrics are oriented so that **higher score = more similar**, enabling consistent ranking across all four. - ---- - -## Common Errors - -| Error | Cause | Fix | -|-------|-------|-----| -| `httpx.ConnectTimeout` | Not on RPI network | Connect to RPI VPN or campus Wi-Fi | -| `openai.APITimeoutError` | Same as above | Connect to RPI VPN or campus Wi-Fi | -| `No embeddings found` | Step 3 not yet run | Run `generate_embeddings.py` first | -| `texts.npy missing` | Partial run of Step 3 | Re-run `generate_embeddings.py` | -| `ModuleNotFoundError: numpy` | Dependency missing | `pip install numpy` | -| `ModuleNotFoundError: openai` | Dependency missing | `pip install openai` | diff --git a/embeddings/Pipeline/PIPELINE_DOCS.md b/embeddings/Pipeline/PIPELINE_DOCS.md new file mode 100644 index 00000000..7977886c --- /dev/null +++ b/embeddings/Pipeline/PIPELINE_DOCS.md @@ -0,0 +1,653 @@ +# POEM Embeddings Pipeline — Documentation + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a one-page pipeline quick-start and commands. + +> **TL;DR** — from the repo root, with the RPI VPN connected: +> ```bash +> python embeddings/Pipeline/generate_text_templates.py # RDF graph -> templates.txt +> python embeddings/Pipeline/generate_embeddings.py # templates -> .npy vectors (778 today) +> python embeddings/Pipeline/search_similarity.py "instruments that measure anxiety in children" +> ``` +> No VPN? `sample_embeddings.py` (Step 2 below) tells you immediately if the +> embedding endpoint is unreachable, before you run a full (re)build. + +Complete reference for replicating the semantic search pipeline on top of the POEM ontology. + +--- + +## Overview + +The pipeline converts the POEM RDF knowledge graph into searchable vector embeddings in four stages: + +``` +individualsFull.ttl + instruments.ttl + scales.ttl + ... + | + v + generate_text_templates.py → templates_official.txt + | + v + sample_embeddings.py (connectivity check — run once) + | + v + generate_embeddings.py → instruments/ scales/ collections/ + ({slug}_{hash}.npy + texts.npy + manifest.json per section) + | + v + search_similarity.py ← query sentence → ranked results + | + v + test_search_similarity.py → test_results.txt +``` + +--- + +## Prerequisites + +**Python:** 3.8 or later (matches `TESTING.md`'s `tutorial_env`). Scripts use +modern type-hint syntax (e.g. `tuple[...]`) but start with +`from __future__ import annotations`, which defers annotation evaluation to +strings — so they run fine on 3.8+, not just 3.10+. + +**Install dependencies:** +```bash +pip install openai numpy rdflib pytest +``` + +| Package | Used by | +|----------|--------------------------------------------------------------------------| +| `openai` | sample_embeddings.py, generate_embeddings.py, search_similarity.py | +| `numpy` | generate_embeddings.py, search_similarity.py, test_search_similarity.py | +| `rdflib` | generate_text_templates.py | +| `pytest` | test_search_similarity.py | + +**Network access:** The embedding endpoint defaults to RPI's IDEA cluster: +``` +http://idea-llm-01.idea.rpi.edu:11435/v1 (model: qwen3-embedding, 4096-dim) +``` +This server is HTTP-only (verified on VPN). Override with `EMBED_BASE_URL` / `EMBED_MODEL` (set `https://…` for a TLS-capable endpoint, or point at any OpenAI-compatible embeddings endpoint). The default endpoint is only reachable on the RPI campus network or VPN. No API key is required (`api_key="not-needed"` is set in all scripts). If a script raises `httpx.ConnectTimeout` or `openai.APITimeoutError`, connect to VPN and retry. + +--- + +## Step-by-Step Replication + +### Step 1 — Generate text templates from the RDF graph + +**Script:** `embeddings/Pipeline/generate_text_templates.py` + +```bash +# Generate all registered sections from the default input folder +# (poem-demo/dist/data) +python embeddings/Pipeline/generate_text_templates.py + +# Read instance TTLs from a different folder +python embeddings/Pipeline/generate_text_templates.py --input path/to/data + +# Write to a custom output file +python embeddings/Pipeline/generate_text_templates.py --output embeddings/Pipeline/templates_official.txt + +# Generate only one or several sections (comma-separated) +python embeddings/Pipeline/generate_text_templates.py --only instruments +python embeddings/Pipeline/generate_text_templates.py --only scales,collections + +# Add a NEW section generically — one paragraph per named individual of a class, +# no curated query needed (slug becomes the section/folder name): +python embeddings/Pipeline/generate_text_templates.py --only items --section items=vstoi:Item +``` + +**Expected output:** A text file whose sections are delimited by `=== NAME ===` headers (e.g. `=== INSTRUMENTS ===`, `=== SCALES ===`, `=== COLLECTIONS ===`, and any you add). Each paragraph describes one entity from the ontology. + +**Generic sections.** Sections are driven by a `SECTION_REGISTRY`: the three curated sections (`instruments`, `scales`, `collections`) have tuned SPARQL; any other class can be turned into a section via `--section NAME=prefix:Class` (or a registry entry with just a `class`), which uses a generic runner (`run_generic`) that emits one paragraph per named individual with its outgoing properties. Blank nodes are skipped. + +**Input folder.** `--input` (or the `POEM_DATA_DIR` env) sets the *priority* folder, loaded **first**; default `poem-demo/dist/data`. The rest of the repo's data TTLs (`individualsFull.ttl`, `individuals/`, `browser/backend/data/`, …) are then merged in so nothing is missing (e.g. `constructs.ttl`). RDF merges at the triple level, so the priority folder is never doubled; dependency/`.venv` dirs and the `rcads/` mapping files are excluded. The ontology schema (`ontology/*.ttl`, `POEM.rdf`) is layered on top. + +--- + +### Step 2 — Verify the embedding endpoint + +**Script:** `embeddings/Pipeline/sample_embeddings.py` + +Run this before the full pipeline to confirm the embedding server is reachable. It embeds the first 3 template blocks and prints the vector length for each. + +```bash +python embeddings/Pipeline/sample_embeddings.py +``` + +**Expected output:** +``` +Text 0 embedding length: 4096 + Preview: GAD-7. Attributes include:... + +Text 1 embedding length: 4096 + Preview: MTT-35-CG-EN-1. Attributes include:... +... +``` + +If this raises `httpx.ConnectTimeout`, you are not on the RPI network. Connect to VPN and retry. + +--- + +### Step 3 — Generate embeddings and save as numpy files + +**Script:** `embeddings/Pipeline/generate_embeddings.py` + +```bash +# Full (re)build — embeds every block +python embeddings/Pipeline/generate_embeddings.py + +# Incremental — re-embed ONLY new/changed blocks (uses each section's +# manifest.json); unchanged vectors are kept, removed entities' files deleted +python embeddings/Pipeline/generate_embeddings.py --incremental + +# One or several sections only +python embeddings/Pipeline/generate_embeddings.py --only instruments +``` + +**Incremental updates.** Each section folder holds a `manifest.json` — an ordered +list of `{"hash", "file"}` (one per row of `texts.npy`) where `hash` is the +sha256 of the paragraph text and `file` is its content-addressed vector +(`{slug}_{hash12}.npy`). On `--incremental`, only blocks whose hash is new or +changed are embedded; identical blocks share a vector file; vector files no +longer referenced (removed/renamed entities, or leftovers from the old +`{idx:04d}_{slug}.npy` scheme) are deleted. This is the normal "the graph +evolved → update only the deltas" workflow. + +**Expected output** (shape only — this example is from an early, smaller +demo-scale run; see the note below for the current live corpus size): +``` +Section 'instruments': 176 paragraphs +Section 'scales': 18 paragraphs +Section 'collections': 5 paragraphs + +Embedding backend: qwen3-embedding @ http://idea-llm-01.idea.rpi.edu:11435/v1 +Mode: full rebuild + + [instruments] embedding batch 1 (50 new texts)... + ... +[instruments] embedded 176, reused 0, removed 0 (total 176) -> .../instruments/ + +[scales] embedded 18, reused 0, removed 0 (total 18) -> .../scales/ +[collections] embedded 5, reused 0, removed 0 (total 5) -> .../collections/ + +Done! +``` + +**Current live corpus** (as of this writing, and what every other doc in this +folder — `TESTING.md`, `docker/MILVUS.md`, `MCP/LM_STUDIO.md`, `agent/AGENT.md` +— refers to as "778"): **552 instruments + 217 scales + 9 collections = 778 +vectors.** The counts above are shape-only sample output from an earlier, +smaller run of the same script against a reduced dataset; run +`generate_embeddings.py` yourself against the current `poem-demo/dist/data` to +see the real, current counts. A `--incremental` run shows non-zero +`reused`/`removed` instead of `embedded` for unchanged paragraphs. + +--- + +### Step 4 — Search with similarity metrics + +**Script:** `embeddings/Pipeline/search_similarity.py` + +Requires VPN/campus network access (calls the embedding endpoint to vectorize the query). + +```bash +# Single query +python embeddings/Pipeline/search_similarity.py "instruments that measure anxiety in children" + +# Adjust number of results per metric (default: 5) +python embeddings/Pipeline/search_similarity.py "caregiver therapy attendance" --top-k 10 + +# Interactive mode — type multiple queries without restarting +python embeddings/Pipeline/search_similarity.py +``` + +**Expected output (per metric):** +``` +====================================================================== + Cosine Similarity — Top 5 results +====================================================================== + # 1 [instruments ] score=+0.8912 + RCADS-25-Y-EN. Attributes include: - instance of: psychometric questionnaire ... + # 2 [instruments ] score=+0.8801 + ... +``` + +--- + +### Step 5 — Run the test suite + +**Script:** `embeddings/Pipeline/test_search_similarity.py` + +```bash +# Recommended: run directly — prints to console AND saves to test_results.txt +python embeddings/Pipeline/test_search_similarity.py + +# Or run via pytest +python -m pytest embeddings/Pipeline/test_search_similarity.py -v + +# Unit tests only — no VPN or .npy files needed +python -m pytest embeddings/Pipeline/test_search_similarity.py -v -k "TestSimilarityMetrics" + +# Function-import integration tests only +python -m pytest embeddings/Pipeline/test_search_similarity.py -v -k "TestSearchQueries" + +# CLI subprocess tests only +python -m pytest embeddings/Pipeline/test_search_similarity.py -v -k "TestCLISearch" +``` + +Results are saved to `embeddings/Pipeline/test_results.txt` when run directly with `python`. + +`TestSearchQueries` and `TestCLISearch` are **automatically skipped** if the `embeddings/Pipeline/instruments/` folder is absent or empty — complete Step 3 first to enable them. + +`TestCLISearch` also writes two result files to `embeddings/Pipeline/cli_query_results/` during the run. + +--- + +## Running with Podman + +Podman is the recommended container runtime — it is daemonless and rootless, which fits research/HPC environments like RPI's clusters. + +### Prerequisites + +```bash +# Install Podman (Fedora/RHEL) +sudo dnf install podman podman-compose + +# Install Podman (Debian/Ubuntu) +sudo apt install podman + +# Install podman-compose via pip (any OS) +pip install podman-compose +``` + +### Build the image + +Run from the **project root**: + +```bash +podman build -f embeddings/Pipeline/docker/Containerfile-embeddings -t poem-embeddings embeddings/Pipeline/ +``` + +Or from inside the `embeddings/Pipeline/` directory: + +```bash +podman build -f docker/Containerfile-embeddings -t poem-embeddings . +``` + +The image is built from `python:3.11-slim` and installs all dependencies from `embeddings/Pipeline/requirements.txt`. + +### Volume layout + +| Host path | Container path | Access | +|-----------|----------------|--------| +| Your RDF graph folder (TTL files) | `/data/graph` | read-only | +| Output folder (.npy files + templates) | `/data/embeddings` | read-write | + +### Run the full pipeline (templates → embed) + +```bash +podman run --rm \ + -v /path/to/your/graph:/data/graph:ro,Z \ + -v /path/to/output:/data/embeddings:Z \ + poem-embeddings pipeline +``` + +The `:Z` label relabels volumes for SELinux — it is a no-op on non-SELinux systems. + +### Available commands + +| Command | What it does | +|---------|-------------| +| `pipeline` | Generate templates then embeddings (default) | +| `templates` | Run `generate_text_templates.py` only | +| `sample` | Verify the embedding endpoint is reachable | +| `embed` | Run `generate_embeddings.py` only | +| `search "query"` | Run a similarity search query | +| `test` | Run the pytest test suite | + +```bash +# Single search query +podman run --rm \ + -v /path/to/output:/data/embeddings:Z \ + poem-embeddings search "instruments that measure anxiety in children" + +# Verify the endpoint before a full run +podman run --rm poem-embeddings sample +``` + +### Override environment variables + +Any of the following can be set with `-e` to point the pipeline at a different graph or embedding server: + +| Variable | Default | Purpose | +|----------|---------|---------| +| `POEM_PROJECT_ROOT` | `/data/graph` | Root of the mounted RDF graph | +| `TEMPLATES_OUTPUT` | `/data/embeddings/Pipeline/templates.txt` | Where templates are written | +| `TEMPLATES_PATH` | `/data/embeddings/Pipeline/templates.txt` | Templates file read by `embed` | +| `EMBEDDINGS_DIR` | `/data/embeddings` | Where `.npy` files are written/read | +| `EMBED_BASE_URL` | `http://idea-llm-01.idea.rpi.edu:11435/v1` | Embedding server URL | +| `EMBED_MODEL` | `qwen3-embedding` | Model name on the server | +| `BATCH_SIZE` | `50` | Texts per API call | + +```bash +# Use a different embedding server +podman run --rm \ + -e EMBED_BASE_URL=http://my-server:8080/v1 \ + -e EMBED_MODEL=my-model:latest \ + -v /path/to/graph:/data/graph:ro,Z \ + -v /path/to/output:/data/embeddings:Z \ + poem-embeddings pipeline +``` + +### Using podman-compose + +A compose file is provided at `docker/embeddings-compose.yml`. Copy it and the `docker/` folder to your working directory, then place your TTL files in a `graph/` subfolder: + +``` +myproject/ +├── graph/ ← put your .ttl files here +├── embeddings_output/ ← created automatically +└── docker/ + ├── Containerfile-embeddings + ├── embeddings-compose.yml + └── entrypoint.sh +``` + +```bash +# Build +podman-compose -f embeddings/Pipeline/docker/embeddings-compose.yml build + +# Run pipeline +podman-compose -f embeddings/Pipeline/docker/embeddings-compose.yml run --rm embeddings pipeline + +# Search +podman-compose -f embeddings/Pipeline/docker/embeddings-compose.yml run --rm embeddings search "anxiety instruments" +``` + +### Browser stack (frontend + backend) + +```bash +# Build both images +podman-compose -f embeddings/Pipeline/docker/browser-compose.yml build + +# Start the full browser stack +podman-compose -f embeddings/Pipeline/docker/browser-compose.yml up + +# Frontend: http://localhost:8080 +# Backend API: internal only (http://poem-browser-backend:8000) + +# Tear down +podman-compose -f embeddings/Pipeline/docker/browser-compose.yml down +``` + +--- + +## Script Reference + +### `generate_text_templates.py` + +| Property | Value | +|----------|-------| +| **Purpose** | Queries the POEM RDF knowledge graph via SPARQL and formats results as natural-language text blocks | +| **Input** | `individualsFull.ttl`, `individuals/*.ttl`, `ontology/*.ttl`, `POEM.rdf` | +| **Output** | A `.txt` file with `=== INSTRUMENTS ===`, `=== SCALES ===`, `=== COLLECTIONS ===` sections | +| **Default output path** | `embeddings/Pipeline/templates.txt` | +| **Requires network** | No | + +**Key configuration:** +- `PROJECT_ROOT` — auto-detected from script location (one level up from `embeddings/Pipeline/`) +- `KEYWORDS` — TTL files matching `("collection", "instrument", "scale")` are loaded automatically +- SPARQL queries: `INSTRUMENT_QUERY`, `SCALE_QUERY`, `COLLECTION_QUERY` — edit these to change what fields are extracted + +**CLI flags:** + +| Flag | Default | Description | +|------|---------|-------------| +| `--output FILE` | `embeddings/Pipeline/templates.txt` | Path to write the output text file | +| `--only {instruments,scales,collections}` | *(all three)* | Generate only one section | + +--- + +### `sample_embeddings.py` + +| Property | Value | +|----------|-------| +| **Purpose** | Minimal connectivity check — embeds 3 blocks and prints vector lengths | +| **Input** | `embeddings/Pipeline/templates.txt` (first 3 non-header blocks) | +| **Output** | Printed embedding lengths and vector previews to stdout | +| **Endpoint** | `http://idea-llm-01.idea.rpi.edu:11435/v1` | +| **Model** | `qwen3-embedding` | +| **Requires network** | Yes — RPI VPN or campus | + +Run this before `generate_embeddings.py` whenever the endpoint may have changed or after a period of inactivity. + +--- + +### `generate_embeddings.py` + +| Property | Value | +|----------|-------| +| **Purpose** | Embeds all template blocks and saves one `.npy` file per paragraph | +| **Input** | `embeddings/Pipeline/templates_official.txt` | +| **Output** | `embeddings/Pipeline/instruments/`, `embeddings/Pipeline/scales/`, `embeddings/Pipeline/collections/` | +| **Endpoint** | `http://idea-llm-01.idea.rpi.edu:11435/v1` | +| **Model** | `qwen3-embedding` | +| **Requires network** | Yes — RPI VPN or campus | + +**Key configuration constants** (edit at top of file): + +| Constant | Default | Description | +|----------|---------|-------------| +| `TEMPLATES_PATH` | `embeddings/Pipeline/templates_official.txt` | Input file | +| `BATCH_SIZE` | `50` | Number of texts per API call | + +**Output structure per section:** + +| File | Shape | dtype | Description | +|------|-------|-------|-------------| +| `texts.npy` | `(N,)` | object | Source text strings, index-aligned with the manifest | +| `manifest.json` | — | — | Ordered `[{"hash","file"}]`, one per text row → its vector file | +| `{slug}_{hash12}.npy` | `(dim,)` | float32 | Content-addressed embedding vector for one paragraph | +| ... | | | | + +`load_embeddings()` prefers `manifest.json` (aligning vectors to `texts.npy`), +and falls back to the legacy `{idx:04d}_{slug}.npy` / `paragraph_{idx}.npy` +schemes for older corpora that have no manifest. + +--- + +### `search_similarity.py` + +| Property | Value | +|----------|-------| +| **Purpose** | Embeds a query and ranks all stored paragraphs by four similarity metrics | +| **Input** | Query string + `embeddings/Pipeline/instruments/`, `embeddings/Pipeline/scales/`, `embeddings/Pipeline/collections/` | +| **Output** | Ranked results printed to stdout per metric | +| **Endpoint** | `http://idea-llm-01.idea.rpi.edu:11435/v1` | +| **Model** | `qwen3-embedding` | +| **Requires network** | Yes — RPI VPN or campus (to embed the query) | + +**Key configuration constants:** + +| Constant | Default | Description | +|----------|---------|-------------| +| `SECTIONS` | auto-detected via `discover_sections()` | Section subfolders (any folder under `EMBEDDINGS_DIR` with a `texts.npy`) — a new section becomes searchable with no code change | +| `DEFAULT_TOP_K` | `5` | Results shown per metric | + +**CLI flags:** + +| Argument | Default | Description | +|----------|---------|-------------| +| `query` (positional) | *(none — interactive mode)* | Query sentence | +| `--top-k N` | `5` | Number of results per metric | + +**Importable functions** (used by the test suite): + +| Function | Signature | Description | +|----------|-----------|-------------| +| `load_embeddings()` | `→ (embeddings, texts, sections)` | Load all .npy files from disk | +| `embed_query(query)` | `str → np.ndarray` | Embed one string via API | +| `cosine_similarity(q, M)` | `→ np.ndarray` | Scores in `[-1, 1]`, higher = more similar | +| `dot_product(q, M)` | `→ np.ndarray` | Raw dot product, higher = more similar | +| `euclidean_distance(q, M)` | `→ np.ndarray` | Negated L2 distance, higher = more similar | +| `manhattan_distance(q, M)` | `→ np.ndarray` | Negated L1 distance, higher = more similar | + +--- + +### `test_search_similarity.py` + +| Property | Value | +|----------|-------| +| **Purpose** | Test suite — verifies metric math (unit tests) and search correctness (integration tests) | +| **Input** | Stored `.npy` embeddings + embedding endpoint (integration tests only) | +| **Output** | Console output + `embeddings/Pipeline/test_results.txt` | +| **Requires network** | Only for `TestSearchQueries` (integration tests) | + +**Test classes:** + +| Class | Count | Requires endpoint | Requires .npy files | How it tests | +|-------|-------|-------------------|---------------------|--------------| +| `TestSimilarityMetrics` | 15 | No | No | Imports functions directly, uses synthetic numpy vectors | +| `TestSearchQueries` | 29 | Yes | Yes | Imports functions directly, runs real queries via API | +| `TestCLISearch` | 48 | Yes | Yes | Calls `search_similarity.py` as a subprocess, exactly like the terminal | + +`TestSearchQueries` and `TestCLISearch` are auto-skipped if `embeddings/Pipeline/instruments/` is absent or empty. + +Five `TestCLISearch` tests additionally write their output to `embeddings/Pipeline/cli_query_results/`: +- `instruments_anxiety.txt` — instruments measuring anxiety in children +- `scales_ocd_sp.txt` — Social Phobia / OCD scale query +- `symptom_fear_speaking.txt` — fear of public speaking (SNOMED symptom) +- `teacher_informant.txt` — teacher informant school anxiety query (top-10) +- `rcads47_full.txt` — RCADS-47 full-scale query (top-10) + +`TestCLISearch` query categories: +- Instrument queries by code/name (5) +- `--top-k` flag variants (3) +- Scale queries (3) +- Collection queries (2) +- Verbatim item text (3) +- Edge cases (4) +- SNOMED symptom-grounded queries from `constructs.ttl` (7) +- New informant types from `informants.ttl`: Teacher, Therapist, Adult (3) +- Scale notation queries from `scales.ttl`: SP, SAD, MDD, Clarity, Relationship (5) +- Clinical use-case queries (6) +- Multilingual queries inspired by `itemStems.ttl` (2) +- Write-to-file (5) + +--- + +## Output File Layout + +After running all steps the `embeddings/Pipeline/` folder looks like this: + +``` +embeddings/Pipeline/ +├── generate_text_templates.py +├── sample_embeddings.py +├── generate_embeddings.py +├── search_similarity.py +├── test_search_similarity.py +├── PIPELINE_DOCS.md +├── templates.txt (default output of generate_text_templates.py) +├── templates_official.txt (curated input used by generate_embeddings.py) +├── test_results.txt (saved output of test_search_similarity.py) +├── cli_query_results/ +│ ├── instruments_anxiety.txt (instruments measuring anxiety in children) +│ ├── scales_ocd_sp.txt (Social Phobia / OCD scale query) +│ ├── symptom_fear_speaking.txt (fear of public speaking — SNOMED symptom) +│ ├── teacher_informant.txt (teacher informant school anxiety, top-10) +│ └── rcads47_full.txt (RCADS-47 full-scale query, top-10) +│ +├── instruments/ +│ ├── texts.npy shape (N_inst,) dtype=object +│ ├── manifest.json ordered [{"hash","file"}] → each text row's vector +│ ├── GAD-7_25bd4c3c7ac1.npy shape (4096,) dtype=float32 ({slug}_{hash12}.npy) +│ ├── MTT-35-CG-EN-1_4727bb1c5e9d.npy +│ └── ... +│ +├── scales/ +│ ├── texts.npy shape (N_scl,) dtype=object +│ ├── manifest.json +│ ├── Social-Phobia-9-1_75f6d420ac4a.npy +│ └── ... +│ +└── collections/ + ├── texts.npy shape (N_col,) dtype=object + ├── manifest.json + ├── RCADS_ec8aa468913e.npy + └── ... +``` + +**To load a stored embedding manually:** +```python +import json, numpy as np + +# Resolve the first paragraph's vector via the manifest (row-aligned to texts.npy) +manifest = json.load(open("embeddings/Pipeline/instruments/manifest.json", encoding="utf-8")) +vec = np.load(f"embeddings/Pipeline/instruments/{manifest[0]['file']}") +print(vec.shape) # (4096,) + +# Look up its source text (index-aligned with the manifest) +texts = np.load("embeddings/Pipeline/instruments/texts.npy", allow_pickle=True) +print(texts[0]) +``` + +--- + +## Vector store backend + +Search goes through a small store abstraction (`poem_core.vector_store`, re-exported +as `vector_store.py`) so the same code runs against either backend, chosen by the +`VECTOR_BACKEND` env var: + +> **Deep-dive:** see [`embeddings/docker/MILVUS.md`](../docker/MILVUS.md) for the full +> Milvus integration — code map, collection schema, metric handling, and how to +> verify the live path. + +| Backend | How | Notes | +|---------|-----|-------| +| `milvus` (default) | An **external** Milvus server (Standalone, separate process) via `MilvusClient(MILVUS_URI)` | Each supported metric is a **FLAT** collection → results are *exact* (not approximate), matching numpy. Manhattan (L1), which Milvus has no native metric for, is served by an exact numpy fallback. If the server is unreachable or `pymilvus` is missing, the store **falls back to numpy** with a warning. | +| `numpy` | All vectors in one array, scored by `METRICS` | Zero extra deps; brute-force exact search. Cosine reuses a once-computed normalized matrix. | + +```bash +# 1. Start the external Milvus server (separate process; any OS, incl. Windows): +docker compose -f embeddings/docker/milvus-compose.yml up -d + +# 2. Install the package + Milvus client (blessed setup): +pip install -e embeddings # exposes the shared `poem_core` package +pip install pymilvus # or: pip install -e "embeddings[milvus]" + +# 3. Search (milvus is the default; MILVUS_URI defaults to http://localhost:19530): +python embeddings/Pipeline/search_similarity.py "anxiety in children" + +# Force the pure-numpy backend (no server needed): +VECTOR_BACKEND=numpy python embeddings/Pipeline/search_similarity.py "anxiety in children" +``` + +The collection is built into memory from the canonical `.npy` vectors at startup +("in memory first"); the server's on-disk volumes are incidental and rebuildable. +`MILVUS_TOKEN` authenticates a remote/cloud server (e.g. Zilliz Cloud). + +--- + +## Similarity Metrics Reference + +| Metric | Formula | Range | Interpretation | +|--------|---------|-------|----------------| +| **Cosine Similarity** | `(q · m) / (‖q‖ ‖m‖)` | `[-1, 1]` | 1 = identical direction, 0 = orthogonal, -1 = opposite. Best metric for semantic meaning regardless of vector magnitude. | +| **Dot Product** | `q · m` | `(-∞, +∞)` | Unnormalized similarity. Sensitive to vector magnitude — larger vectors score higher even at the same angle. | +| **Euclidean (L2)** | `−‖q − m‖₂` | `(-∞, 0]` | Geometric distance, negated so higher = closer. Accounts for both direction and magnitude. | +| **Manhattan (L1)** | `−Σ|qᵢ − mᵢ|` | `(-∞, 0]` | Sum of absolute coordinate differences, negated. More robust to outlier dimensions than L2. | + +All metrics are oriented so that **higher score = more similar**, enabling consistent ranking across all four. + +--- + +## Common Errors + +| Error | Cause | Fix | +|-------|-------|-----| +| `httpx.ConnectTimeout` | Not on RPI network | Connect to RPI VPN or campus Wi-Fi | +| `openai.APITimeoutError` | Same as above | Connect to RPI VPN or campus Wi-Fi | +| `No embeddings found` | Step 3 not yet run | Run `generate_embeddings.py` first | +| `texts.npy missing` | Partial run of Step 3 | Re-run `generate_embeddings.py` | +| `ModuleNotFoundError: numpy` | Dependency missing | `pip install numpy` | +| `ModuleNotFoundError: openai` | Dependency missing | `pip install openai` | diff --git a/embeddings/Pipeline/__pycache__/evaluate_search.cpython-312.pyc b/embeddings/Pipeline/__pycache__/evaluate_search.cpython-312.pyc new file mode 100644 index 00000000..7000039e Binary files /dev/null and b/embeddings/Pipeline/__pycache__/evaluate_search.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/evaluate_search.cpython-38.pyc b/embeddings/Pipeline/__pycache__/evaluate_search.cpython-38.pyc new file mode 100644 index 00000000..bc9da4d1 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/evaluate_search.cpython-38.pyc differ diff --git a/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-312.pyc b/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-312.pyc new file mode 100644 index 00000000..a35deca8 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-38.pyc b/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-38.pyc new file mode 100644 index 00000000..b96c728f Binary files /dev/null and b/embeddings/Pipeline/__pycache__/generate_embeddings.cpython-38.pyc differ diff --git a/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-312.pyc b/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-312.pyc new file mode 100644 index 00000000..cbee78bf Binary files /dev/null and b/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-38.pyc b/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-38.pyc new file mode 100644 index 00000000..21152b0d Binary files /dev/null and b/embeddings/Pipeline/__pycache__/generate_text_templates.cpython-38.pyc differ diff --git a/embeddings/Pipeline/__pycache__/mcp_server.cpython-312.pyc b/embeddings/Pipeline/__pycache__/mcp_server.cpython-312.pyc new file mode 100644 index 00000000..f98a8a12 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/mcp_server.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/mcp_server.cpython-38.pyc b/embeddings/Pipeline/__pycache__/mcp_server.cpython-38.pyc new file mode 100644 index 00000000..1d4d15b9 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/mcp_server.cpython-38.pyc differ diff --git a/embeddings/__pycache__/search_similarity.cpython-311.pyc b/embeddings/Pipeline/__pycache__/search_similarity.cpython-311.pyc similarity index 100% rename from embeddings/__pycache__/search_similarity.cpython-311.pyc rename to embeddings/Pipeline/__pycache__/search_similarity.cpython-311.pyc diff --git a/embeddings/Pipeline/__pycache__/search_similarity.cpython-312.pyc b/embeddings/Pipeline/__pycache__/search_similarity.cpython-312.pyc new file mode 100644 index 00000000..f0b46fce Binary files /dev/null and b/embeddings/Pipeline/__pycache__/search_similarity.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/search_similarity.cpython-38.pyc b/embeddings/Pipeline/__pycache__/search_similarity.cpython-38.pyc new file mode 100644 index 00000000..6ac5509e Binary files /dev/null and b/embeddings/Pipeline/__pycache__/search_similarity.cpython-38.pyc differ diff --git a/embeddings/__pycache__/test_search_similarity.cpython-311-pytest-9.0.3.pyc b/embeddings/Pipeline/__pycache__/test_search_similarity.cpython-311-pytest-9.0.3.pyc similarity index 100% rename from embeddings/__pycache__/test_search_similarity.cpython-311-pytest-9.0.3.pyc rename to embeddings/Pipeline/__pycache__/test_search_similarity.cpython-311-pytest-9.0.3.pyc diff --git a/embeddings/Pipeline/__pycache__/test_search_similarity.cpython-312-pytest-9.0.3.pyc b/embeddings/Pipeline/__pycache__/test_search_similarity.cpython-312-pytest-9.0.3.pyc new file mode 100644 index 00000000..0fc9a942 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/test_search_similarity.cpython-312-pytest-9.0.3.pyc differ diff --git a/embeddings/Pipeline/__pycache__/vector_store.cpython-312.pyc b/embeddings/Pipeline/__pycache__/vector_store.cpython-312.pyc new file mode 100644 index 00000000..09651529 Binary files /dev/null and b/embeddings/Pipeline/__pycache__/vector_store.cpython-312.pyc differ diff --git a/embeddings/Pipeline/__pycache__/vector_store.cpython-38.pyc b/embeddings/Pipeline/__pycache__/vector_store.cpython-38.pyc new file mode 100644 index 00000000..a727d6cf Binary files /dev/null and b/embeddings/Pipeline/__pycache__/vector_store.cpython-38.pyc differ diff --git a/embeddings/cli_query_results/instruments_anxiety.txt b/embeddings/Pipeline/cli_query_results/instruments_anxiety.txt similarity index 100% rename from embeddings/cli_query_results/instruments_anxiety.txt rename to embeddings/Pipeline/cli_query_results/instruments_anxiety.txt diff --git a/embeddings/cli_query_results/rcads47_full.txt b/embeddings/Pipeline/cli_query_results/rcads47_full.txt similarity index 100% rename from embeddings/cli_query_results/rcads47_full.txt rename to embeddings/Pipeline/cli_query_results/rcads47_full.txt diff --git a/embeddings/cli_query_results/scales_ocd_sp.txt b/embeddings/Pipeline/cli_query_results/scales_ocd_sp.txt similarity index 100% rename from embeddings/cli_query_results/scales_ocd_sp.txt rename to embeddings/Pipeline/cli_query_results/scales_ocd_sp.txt diff --git a/embeddings/cli_query_results/symptom_fear_speaking.txt b/embeddings/Pipeline/cli_query_results/symptom_fear_speaking.txt similarity index 100% rename from embeddings/cli_query_results/symptom_fear_speaking.txt rename to embeddings/Pipeline/cli_query_results/symptom_fear_speaking.txt diff --git a/embeddings/cli_query_results/teacher_informant.txt b/embeddings/Pipeline/cli_query_results/teacher_informant.txt similarity index 100% rename from embeddings/cli_query_results/teacher_informant.txt rename to embeddings/Pipeline/cli_query_results/teacher_informant.txt diff --git a/embeddings/Pipeline/collections/1_ae1682ef52eb.npy b/embeddings/Pipeline/collections/1_ae1682ef52eb.npy new file mode 100644 index 00000000..faa0c65e Binary files /dev/null and b/embeddings/Pipeline/collections/1_ae1682ef52eb.npy differ diff --git a/embeddings/Pipeline/collections/2_660499d5b384.npy b/embeddings/Pipeline/collections/2_660499d5b384.npy new file mode 100644 index 00000000..3a4d3393 Binary files /dev/null and b/embeddings/Pipeline/collections/2_660499d5b384.npy differ diff --git a/embeddings/Pipeline/collections/3_3c0cecce8f56.npy b/embeddings/Pipeline/collections/3_3c0cecce8f56.npy new file mode 100644 index 00000000..5c7552d7 Binary files /dev/null and b/embeddings/Pipeline/collections/3_3c0cecce8f56.npy differ diff --git a/embeddings/Pipeline/collections/4_cd94c39bb141.npy b/embeddings/Pipeline/collections/4_cd94c39bb141.npy new file mode 100644 index 00000000..1ed3899e Binary files /dev/null and b/embeddings/Pipeline/collections/4_cd94c39bb141.npy differ diff --git a/embeddings/Pipeline/collections/GAD_d6758a2d4c5c.npy b/embeddings/Pipeline/collections/GAD_d6758a2d4c5c.npy new file mode 100644 index 00000000..027ccec5 Binary files /dev/null and b/embeddings/Pipeline/collections/GAD_d6758a2d4c5c.npy differ diff --git a/embeddings/Pipeline/collections/MTT_4fdaaf3ba30e.npy b/embeddings/Pipeline/collections/MTT_4fdaaf3ba30e.npy new file mode 100644 index 00000000..5e156dcd Binary files /dev/null and b/embeddings/Pipeline/collections/MTT_4fdaaf3ba30e.npy differ diff --git a/embeddings/Pipeline/collections/PHQ_fea94d1f08bb.npy b/embeddings/Pipeline/collections/PHQ_fea94d1f08bb.npy new file mode 100644 index 00000000..43f294b8 Binary files /dev/null and b/embeddings/Pipeline/collections/PHQ_fea94d1f08bb.npy differ diff --git a/embeddings/Pipeline/collections/PSWQ-C_dbddf6f36fda.npy b/embeddings/Pipeline/collections/PSWQ-C_dbddf6f36fda.npy new file mode 100644 index 00000000..63d9216c Binary files /dev/null and b/embeddings/Pipeline/collections/PSWQ-C_dbddf6f36fda.npy differ diff --git a/embeddings/Pipeline/collections/RCADS_ec8aa468913e.npy b/embeddings/Pipeline/collections/RCADS_ec8aa468913e.npy new file mode 100644 index 00000000..3aa8dda3 Binary files /dev/null and b/embeddings/Pipeline/collections/RCADS_ec8aa468913e.npy differ diff --git a/embeddings/Pipeline/collections/manifest.json b/embeddings/Pipeline/collections/manifest.json new file mode 100644 index 00000000..b93fecbd --- /dev/null +++ b/embeddings/Pipeline/collections/manifest.json @@ -0,0 +1,38 @@ +[ +{ +"hash": "ae1682ef52ebe3deb09ca4d35beb53fc2e83fcbdf973cd04bdb00a0cb9a3cf34", +"file": "1_ae1682ef52eb.npy" +}, +{ +"hash": "660499d5b384ed3d6bbbfd323eff29ce84eb7c33aed0cabe517ad05790318258", +"file": "2_660499d5b384.npy" +}, +{ +"hash": "3c0cecce8f56443330e4ba454c85da71722e8b24e9387566a765a726925c16b0", +"file": "3_3c0cecce8f56.npy" +}, +{ +"hash": "cd94c39bb141f215e76f175e6a8ee1ab2d4a767df7f0669a97d78542daca911e", +"file": "4_cd94c39bb141.npy" +}, +{ +"hash": "ec8aa468913e905853a3dca76c75cd76b8b5cced078eafed1303ef969f3909ac", +"file": "RCADS_ec8aa468913e.npy" +}, +{ +"hash": "dbddf6f36fda6a2032d6ad675258a7a6ac9448b07971bbd9ffa077a428fb82cd", +"file": "PSWQ-C_dbddf6f36fda.npy" +}, +{ +"hash": "4fdaaf3ba30e51d9b59db50fa1379cf397ba6a10a75814aad318b2137448a535", +"file": "MTT_4fdaaf3ba30e.npy" +}, +{ +"hash": "fea94d1f08bb1ff14847e547bf9f8e3908039988f1f5cbd86d0384cdcecb8d73", +"file": "PHQ_fea94d1f08bb.npy" +}, +{ +"hash": "d6758a2d4c5cafe9d4d284646edf9f2edf4bb02cfdfa4f6ba8b23a9fbdaefe83", +"file": "GAD_d6758a2d4c5c.npy" +} +] \ No newline at end of file diff --git a/embeddings/Pipeline/collections/texts.npy b/embeddings/Pipeline/collections/texts.npy new file mode 100644 index 00000000..961adcb4 Binary files /dev/null and b/embeddings/Pipeline/collections/texts.npy differ diff --git a/embeddings/Pipeline/conftest.py b/embeddings/Pipeline/conftest.py new file mode 100644 index 00000000..0b9c44ed --- /dev/null +++ b/embeddings/Pipeline/conftest.py @@ -0,0 +1,9 @@ +"""Pytest config for the Pipeline suite. + +Pins the vector backend to numpy so offline tests are deterministic and do not +require a running Milvus server. An explicit VECTOR_BACKEND in the environment +still wins (setdefault), so a Milvus parity run can be requested deliberately. +""" +import os + +os.environ.setdefault("VECTOR_BACKEND", "numpy") diff --git a/embeddings/Pipeline/evaluate_search.py b/embeddings/Pipeline/evaluate_search.py new file mode 100644 index 00000000..d96daf76 --- /dev/null +++ b/embeddings/Pipeline/evaluate_search.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 +"""Evaluate POEM embedding search quality against a dataset of test queries. + +Each query is tagged with an *expected section* — the type of result that +should dominate the top results: + + * ``"instruments"`` — queries like "English instrument", "depression instrument" + should surface full questionnaires/instruments. + * ``"scales"`` — queries like "Anxiety", "Depression", "Social phobia" should + surface the subscales that measure that construct. + * ``None`` — no expectation; section breakdown is still reported. + +For each query the script: + 1. Retrieves top-k raw results (default: 20). + 2. Deduplicates by entity so the same instrument/scale does not fill all slots. + 3. Reports the top unique entities (default: 5). + 4. Computes a match% — what fraction of the top unique results belong to the + expected section. + +A summary table at the end groups queries by expected section and shows the +average match% for each group, making it easy to see whether the search is +doing what it is supposed to. + +By default each query is searched only within its expected section (section-scoped +mode). This eliminates cross-section competition so instrument queries only rank +against other instruments and scale queries only rank against other scales. +Use ``--no-scope`` to search all sections together (the original behaviour). + +Usage: + # Section-scoped evaluation (default) + python embeddings/evaluate_search.py + + # All-sections evaluation (original behaviour) + python embeddings/evaluate_search.py --no-scope + + # Adjust result counts + python embeddings/evaluate_search.py --top-k-search 30 --top-k-unique 10 + +Output is printed to stdout and saved to: + embeddings/evaluation_results/evaluation_{timestamp}.txt +""" +from __future__ import annotations + +import argparse +import os +import sys +from collections import Counter, defaultdict +from datetime import datetime + +import numpy as np + +_HERE = os.path.dirname(os.path.abspath(__file__)) +_EMB_ROOT = os.path.dirname(_HERE) +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +from poem_core import config +from poem_core.embedding_client import embed_query +from poem_core.corpus import load_embeddings +from poem_core.dedup import get_unique_top_results +from poem_core.vector_store import get_store + +# --------------------------------------------------------------------------- +# Query dataset +# Each entry: (query_string, expected_section) +# expected_section: "instruments" | "scales" | "collections" | None +# +# Rule of thumb: +# query ends with "instrument" / "questionnaire" → expected: "instruments" +# bare construct name (Anxiety, Depression, ...) → expected: "scales" +# --------------------------------------------------------------------------- + +QUERY_DATASET: list[tuple[str, str | None]] = [ + # --- Instrument queries (top results should be questionnaires/instruments) --- + # Probe informant roles, instrument families, item-count variants, and + # cross-language coverage. The instrument templates expose informant + # (Caregiver/Youth/Adult) and scale-attribute lines; languages appear only + # as suffixes in the instrument code (e.g. -ES, -BN), so language-name + # queries also probe whether the embedding bridges that gap. + ("English instrument", "instruments"), + ("Youth instrument", "instruments"), + ("Depression instrument", "instruments"), + ("Anxiety questionnaire", "instruments"), + ("caregiver instrument", "instruments"), + ("teacher instrument", "instruments"), + ("adult questionnaire", "instruments"), + ("child questionnaire", "instruments"), + ("PHQ-9", "instruments"), + ("GAD-7", "instruments"), + ("RCADS-25", "instruments"), + ("RCADS-47", "instruments"), + ("MTT-35", "instruments"), + ("RCADS questionnaire", "instruments"), + ("MTT questionnaire", "instruments"), + ("patient health questionnaire", "instruments"), + ("therapeutic alliance instrument", "instruments"), + ("OCD instrument", "instruments"), + ("Spanish questionnaire", "instruments"), + ("Chinese questionnaire", "instruments"), + + # --- Scale queries (top results should be subscales) --- + # Covers RCADS clinical subscales (SP/PD/GAD/MDD/SAD/OCD), composite/total + # scales, and the 5 MTT therapeutic-alliance subscales (Relationship, + # Expectancy, Attendance, Clarity, Homework). The last two probe the + # skos:notation field exposed as "has attribute (notation): ". + ("Anxiety", "scales"), + ("Depression", "scales"), + ("Social phobia", "scales"), + ("OCD", "scales"), + ("Panic disorder", "scales"), + ("Separation anxiety", "scales"), + ("Generalized anxiety disorder", "scales"), + ("Major depressive disorder", "scales"), + ("Obsessive compulsive disorder", "scales"), + ("Total anxiety", "scales"), + ("Total depression", "scales"), + ("Total anxiety and depression", "scales"), + ("Therapeutic relationship", "scales"), + ("Treatment expectancy", "scales"), + ("Treatment attendance", "scales"), + ("Homework completion", "scales"), + ("Therapy clarity", "scales"), + ("questionnaire scale", "scales"), + ("notation SP", "scales"), + ("notation GAD", "scales"), + + # --- Collection queries (top results should be instrument collections) --- + # Collection templates contain only "instance of: Instrument Collection" + # plus member codes — no descriptive text. These queries test whether the + # collection section is reachable at all. + ("Instrument collection", "collections"), + ("Group of instruments", "collections"), + ("Collection of questionnaires", "collections"), + ("multilingual instrument set", "collections"), + ("instrument set RCADS", "collections"), + + # --- No-expectation / exploratory queries (probe cross-section behavior) --- + # Item-stem text appears in both instrument and scale templates (as + # "has member: "), so these queries legitimately straddle sections + # and are useful diagnostics rather than pass/fail tests. + ("afraid of being in crowded places", None), + ("feels nothing is much fun anymore", None), + ("worries about mistakes", None), + ("I actively participate", None), + ("counselor understands my culture", None), +] + +# --------------------------------------------------------------------------- +# Default parameters +# --------------------------------------------------------------------------- + +DEFAULT_TOP_K_SEARCH = 20 # raw results retrieved before deduplication +DEFAULT_TOP_K_UNIQUE = 5 # unique entities to report per query + +SECTIONS = list(config.PREFERRED_SECTION_ORDER) + +# --------------------------------------------------------------------------- +# Core functions +# --------------------------------------------------------------------------- +# get_unique_top_results now lives in poem_core.dedup (imported above) so the MCP +# server and this evaluator share one dedup implementation. + + +def compute_metrics( + results: list[dict], + expected_section: str | None, +) -> dict: + """Return section breakdown and match% for a list of unique results.""" + if not results: + metrics = {s: 0.0 for s in SECTIONS} + metrics["match_pct"] = 0.0 + return metrics + + counts = Counter(r["section"] for r in results) + total = len(results) + metrics = {s: counts.get(s, 0) / total * 100 for s in SECTIONS} + metrics["match_pct"] = metrics.get(expected_section, 0.0) if expected_section else None + return metrics + + +def format_query_block( + query: str, + expected_section: str | None, + results: list[dict], + metrics: dict, + top_k_search: int, + scoped: bool = False, +) -> str: + lines = [] + lines.append("=" * 72) + expect_label = f"expected: {expected_section}" if expected_section else "no expectation" + scope_label = f"searched: {expected_section} only" if scoped else "searched: all sections" + lines.append(f'Query: "{query}" [{expect_label} | {scope_label}]') + lines.append( + f"(top {len(results)} unique entities from top-{top_k_search} raw results)" + ) + lines.append("-" * 72) + + for r in results: + match_marker = "" + if expected_section: + match_marker = " ✓" if r["section"] == expected_section else " ✗" + lines.append( + f" #{r['unique_rank']:2d} [{r['section']:12s}]{match_marker}" + f" score={r['score']:+.4f} (raw #{r['raw_rank']:2d})" + ) + lines.append(f" Entity : {r['entity']}") + lines.append(f" Preview: {r['preview']}") + + lines.append("") + breakdown = " Section breakdown: " + " | ".join( + f"{s}: {metrics[s]:.0f}%" for s in SECTIONS + ) + if metrics["match_pct"] is not None: + breakdown += f" → match%: {metrics['match_pct']:.0f}%" + lines.append(breakdown) + lines.append("") + return "\n".join(lines) + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def main() -> None: + parser = argparse.ArgumentParser( + description="Evaluate POEM search quality across a query dataset." + ) + parser.add_argument( + "--top-k-search", + type=int, + default=DEFAULT_TOP_K_SEARCH, + help=f"Raw results retrieved before deduplication (default: {DEFAULT_TOP_K_SEARCH})", + ) + parser.add_argument( + "--top-k-unique", + type=int, + default=DEFAULT_TOP_K_UNIQUE, + help=f"Unique entities to report per query (default: {DEFAULT_TOP_K_UNIQUE})", + ) + parser.add_argument( + "--no-scope", + action="store_true", + help="Search all sections together instead of restricting each query to its expected section", + ) + args = parser.parse_args() + + print("Loading embeddings...") + embeddings, texts, sections = load_embeddings() + print(f"Total paragraphs loaded: {len(texts)}\n") + + # One vector store for the whole run (built once). Section scoping is pushed + # into the store: a server-side filter for Milvus, a numpy mask otherwise. + store = get_store(embeddings, texts, sections) + + output_lines: list[str] = [] + all_metrics: list[dict] = [] + group_metrics: dict[str, list[float]] = defaultdict(list) + + mode_label = "all sections (--no-scope)" if args.no_scope else "section-scoped" + header = ( + f"POEM Search Evaluation\n" + f"Date : {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n" + f"Queries : {len(QUERY_DATASET)}\n" + f"Mode : {mode_label}\n" + f"Top-k search (before dedup): {args.top_k_search}\n" + f"Top-k unique (reported) : {args.top_k_unique}\n" + ) + print(header) + output_lines.append(header) + + for query, expected_section in QUERY_DATASET: + print(f'Embedding query: "{query}"') + query_vec = embed_query(query) + + # Section-scoped: restrict to expected_section when one is set. + scoped = bool(expected_section and not args.no_scope) + section = expected_section if scoped else None + scores, search_txt, search_sec = store.top_candidates( + query_vec, "Cosine Similarity", section, k=args.top_k_search + ) + results = get_unique_top_results( + scores, search_txt, search_sec, args.top_k_search, args.top_k_unique + ) + metrics = compute_metrics(results, expected_section) + all_metrics.append(metrics) + if expected_section and metrics["match_pct"] is not None: + group_metrics[expected_section].append(metrics["match_pct"]) + + block = format_query_block( + query, expected_section, results, metrics, args.top_k_search, scoped + ) + print(block) + output_lines.append(block) + + # Summary + summary_lines = [ + "=" * 72, + "SUMMARY", + "-" * 72, + "Average section breakdown across ALL queries:", + ] + for s in SECTIONS: + avg = sum(m[s] for m in all_metrics) / len(all_metrics) if all_metrics else 0.0 + summary_lines.append(f" {s:12s}: {avg:.1f}%") + + summary_lines.append("") + summary_lines.append("Average match% by expected section type:") + for section, match_list in sorted(group_metrics.items()): + avg_match = sum(match_list) / len(match_list) + summary_lines.append( + f" {section:12s}: {avg_match:.1f}% ({len(match_list)} queries)" + ) + summary_lines.append("") + + summary = "\n".join(summary_lines) + print(summary) + output_lines.append(summary) + + # Save to file + results_dir = os.path.join(_HERE, "evaluation_results") + os.makedirs(results_dir, exist_ok=True) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + out_path = os.path.join(results_dir, f"evaluation_{timestamp}.txt") + with open(out_path, "w", encoding="utf-8") as f: + f.write("\n".join(output_lines)) + print(f"Results saved to: {out_path}") + + +if __name__ == "__main__": + main() diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_081457.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_081457.txt new file mode 100644 index 00000000..7769241c --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_081457.txt @@ -0,0 +1,267 @@ +POEM Search Evaluation +Date : 2026-05-28 08:14:52 +Queries : 12 +Mode : section-scoped +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4598 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.4570 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.4167 (raw # 4) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.4129 (raw # 7) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.4065 (raw # 9) + Entity : RCADS-35-Y-EN + Preview: RCADS-35-Y-EN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5296 (raw # 1) + Entity : RCADS-35-Y-SW + Preview: RCADS-35-Y-SW. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.5260 (raw # 2) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.5238 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.5231 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.5215 (raw # 5) + Entity : RCADS-47-Y-HI + Preview: RCADS-47-Y-HI. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7237 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7001 (raw #11) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6964 (raw #12) + Entity : RCADS-25-Y-LT + Preview: RCADS-25-Y-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6945 (raw #13) + Entity : RCADS-25-Y-SV + Preview: RCADS-25-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: instruments only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7256 (raw #17) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4845 (raw # 1) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.4802 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.4709 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.4702 (raw # 4) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 5 [instruments ] ✓ score=+0.4638 (raw # 5) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: instruments only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6104 (raw # 1) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5672 (raw # 8) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 3 [scales ] ✓ score=+0.5629 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5616 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 5 [scales ] ✓ score=+0.5483 (raw #19) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [scales ] ✓ score=+0.6194 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5901 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5838 (raw #12) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5586 (raw #16) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.5122 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5117 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5027 (raw # 9) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5022 (raw #10) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 66.7% + scales : 33.3% + collections : 0.0% + +Average match% by expected section type: + instruments : 100.0% (8 queries) + scales : 100.0% (4 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_081506.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_081506.txt new file mode 100644 index 00000000..92cc9d25 --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_081506.txt @@ -0,0 +1,243 @@ +POEM Search Evaluation +Date : 2026-05-28 08:15:02 +Queries : 12 +Mode : all sections (--no-scope) +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6497 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✗ score=+0.6291 (raw # 8) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6219 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✗ score=+0.7249 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 3 [instruments ] ✓ score=+0.7237 (raw #11) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [scales ] ✗ score=+0.7187 (raw #12) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [collections ] ✗ score=+0.7175 (raw #13) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + + Section breakdown: instruments: 40% | scales: 40% | collections: 20% → match%: 40% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7399 (raw # 4) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✗ score=+0.7300 (raw #14) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [instruments ] ✓ score=+0.7256 (raw #20) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 60% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6153 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✗ score=+0.6038 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6285 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✓ score=+0.6104 (raw # 3) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5672 (raw #17) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 4 [scales ] ✓ score=+0.5629 (raw #18) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5616 (raw #19) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [instruments ] ✗ score=+0.6269 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6194 (raw #11) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5901 (raw #13) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5838 (raw #14) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "OCD" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6222 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.6064 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5980 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5946 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 43.3% + scales : 30.0% + collections : 26.7% + +Average match% by expected section type: + instruments : 50.0% (8 queries) + scales : 70.0% (4 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_082658.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_082658.txt new file mode 100644 index 00000000..222c3c3a --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_082658.txt @@ -0,0 +1,1044 @@ +POEM Search Evaluation +Date : 2026-05-28 08:26:47 +Queries : 50 +Mode : section-scoped +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4598 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.4570 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.4167 (raw # 4) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.4129 (raw # 7) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.4065 (raw # 9) + Entity : RCADS-35-Y-EN + Preview: RCADS-35-Y-EN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5296 (raw # 1) + Entity : RCADS-35-Y-SW + Preview: RCADS-35-Y-SW. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.5260 (raw # 2) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.5238 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.5231 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.5215 (raw # 5) + Entity : RCADS-47-Y-HI + Preview: RCADS-47-Y-HI. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7237 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7001 (raw #11) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6964 (raw #12) + Entity : RCADS-25-Y-LT + Preview: RCADS-25-Y-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6945 (raw #13) + Entity : RCADS-25-Y-SV + Preview: RCADS-25-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: instruments only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7256 (raw #17) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4845 (raw # 1) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.4802 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.4709 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.4702 (raw # 4) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 5 [instruments ] ✓ score=+0.4638 (raw # 5) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: instruments only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.6462 (raw #11) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6413 (raw #12) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6361 (raw #14) + Entity : RCADS-25-CG-SL + Preview: RCADS-25-CG-SL. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7207 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6756 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6676 (raw #13) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6664 (raw #16) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7324 (raw # 1) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.7271 (raw # 2) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.7267 (raw # 3) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7259 (raw # 4) + Entity : RCADS-25-Y-MR + Preview: RCADS-25-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7230 (raw # 5) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6560 (raw # 1) + Entity : RCADS-47-Y-BN + Preview: RCADS-47-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.6463 (raw # 2) + Entity : RCADS-47-CG-JA + Preview: RCADS-47-CG-JA. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.6461 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.6436 (raw # 4) + Entity : RCADS-47-Y-ZU + Preview: RCADS-47-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.6386 (raw # 5) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6235 (raw # 1) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 2 [instruments ] ✓ score=+0.6139 (raw # 2) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✓ score=+0.6078 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.6058 (raw # 4) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.5741 (raw # 5) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7717 (raw # 4) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7714 (raw # 5) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6296 (raw #11) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6281 (raw #12) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6279 (raw #13) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: instruments only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5111 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.5068 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.4991 (raw # 3) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.4948 (raw # 4) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.4930 (raw # 5) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.5716 (raw # 4) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5709 (raw # 5) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5692 (raw # 6) + Entity : RCADS-47-CG-ZH-HANT + Preview: RCADS-47-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5945 (raw # 4) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 5 [instruments ] ✓ score=+0.5811 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6104 (raw # 1) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5672 (raw # 8) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 3 [scales ] ✓ score=+0.5629 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5616 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 5 [scales ] ✓ score=+0.5483 (raw #19) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [scales ] ✓ score=+0.6194 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5901 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5838 (raw #12) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5586 (raw #16) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.5122 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5117 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5027 (raw # 9) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5022 (raw #10) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.5677 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5381 (raw #11) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5377 (raw #12) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5271 (raw #16) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [scales ] ✓ score=+0.6118 (raw # 8) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5881 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5631 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.5683 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5590 (raw # 9) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5590 (raw #10) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5554 (raw #12) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5600 (raw #17) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 4 [scales ] ✓ score=+0.5519 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.4987 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.4956 (raw # 8) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.4953 (raw # 9) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4897 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [scales ] ✓ score=+0.5738 (raw # 2) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5715 (raw # 3) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5561 (raw # 8) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5397 (raw #18) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: scales only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.5310 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.4811 (raw # 6) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4684 (raw # 9) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.4438 (raw #13) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4392 (raw #15) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4910 (raw # 8) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4855 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4812 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.4802 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5086 (raw # 8) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4806 (raw # 9) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.4640 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.4454 (raw #14) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4508 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] ✓ score=+0.4494 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4092 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4077 (raw #13) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4013 (raw #14) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6540 (raw # 1) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 2 [scales ] ✓ score=+0.5364 (raw # 8) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5155 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.5106 (raw #14) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 5 [scales ] ✓ score=+0.4997 (raw #16) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6800 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.6728 (raw # 2) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.6699 (raw # 3) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.6519 (raw #10) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.6344 (raw #20) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation SP" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4413 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4412 (raw # 2) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 3 [scales ] ✓ score=+0.4392 (raw # 3) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 4 [scales ] ✓ score=+0.4378 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.4333 (raw # 5) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4822 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.4424 (raw # 7) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4404 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4343 (raw #10) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4335 (raw #12) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: collections only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7677 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✓ score=+0.7280 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 3 [collections ] ✓ score=+0.7191 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: collections only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6649 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✓ score=+0.6631 (raw # 2) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7059 (raw # 1) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✓ score=+0.6525 (raw # 2) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 3 [collections ] ✓ score=+0.6424 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 4 [collections ] ✓ score=+0.5312 (raw # 4) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 5 [collections ] ✓ score=+0.5250 (raw #17) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: collections only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6900 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✓ score=+0.6430 (raw #10) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 3 [collections ] ✓ score=+0.6398 (raw #12) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6354 (raw #18) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: collections only] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7567 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 45.2% + scales : 44.8% + collections : 10.0% + +Average match% by expected section type: + collections : 100.0% (5 queries) + instruments : 100.0% (20 queries) + scales : 100.0% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_082712.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_082712.txt new file mode 100644 index 00000000..ccaa2766 --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_082712.txt @@ -0,0 +1,960 @@ +POEM Search Evaluation +Date : 2026-05-28 08:27:01 +Queries : 50 +Mode : all sections (--no-scope) +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6497 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✗ score=+0.6291 (raw # 8) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6219 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✗ score=+0.7249 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 3 [instruments ] ✓ score=+0.7237 (raw #11) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [scales ] ✗ score=+0.7187 (raw #12) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [collections ] ✗ score=+0.7175 (raw #13) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + + Section breakdown: instruments: 40% | scales: 40% | collections: 20% → match%: 40% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7399 (raw # 4) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✗ score=+0.7300 (raw #14) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [instruments ] ✓ score=+0.7256 (raw #20) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 60% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6153 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✗ score=+0.6038 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7149 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [collections ] ✗ score=+0.6826 (raw #15) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [collections ] ✗ score=+0.6693 (raw #20) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + + Section breakdown: instruments: 40% | scales: 20% | collections: 40% → match%: 40% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✗ score=+0.7401 (raw # 2) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 3 [instruments ] ✓ score=+0.7207 (raw # 3) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 4 [instruments ] ✓ score=+0.6756 (raw # 9) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6676 (raw #14) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7324 (raw # 1) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [collections ] ✗ score=+0.7277 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-NL + # 3 [instruments ] ✓ score=+0.7271 (raw # 3) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7267 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7259 (raw # 5) + Entity : RCADS-25-Y-MR + Preview: RCADS-25-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7190 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-IS + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7172 (raw # 1) + Entity : MTT + Preview: MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✗ score=+0.6646 (raw #12) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member: MTT-35-CG-ES-2 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7717 (raw # 4) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7714 (raw # 5) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [collections ] ✗ score=+0.6543 (raw # 8) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 4 [instruments ] ✓ score=+0.6296 (raw #12) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.6281 (raw #13) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6627 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✗ score=+0.6444 (raw #10) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.5716 (raw # 4) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5709 (raw # 5) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5692 (raw # 6) + Entity : RCADS-47-CG-ZH-HANT + Preview: RCADS-47-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5945 (raw # 4) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 5 [instruments ] ✓ score=+0.5811 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6285 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✓ score=+0.6104 (raw # 3) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5672 (raw #17) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 4 [scales ] ✓ score=+0.5629 (raw #18) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5616 (raw #19) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [instruments ] ✗ score=+0.6269 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6194 (raw #11) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5901 (raw #13) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5838 (raw #14) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "OCD" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6222 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.6064 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5980 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5946 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] ✗ score=+0.5736 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5677 (raw #13) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + + Section breakdown: instruments: 33% | scales: 67% | collections: 0% → match%: 67% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [instruments ] ✗ score=+0.6386 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6118 (raw #10) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.6026 (raw #13) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.5988 (raw #16) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 40% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [instruments ] ✗ score=+0.5828 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5683 (raw #16) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.5664 (raw #19) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] ✗ score=+0.5679 (raw #15) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.5677 (raw #17) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6163 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5960 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5828 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5763 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [instruments ] ✗ score=+0.5984 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.5738 (raw # 4) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.5715 (raw # 6) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5561 (raw #15) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6118 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.6101 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6110 (raw # 6) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5941 (raw # 9) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6289 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✗ score=+0.6286 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.6277 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.6237 (raw # 5) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.5105 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.5056 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5045 (raw # 3) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.4907 (raw # 6) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.4880 (raw # 9) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6682 (raw # 1) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✗ score=+0.6609 (raw # 2) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6540 (raw # 5) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7406 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✗ score=+0.6978 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.6800 (raw # 3) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.6728 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.6699 (raw # 5) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% → match%: 60% + +======================================================================== +Query: "notation SP" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.5117 (raw # 1) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✗ score=+0.4876 (raw # 2) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 3 [collections ] ✗ score=+0.4843 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 4 [collections ] ✗ score=+0.4832 (raw # 4) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-ZH-HANS + # 5 [collections ] ✗ score=+0.4620 (raw #11) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6360 (raw # 1) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 2 [collections ] ✗ score=+0.5397 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-ZH-HANS + # 3 [collections ] ✗ score=+0.5393 (raw # 3) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 4 [instruments ] ✗ score=+0.5230 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + + Section breakdown: instruments: 25% | scales: 0% | collections: 75% → match%: 0% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7677 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✓ score=+0.7280 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 3 [collections ] ✓ score=+0.7191 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6649 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✓ score=+0.6631 (raw # 2) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7173 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✓ score=+0.7059 (raw # 2) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 3 [collections ] ✓ score=+0.6525 (raw # 3) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6424 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 5 [instruments ] ✗ score=+0.6354 (raw # 5) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 40% | scales: 0% | collections: 60% → match%: 60% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6900 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✓ score=+0.6430 (raw #10) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 3 [collections ] ✓ score=+0.6398 (raw #12) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6354 (raw #18) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7567 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 47.4% + scales : 25.5% + collections : 27.1% + +Average match% by expected section type: + collections : 92.0% (5 queries) + instruments : 59.0% (20 queries) + scales : 46.7% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_083825.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_083825.txt new file mode 100644 index 00000000..53a805fc --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_083825.txt @@ -0,0 +1,1044 @@ +POEM Search Evaluation +Date : 2026-05-28 08:38:14 +Queries : 50 +Mode : section-scoped +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4598 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.4570 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.4167 (raw # 4) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.4129 (raw # 7) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.4065 (raw # 9) + Entity : RCADS-35-Y-EN + Preview: RCADS-35-Y-EN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5296 (raw # 1) + Entity : RCADS-35-Y-SW + Preview: RCADS-35-Y-SW. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.5260 (raw # 2) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.5238 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.5231 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.5215 (raw # 5) + Entity : RCADS-47-Y-HI + Preview: RCADS-47-Y-HI. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7237 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7001 (raw #11) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6964 (raw #12) + Entity : RCADS-25-Y-LT + Preview: RCADS-25-Y-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6945 (raw #13) + Entity : RCADS-25-Y-SV + Preview: RCADS-25-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: instruments only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7256 (raw #17) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4845 (raw # 1) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.4802 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.4709 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.4702 (raw # 4) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 5 [instruments ] ✓ score=+0.4638 (raw # 5) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: instruments only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.6462 (raw #11) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6413 (raw #12) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6361 (raw #14) + Entity : RCADS-25-CG-SL + Preview: RCADS-25-CG-SL. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7207 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6756 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6676 (raw #13) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6664 (raw #16) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7324 (raw # 1) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.7271 (raw # 2) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.7267 (raw # 3) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7259 (raw # 4) + Entity : RCADS-25-Y-MR + Preview: RCADS-25-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7230 (raw # 5) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6560 (raw # 1) + Entity : RCADS-47-Y-BN + Preview: RCADS-47-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.6463 (raw # 2) + Entity : RCADS-47-CG-JA + Preview: RCADS-47-CG-JA. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.6461 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.6436 (raw # 4) + Entity : RCADS-47-Y-ZU + Preview: RCADS-47-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.6386 (raw # 5) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6235 (raw # 1) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 2 [instruments ] ✓ score=+0.6139 (raw # 2) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✓ score=+0.6078 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.6058 (raw # 4) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.5741 (raw # 5) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7717 (raw # 4) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7714 (raw # 5) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6296 (raw #11) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6281 (raw #12) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6279 (raw #13) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: instruments only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5111 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.5068 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.4991 (raw # 3) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.4948 (raw # 4) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.4930 (raw # 5) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.5716 (raw # 4) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5709 (raw # 5) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5692 (raw # 6) + Entity : RCADS-47-CG-ZH-HANT + Preview: RCADS-47-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5945 (raw # 4) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 5 [instruments ] ✓ score=+0.5811 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6104 (raw # 1) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5672 (raw # 8) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 3 [scales ] ✓ score=+0.5629 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5616 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 5 [scales ] ✓ score=+0.5483 (raw #19) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [scales ] ✓ score=+0.6194 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5901 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5838 (raw #12) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5586 (raw #16) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.5122 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5117 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5027 (raw # 9) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5022 (raw #10) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.5677 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5381 (raw #11) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5377 (raw #12) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5271 (raw #16) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [scales ] ✓ score=+0.6118 (raw # 8) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5881 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5631 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.5683 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5590 (raw # 9) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5590 (raw #10) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5554 (raw #12) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5600 (raw #17) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 4 [scales ] ✓ score=+0.5519 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.4987 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.4956 (raw # 8) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.4953 (raw # 9) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4897 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [scales ] ✓ score=+0.5738 (raw # 2) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5715 (raw # 3) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5561 (raw # 8) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5397 (raw #18) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: scales only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.5310 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.4811 (raw # 6) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4684 (raw # 9) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.4438 (raw #13) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4392 (raw #15) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4910 (raw # 8) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4855 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4812 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.4802 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5086 (raw # 8) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4806 (raw # 9) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.4640 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.4454 (raw #14) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4508 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] ✓ score=+0.4494 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4092 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4077 (raw #13) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4013 (raw #14) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6540 (raw # 1) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 2 [scales ] ✓ score=+0.5364 (raw # 8) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5155 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.5106 (raw #14) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 5 [scales ] ✓ score=+0.4997 (raw #16) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6800 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.6728 (raw # 2) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.6699 (raw # 3) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.6519 (raw #10) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.6344 (raw #20) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation SP" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4413 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4412 (raw # 2) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 3 [scales ] ✓ score=+0.4392 (raw # 3) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 4 [scales ] ✓ score=+0.4378 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.4333 (raw # 5) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4822 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.4424 (raw # 7) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4404 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4343 (raw #10) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4335 (raw #12) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: collections only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7677 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✓ score=+0.7280 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 3 [collections ] ✓ score=+0.7191 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: collections only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6649 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✓ score=+0.6631 (raw # 2) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7059 (raw # 1) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✓ score=+0.6525 (raw # 2) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 3 [collections ] ✓ score=+0.6424 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 4 [collections ] ✓ score=+0.5312 (raw # 4) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 5 [collections ] ✓ score=+0.5250 (raw #17) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: collections only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6900 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✓ score=+0.6430 (raw #10) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 3 [collections ] ✓ score=+0.6398 (raw #12) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6354 (raw #18) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: collections only] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7567 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 45.2% + scales : 44.8% + collections : 10.0% + +Average match% by expected section type: + collections : 100.0% (5 queries) + instruments : 100.0% (20 queries) + scales : 100.0% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_083839.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_083839.txt new file mode 100644 index 00000000..62782bbf --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_083839.txt @@ -0,0 +1,960 @@ +POEM Search Evaluation +Date : 2026-05-28 08:38:27 +Queries : 50 +Mode : all sections (--no-scope) +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6497 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✗ score=+0.6291 (raw # 8) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6219 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✗ score=+0.7249 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 3 [instruments ] ✓ score=+0.7237 (raw #11) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [scales ] ✗ score=+0.7187 (raw #12) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [collections ] ✗ score=+0.7175 (raw #13) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + + Section breakdown: instruments: 40% | scales: 40% | collections: 20% → match%: 40% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7399 (raw # 4) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✗ score=+0.7300 (raw #14) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [instruments ] ✓ score=+0.7256 (raw #20) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 60% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6153 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✗ score=+0.6038 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7149 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [collections ] ✗ score=+0.6826 (raw #15) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [collections ] ✗ score=+0.6693 (raw #20) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + + Section breakdown: instruments: 40% | scales: 20% | collections: 40% → match%: 40% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✗ score=+0.7401 (raw # 2) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 3 [instruments ] ✓ score=+0.7207 (raw # 3) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 4 [instruments ] ✓ score=+0.6756 (raw # 9) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6676 (raw #14) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7324 (raw # 1) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [collections ] ✗ score=+0.7277 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-NL + # 3 [instruments ] ✓ score=+0.7271 (raw # 3) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7267 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7259 (raw # 5) + Entity : RCADS-25-Y-MR + Preview: RCADS-25-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7190 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-IS + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7172 (raw # 1) + Entity : MTT + Preview: MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✗ score=+0.6646 (raw #12) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member: MTT-35-CG-ES-2 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7717 (raw # 4) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7714 (raw # 5) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [collections ] ✗ score=+0.6543 (raw # 8) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 4 [instruments ] ✓ score=+0.6296 (raw #12) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.6281 (raw #13) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6627 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✗ score=+0.6444 (raw #10) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.5716 (raw # 4) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5709 (raw # 5) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5692 (raw # 6) + Entity : RCADS-47-CG-ZH-HANT + Preview: RCADS-47-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5945 (raw # 4) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 5 [instruments ] ✓ score=+0.5811 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6285 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✓ score=+0.6104 (raw # 3) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5672 (raw #17) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 4 [scales ] ✓ score=+0.5629 (raw #18) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5616 (raw #19) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [instruments ] ✗ score=+0.6269 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6194 (raw #11) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5901 (raw #13) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5838 (raw #14) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "OCD" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6222 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.6064 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5980 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5946 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] ✗ score=+0.5736 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5677 (raw #13) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + + Section breakdown: instruments: 33% | scales: 67% | collections: 0% → match%: 67% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [instruments ] ✗ score=+0.6386 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6118 (raw #10) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.6026 (raw #13) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.5988 (raw #16) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 40% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [instruments ] ✗ score=+0.5828 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5683 (raw #16) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.5664 (raw #19) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] ✗ score=+0.5679 (raw #15) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.5677 (raw #17) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6163 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5960 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5828 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5763 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [instruments ] ✗ score=+0.5984 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.5738 (raw # 4) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.5715 (raw # 6) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5561 (raw #15) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6118 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.6101 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6110 (raw # 6) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5941 (raw # 9) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6289 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✗ score=+0.6286 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.6277 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.6237 (raw # 5) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.5105 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.5056 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5045 (raw # 3) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.4907 (raw # 6) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.4880 (raw # 9) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6682 (raw # 1) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✗ score=+0.6609 (raw # 2) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6540 (raw # 5) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7406 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✗ score=+0.6978 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.6800 (raw # 3) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.6728 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.6699 (raw # 5) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% → match%: 60% + +======================================================================== +Query: "notation SP" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.5117 (raw # 1) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✗ score=+0.4876 (raw # 2) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 3 [collections ] ✗ score=+0.4843 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 4 [collections ] ✗ score=+0.4832 (raw # 4) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-ZH-HANS + # 5 [collections ] ✗ score=+0.4620 (raw #11) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6360 (raw # 1) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 2 [collections ] ✗ score=+0.5397 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-25-Y-ZH-HANS + # 3 [collections ] ✗ score=+0.5393 (raw # 3) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 4 [instruments ] ✗ score=+0.5230 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + + Section breakdown: instruments: 25% | scales: 0% | collections: 75% → match%: 0% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7677 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 2 [collections ] ✓ score=+0.7280 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 3 [collections ] ✓ score=+0.7191 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6649 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 + # 2 [collections ] ✓ score=+0.6631 (raw # 2) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7173 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✓ score=+0.7059 (raw # 2) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 3 [collections ] ✓ score=+0.6525 (raw # 3) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6424 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member: GAD-7 + # 5 [instruments ] ✗ score=+0.6354 (raw # 5) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 40% | scales: 0% | collections: 60% → match%: 60% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6900 (raw # 1) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 + # 2 [collections ] ✓ score=+0.6430 (raw #10) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection + # 3 [collections ] ✓ score=+0.6398 (raw #12) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member: PHQ-9-A-EN + # 4 [collections ] ✓ score=+0.6354 (raw #18) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: all sections] +(top 1 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7567 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 47.4% + scales : 25.5% + collections : 27.1% + +Average match% by expected section type: + collections : 92.0% (5 queries) + instruments : 59.0% (20 queries) + scales : 46.7% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_084738.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_084738.txt new file mode 100644 index 00000000..75f3e4cc --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_084738.txt @@ -0,0 +1,1074 @@ +POEM Search Evaluation +Date : 2026-05-28 08:47:27 +Queries : 50 +Mode : section-scoped +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4598 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.4570 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.4167 (raw # 4) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.4129 (raw # 7) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.4065 (raw # 9) + Entity : RCADS-35-Y-EN + Preview: RCADS-35-Y-EN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5296 (raw # 1) + Entity : RCADS-35-Y-SW + Preview: RCADS-35-Y-SW. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.5260 (raw # 2) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.5238 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.5231 (raw # 4) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.5215 (raw # 5) + Entity : RCADS-47-Y-HI + Preview: RCADS-47-Y-HI. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7237 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7001 (raw #11) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6964 (raw #12) + Entity : RCADS-25-Y-LT + Preview: RCADS-25-Y-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6945 (raw #13) + Entity : RCADS-25-Y-SV + Preview: RCADS-25-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: instruments only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.7256 (raw #17) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.4845 (raw # 1) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.4802 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.4709 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.4702 (raw # 4) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 5 [instruments ] ✓ score=+0.4638 (raw # 5) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6800 (raw #11) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.6794 (raw #12) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: instruments only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [instruments ] ✓ score=+0.6462 (raw #11) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6413 (raw #12) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6361 (raw #14) + Entity : RCADS-25-CG-SL + Preview: RCADS-25-CG-SL. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7207 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6756 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6676 (raw #13) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6664 (raw #16) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7324 (raw # 1) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.7271 (raw # 2) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 3 [instruments ] ✓ score=+0.7267 (raw # 3) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7259 (raw # 4) + Entity : RCADS-25-Y-MR + Preview: RCADS-25-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7230 (raw # 5) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6560 (raw # 1) + Entity : RCADS-47-Y-BN + Preview: RCADS-47-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 2 [instruments ] ✓ score=+0.6463 (raw # 2) + Entity : RCADS-47-CG-JA + Preview: RCADS-47-CG-JA. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.6461 (raw # 3) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.6436 (raw # 4) + Entity : RCADS-47-Y-ZU + Preview: RCADS-47-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.6386 (raw # 5) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6235 (raw # 1) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 2 [instruments ] ✓ score=+0.6139 (raw # 2) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✓ score=+0.6078 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.6058 (raw # 4) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.5741 (raw # 5) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7717 (raw # 4) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7714 (raw # 5) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6296 (raw #11) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.6281 (raw #12) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6279 (raw #13) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: instruments only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.5111 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.5068 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.4991 (raw # 3) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.4948 (raw # 4) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.4930 (raw # 5) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.5716 (raw # 4) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5709 (raw # 5) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5692 (raw # 6) + Entity : RCADS-47-CG-ZH-HANT + Preview: RCADS-47-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: instruments only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [instruments ] ✓ score=+0.5945 (raw # 4) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 5 [instruments ] ✓ score=+0.5811 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6104 (raw # 1) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5672 (raw # 8) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 3 [scales ] ✓ score=+0.5629 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5616 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 5 [scales ] ✓ score=+0.5483 (raw #19) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [scales ] ✓ score=+0.6194 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5901 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5838 (raw #12) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5586 (raw #16) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.5122 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5117 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5027 (raw # 9) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5022 (raw #10) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.5677 (raw #10) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 3 [scales ] ✓ score=+0.5381 (raw #11) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✓ score=+0.5377 (raw #12) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 5 [scales ] ✓ score=+0.5271 (raw #16) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [scales ] ✓ score=+0.6118 (raw # 8) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5881 (raw # 9) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5631 (raw #11) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.5683 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.5590 (raw # 9) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5590 (raw #10) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5554 (raw #12) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: scales only] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5600 (raw #17) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 4 [scales ] ✓ score=+0.5519 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.4987 (raw # 7) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.4956 (raw # 8) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.4953 (raw # 9) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4897 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: scales only] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [scales ] ✓ score=+0.5738 (raw # 2) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5715 (raw # 3) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [scales ] ✓ score=+0.5561 (raw # 8) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5397 (raw #18) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: scales only] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.5310 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.4811 (raw # 6) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4684 (raw # 9) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.4438 (raw #13) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4392 (raw #15) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4910 (raw # 8) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4855 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4812 (raw #10) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.4802 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.5086 (raw # 8) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4806 (raw # 9) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.4640 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.4454 (raw #14) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4508 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] ✓ score=+0.4494 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.4092 (raw #11) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4077 (raw #13) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.4013 (raw #14) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6540 (raw # 1) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 2 [scales ] ✓ score=+0.5364 (raw # 8) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5155 (raw #11) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 4 [scales ] ✓ score=+0.5106 (raw #14) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 5 [scales ] ✓ score=+0.4997 (raw #16) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6800 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [scales ] ✓ score=+0.6728 (raw # 2) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.6699 (raw # 3) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.6519 (raw #10) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [scales ] ✓ score=+0.6344 (raw #20) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation SP" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4413 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [scales ] ✓ score=+0.4412 (raw # 2) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 3 [scales ] ✓ score=+0.4392 (raw # 3) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 4 [scales ] ✓ score=+0.4378 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.4333 (raw # 5) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: scales only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.4822 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [scales ] ✓ score=+0.4424 (raw # 7) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 3 [scales ] ✓ score=+0.4404 (raw # 9) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.4343 (raw #10) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + # 5 [scales ] ✓ score=+0.4335 (raw #12) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.8288 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.7086 (raw # 2) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 3 [collections ] ✓ score=+0.6283 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 4 [collections ] ✓ score=+0.6211 (raw # 4) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 5 [collections ] ✓ score=+0.6046 (raw # 5) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7747 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.6451 (raw # 2) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 3 [collections ] ✓ score=+0.5907 (raw # 3) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 4 [collections ] ✓ score=+0.5790 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 5 [collections ] ✓ score=+0.5572 (raw # 5) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6692 (raw # 1) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [collections ] ✓ score=+0.6196 (raw # 2) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + # 3 [collections ] ✓ score=+0.6095 (raw # 3) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 4 [collections ] ✓ score=+0.5906 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 5 [collections ] ✓ score=+0.5875 (raw # 5) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7374 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.6596 (raw # 2) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 3 [collections ] ✓ score=+0.6342 (raw # 3) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 4 [collections ] ✓ score=+0.6278 (raw # 4) + Entity : MTT + Preview: MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [collections ] ✓ score=+0.6273 (raw # 5) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: collections only] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6998 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 2 [collections ] ✓ score=+0.6692 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 3 [collections ] ✓ score=+0.5516 (raw # 3) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 4 [collections ] ✓ score=+0.5500 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 5 [collections ] ✓ score=+0.4970 (raw # 5) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 45.2% + scales : 44.8% + collections : 10.0% + +Average match% by expected section type: + collections : 100.0% (5 queries) + instruments : 100.0% (20 queries) + scales : 100.0% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/evaluation_20260528_084751.txt b/embeddings/Pipeline/evaluation_results/evaluation_20260528_084751.txt new file mode 100644 index 00000000..3d483843 --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/evaluation_20260528_084751.txt @@ -0,0 +1,1050 @@ +POEM Search Evaluation +Date : 2026-05-28 08:47:40 +Queries : 50 +Mode : all sections (--no-scope) +Top-k search (before dedup): 20 +Top-k unique (reported) : 5 + +======================================================================== +Query: "English instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7242 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✗ score=+0.6044 (raw # 2) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 3 [collections ] ✗ score=+0.5969 (raw # 3) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + # 4 [collections ] ✗ score=+0.5780 (raw # 4) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 5 [collections ] ✗ score=+0.5553 (raw # 5) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Youth instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6981 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✗ score=+0.5478 (raw # 2) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 3 [collections ] ✗ score=+0.5459 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 4 [collections ] ✗ score=+0.5339 (raw # 4) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 5 [instruments ] ✓ score=+0.5296 (raw # 5) + Entity : RCADS-35-Y-SW + Preview: RCADS-35-Y-SW. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 20% | scales: 0% | collections: 80% → match%: 20% + +======================================================================== +Query: "Depression instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7991 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✗ score=+0.7249 (raw #10) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 3 [instruments ] ✓ score=+0.7237 (raw #11) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [scales ] ✗ score=+0.7187 (raw #12) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 5 [collections ] ✗ score=+0.7036 (raw #15) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 40% | scales: 40% | collections: 20% → match%: 40% + +======================================================================== +Query: "Anxiety questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7486 (raw # 1) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.7475 (raw # 2) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7399 (raw # 4) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [scales ] ✗ score=+0.7300 (raw #14) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [instruments ] ✓ score=+0.7256 (raw #20) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 60% + +======================================================================== +Query: "caregiver instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7501 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7450 (raw # 2) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 3 [instruments ] ✓ score=+0.7437 (raw # 3) + Entity : RCADS-25-CG-PT + Preview: RCADS-25-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✓ score=+0.7427 (raw # 4) + Entity : RCADS-47-CG-PT + Preview: RCADS-47-CG-PT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.7414 (raw # 5) + Entity : RCADS-25-CG-AR + Preview: RCADS-25-CG-AR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "teacher instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7041 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✗ score=+0.5615 (raw # 2) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 3 [collections ] ✗ score=+0.5541 (raw # 3) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 4 [collections ] ✗ score=+0.5354 (raw # 4) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + # 5 [collections ] ✗ score=+0.5334 (raw # 5) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "adult questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8252 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7625 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [instruments ] ✓ score=+0.6860 (raw # 9) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [collections ] ✗ score=+0.6805 (raw #11) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [instruments ] ✓ score=+0.6800 (raw #12) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "child questionnaire" [expected: instruments | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6833 (raw # 1) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 2 [instruments ] ✓ score=+0.6727 (raw # 3) + Entity : RCADS-25-CG-EN-2 + Preview: RCADS-25-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [instruments ] ✓ score=+0.6608 (raw #14) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [instruments ] ✓ score=+0.6534 (raw #20) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "PHQ-9" [expected: instruments | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.8129 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [instruments ] ✓ score=+0.7194 (raw #10) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 3 [scales ] ✗ score=+0.7149 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [collections ] ✗ score=+0.6859 (raw #15) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 50% | scales: 25% | collections: 25% → match%: 50% + +======================================================================== +Query: "GAD-7" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7729 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✗ score=+0.7251 (raw # 2) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 3 [instruments ] ✓ score=+0.7207 (raw # 3) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 4 [instruments ] ✓ score=+0.6756 (raw # 9) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✓ score=+0.6676 (raw #14) + Entity : RCADS-47-Y-SV + Preview: RCADS-47-Y-SV. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS-25" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.8135 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 2 [collections ] ✗ score=+0.7721 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 3 [instruments ] ✓ score=+0.7324 (raw # 3) + Entity : RCADS-25-Y-BN + Preview: RCADS-25-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.7271 (raw # 4) + Entity : RCADS-25-Y-ZU + Preview: RCADS-25-Y-ZU. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 5 [instruments ] ✓ score=+0.7267 (raw # 5) + Entity : RCADS-25-Y-SR + Preview: RCADS-25-Y-SR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 60% | scales: 0% | collections: 40% → match%: 60% + +======================================================================== +Query: "RCADS-47" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7324 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 2 [collections ] ✗ score=+0.6816 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 3 [instruments ] ✓ score=+0.6560 (raw # 3) + Entity : RCADS-47-Y-BN + Preview: RCADS-47-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + # 4 [instruments ] ✓ score=+0.6463 (raw # 4) + Entity : RCADS-47-CG-JA + Preview: RCADS-47-CG-JA. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.6461 (raw # 5) + Entity : RCADS-47-Y-MR + Preview: RCADS-47-Y-MR. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 60% | scales: 0% | collections: 40% → match%: 60% + +======================================================================== +Query: "MTT-35" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6417 (raw # 1) + Entity : MTT + Preview: MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 2 [instruments ] ✓ score=+0.6235 (raw # 2) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 3 [instruments ] ✓ score=+0.6139 (raw # 3) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✓ score=+0.6078 (raw # 4) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 5 [instruments ] ✓ score=+0.6058 (raw # 5) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "RCADS questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7840 (raw # 1) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7784 (raw # 2) + Entity : RCADS-25-CG-FR + Preview: RCADS-25-CG-FR. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7740 (raw # 3) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [collections ] ✗ score=+0.7736 (raw # 4) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 5 [instruments ] ✓ score=+0.7717 (raw # 5) + Entity : RCADS-47-CG-LT + Preview: RCADS-47-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "MTT questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7961 (raw # 1) + Entity : MTT-35-CG-ES-2 + Preview: MTT-35-CG-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✓ score=+0.7873 (raw # 2) + Entity : MTT-35-CG-ES-1 + Preview: MTT-35-CG-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✓ score=+0.7836 (raw # 3) + Entity : MTT-35-CG-NO + Preview: MTT-35-CG-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has ... + # 4 [instruments ] ✓ score=+0.7642 (raw # 4) + Entity : MTT-35-Y-NO + Preview: MTT-35-Y-NO. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has a... + # 5 [instruments ] ✓ score=+0.7639 (raw # 5) + Entity : MTT-35-Y-ES-2 + Preview: MTT-35-Y-ES-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "patient health questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.7152 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.7019 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [collections ] ✗ score=+0.6519 (raw # 8) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 4 [instruments ] ✓ score=+0.6296 (raw #12) + Entity : RCADS-25-CG-LT + Preview: RCADS-25-CG-LT. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✓ score=+0.6281 (raw #13) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "therapeutic alliance instrument" [expected: instruments | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6663 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✓ score=+0.6292 (raw #10) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 100% + +======================================================================== +Query: "OCD instrument" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.7066 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✗ score=+0.6099 (raw # 2) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 3 [collections ] ✗ score=+0.5908 (raw # 3) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 4 [collections ] ✗ score=+0.5782 (raw # 4) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [collections ] ✗ score=+0.5671 (raw # 5) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "Spanish questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6467 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6034 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [collections ] ✗ score=+0.5954 (raw # 3) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 4 [instruments ] ✓ score=+0.5716 (raw # 5) + Entity : RCADS-25-CG-ZH-HANT + Preview: RCADS-25-CG-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 5 [instruments ] ✓ score=+0.5709 (raw # 6) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "Chinese questionnaire" [expected: instruments | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✓ score=+0.6351 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✓ score=+0.6103 (raw # 2) + Entity : RCADS-25-Y-ZH-HANT + Preview: RCADS-25-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 3 [instruments ] ✓ score=+0.6066 (raw # 3) + Entity : RCADS-47-Y-ZH-HANT + Preview: RCADS-47-Y-ZH-HANT. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire ... + # 4 [collections ] ✗ score=+0.5985 (raw # 4) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [instruments ] ✓ score=+0.5945 (raw # 5) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 80% + +======================================================================== +Query: "Anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6422 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6183 (raw # 8) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6088 (raw #20) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6285 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] ✓ score=+0.6104 (raw # 3) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [scales ] ✓ score=+0.5672 (raw #17) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 4 [scales ] ✓ score=+0.5629 (raw #18) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5616 (raw #19) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Social phobia" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7059 (raw # 1) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 2 [instruments ] ✗ score=+0.6269 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6194 (raw #11) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [scales ] ✓ score=+0.5901 (raw #13) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 5 [scales ] ✓ score=+0.5838 (raw #14) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "OCD" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6612 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6222 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.6064 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5980 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5946 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Panic disorder" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6808 (raw # 1) + Entity : Panic Disorder (9.1) + Preview: Panic Disorder (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] ✗ score=+0.5736 (raw #10) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5677 (raw #13) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + + Section breakdown: instruments: 33% | scales: 67% | collections: 0% → match%: 67% + +======================================================================== +Query: "Separation anxiety" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7084 (raw # 1) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 2 [instruments ] ✗ score=+0.6386 (raw # 8) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6118 (raw #10) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.6026 (raw #13) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.5988 (raw #16) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% → match%: 40% + +======================================================================== +Query: "Generalized anxiety disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6803 (raw # 1) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + # 2 [instruments ] ✗ score=+0.5828 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.5683 (raw #16) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 4 [instruments ] ✗ score=+0.5664 (raw #19) + Entity : RCADS-47-Y-KO + Preview: RCADS-47-Y-KO. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Major depressive disorder" [expected: scales | searched: all sections] +(top 4 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6805 (raw # 1) + Entity : Major Depressive Disorder (10.1) + Preview: Major Depressive Disorder (10.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire... + # 2 [scales ] ✓ score=+0.5995 (raw #11) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] ✗ score=+0.5679 (raw #15) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.5677 (raw #17) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + + Section breakdown: instruments: 50% | scales: 50% | collections: 0% → match%: 50% + +======================================================================== +Query: "Obsessive compulsive disorder" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6884 (raw # 1) + Entity : Obsessive Compulsive Disorder (6.1) + Preview: Obsessive Compulsive Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [instruments ] ✗ score=+0.6163 (raw # 7) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5960 (raw # 8) + Entity : RCADS-47-CG-EN + Preview: RCADS-47-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.5828 (raw # 9) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.5763 (raw #10) + Entity : RCADS-25-CG-EN + Preview: RCADS-25-CG-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Total anxiety" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6929 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] ✓ score=+0.6906 (raw # 3) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] ✓ score=+0.6839 (raw # 6) + Entity : Total Anxiety (20.1) + Preview: Total Anxiety (20.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Total depression" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6002 (raw # 1) + Entity : Total Depression (5.1) + Preview: Total Depression (5.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale -... + # 2 [instruments ] ✗ score=+0.5984 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.5738 (raw # 4) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 4 [scales ] ✓ score=+0.5715 (raw # 6) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [scales ] ✓ score=+0.5561 (raw #15) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 20% | scales: 80% | collections: 0% → match%: 80% + +======================================================================== +Query: "Total anxiety and depression" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.7131 (raw # 1) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 2 [scales ] ✓ score=+0.6893 (raw #17) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + + Section breakdown: instruments: 0% | scales: 100% | collections: 0% → match%: 100% + +======================================================================== +Query: "Therapeutic relationship" [expected: scales | searched: all sections] +(top 2 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6118 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.6101 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Treatment expectancy" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6512 (raw # 1) + Entity : Expectancy (7.1) + Preview: Expectancy (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6110 (raw # 6) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5941 (raw # 9) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "Treatment attendance" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] ✓ score=+0.6584 (raw # 1) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 2 [instruments ] ✗ score=+0.6289 (raw # 2) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 3 [instruments ] ✗ score=+0.6286 (raw # 3) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] ✗ score=+0.6277 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] ✗ score=+0.6237 (raw # 5) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% → match%: 20% + +======================================================================== +Query: "Homework completion" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.5105 (raw # 1) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 2 [instruments ] ✗ score=+0.5056 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] ✗ score=+0.5045 (raw # 3) + Entity : MTT-35-Y-ES-1 + Preview: MTT-35-Y-ES-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] ✗ score=+0.4907 (raw # 6) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 5 [instruments ] ✗ score=+0.4880 (raw # 9) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 100% | scales: 0% | collections: 0% → match%: 0% + +======================================================================== +Query: "Therapy clarity" [expected: scales | searched: all sections] +(top 3 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.6682 (raw # 1) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 2 [instruments ] ✗ score=+0.6609 (raw # 2) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [scales ] ✓ score=+0.6540 (raw # 5) + Entity : Clarity (7.1) + Preview: Clarity (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has memb... + + Section breakdown: instruments: 67% | scales: 33% | collections: 0% → match%: 33% + +======================================================================== +Query: "questionnaire scale" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7406 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [instruments ] ✗ score=+0.6978 (raw # 2) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 3 [scales ] ✓ score=+0.6800 (raw # 3) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 4 [scales ] ✓ score=+0.6728 (raw # 4) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 5 [scales ] ✓ score=+0.6699 (raw # 5) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% → match%: 60% + +======================================================================== +Query: "notation SP" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.5055 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 2 [collections ] ✗ score=+0.4864 (raw # 2) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 3 [collections ] ✗ score=+0.4773 (raw # 3) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 4 [collections ] ✗ score=+0.4647 (raw # 4) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 5 [collections ] ✗ score=+0.4640 (raw # 5) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 0% + +======================================================================== +Query: "notation GAD" [expected: scales | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✗ score=+0.6396 (raw # 1) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 2 [collections ] ✗ score=+0.5689 (raw # 2) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 3 [instruments ] ✗ score=+0.5230 (raw # 3) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 4 [collections ] ✗ score=+0.5227 (raw # 4) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 5 [scales ] ✓ score=+0.4822 (raw # 5) + Entity : Generalized Anxiety Disorder (6.1) + Preview: Generalized Anxiety Disorder (6.1). Attributes include: - instance of: NamedIndividual - instance of: questionnai... + + Section breakdown: instruments: 20% | scales: 20% | collections: 60% → match%: 20% + +======================================================================== +Query: "Instrument collection" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.8288 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.7086 (raw # 2) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 3 [collections ] ✓ score=+0.6283 (raw # 3) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 4 [collections ] ✓ score=+0.6211 (raw # 4) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 5 [collections ] ✓ score=+0.6046 (raw # 5) + Entity : 4 + Preview: 4. Attributes include: - instance of: Instrument Collection - has member count: 1 - has instrument family: PHQ-... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Group of instruments" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7747 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.6451 (raw # 2) + Entity : PSWQ-C + Preview: PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ... + # 3 [collections ] ✓ score=+0.5907 (raw # 3) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 4 [collections ] ✓ score=+0.5790 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 5 [collections ] ✓ score=+0.5572 (raw # 5) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "Collection of questionnaires" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] ✗ score=+0.7173 (raw # 1) + Entity : GAD-7 + Preview: GAD-7. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has attribu... + # 2 [collections ] ✓ score=+0.6692 (raw # 2) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 3 [instruments ] ✗ score=+0.6354 (raw # 3) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 4 [instruments ] ✗ score=+0.6313 (raw # 4) + Entity : RCADS-25-CG-BN + Preview: RCADS-25-CG-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ha... + # 5 [instruments ] ✗ score=+0.6294 (raw # 5) + Entity : RCADS-47-CG-SV-2 + Preview: RCADS-47-CG-SV-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + + Section breakdown: instruments: 80% | scales: 0% | collections: 20% → match%: 20% + +======================================================================== +Query: "multilingual instrument set" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.7374 (raw # 1) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 2 [collections ] ✓ score=+0.6596 (raw # 2) + Entity : 3 + Preview: 3. Attributes include: - instance of: Instrument Collection - has member count: 9 - has instrument family: MTT-... + # 3 [collections ] ✓ score=+0.6342 (raw # 3) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 4 [collections ] ✓ score=+0.6278 (raw # 4) + Entity : MTT + Preview: MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + # 5 [collections ] ✓ score=+0.6273 (raw # 5) + Entity : PHQ + Preview: PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: ins... + + Section breakdown: instruments: 0% | scales: 0% | collections: 100% → match%: 100% + +======================================================================== +Query: "instrument set RCADS" [expected: collections | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [collections ] ✓ score=+0.6998 (raw # 1) + Entity : RCADS + Preview: RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: i... + # 2 [collections ] ✓ score=+0.6692 (raw # 2) + Entity : 1 + Preview: 1. Attributes include: - instance of: Instrument Collection - has member count: 111 - has instrument family: RC... + # 3 [collections ] ✓ score=+0.5516 (raw # 3) + Entity : 2 + Preview: 2. Attributes include: - instance of: Instrument Collection - has member count: 0 + # 4 [collections ] ✓ score=+0.5500 (raw # 4) + Entity : GAD + Preview: GAD. Attributes include: - instance of: Instrument Collection - has member count: 1 - has member with unrecogni... + # 5 [instruments ] ✗ score=+0.5307 (raw # 5) + Entity : RCADS-47-Y-BN + Preview: RCADS-47-Y-BN. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - has... + + Section breakdown: instruments: 20% | scales: 0% | collections: 80% → match%: 80% + +======================================================================== +Query: "afraid of being in crowded places" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6694 (raw # 1) + Entity : Total Anxiety (15.1) + Preview: Total Anxiety (15.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [scales ] score=+0.6642 (raw # 2) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 3 [scales ] score=+0.6510 (raw # 3) + Entity : Separation Anxiety Disorder (7.1) + Preview: Separation Anxiety Disorder (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnair... + # 4 [instruments ] score=+0.6441 (raw # 4) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6383 (raw # 5) + Entity : RCADS-25-Y-EN + Preview: RCADS-25-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "feels nothing is much fun anymore" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [instruments ] score=+0.5536 (raw # 1) + Entity : PHQ-9-A-EN + Preview: PHQ-9-A-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: psyc... + # 2 [scales ] score=+0.5484 (raw # 2) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 3 [scales ] score=+0.5292 (raw # 3) + Entity : Total Anxiety and Depression (25.1) + Preview: Total Anxiety and Depression (25.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 4 [instruments ] score=+0.5168 (raw # 5) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 5 [scales ] score=+0.5051 (raw # 7) + Entity : Depression (9.1) + Preview: Depression (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "worries about mistakes" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.6483 (raw # 1) + Entity : Total Anxiety (37.1) + Preview: Total Anxiety (37.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - h... + # 2 [instruments ] score=+0.6314 (raw # 2) + Entity : RCADS-47-CG-EN-2 + Preview: RCADS-47-CG-EN-2. Attributes include: - instance of: Questionnaire - instance of: psychometric questionnaire - ... + # 3 [scales ] score=+0.6143 (raw # 3) + Entity : Social Phobia (9.1) + Preview: Social Phobia (9.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - ha... + # 4 [scales ] score=+0.6054 (raw # 4) + Entity : Total Anxiety and Depression (47.1) + Preview: Total Anxiety and Depression (47.1). Attributes include: - instance of: NamedIndividual - instance of: questionna... + # 5 [instruments ] score=+0.5810 (raw # 5) + Entity : RCADS-47-Y-EN + Preview: RCADS-47-Y-EN. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + + Section breakdown: instruments: 40% | scales: 60% | collections: 0% + +======================================================================== +Query: "I actively participate" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.5835 (raw # 1) + Entity : Homework (7.1) + Preview: Homework (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has mem... + # 2 [scales ] score=+0.5398 (raw # 2) + Entity : Attendance (7.1) + Preview: Attendance (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has m... + # 3 [instruments ] score=+0.5396 (raw # 3) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 4 [instruments ] score=+0.5340 (raw # 4) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.5312 (raw # 5) + Entity : MTT-35-CG-EN-3 + Preview: MTT-35-CG-EN-3. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 60% | scales: 40% | collections: 0% + +======================================================================== +Query: "counselor understands my culture" [no expectation | searched: all sections] +(top 5 unique entities from top-20 raw results) +------------------------------------------------------------------------ + # 1 [scales ] score=+0.7102 (raw # 1) + Entity : Relationship (7.1) + Preview: Relationship (7.1). Attributes include: - instance of: NamedIndividual - instance of: questionnaire scale - has... + # 2 [instruments ] score=+0.6818 (raw # 2) + Entity : MTT-35-Y-EN-2 + Preview: MTT-35-Y-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 3 [instruments ] score=+0.6684 (raw # 3) + Entity : MTT-35-CG-EN-2 + Preview: MTT-35-CG-EN-2. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + # 4 [instruments ] score=+0.6520 (raw # 4) + Entity : MTT-35-Y-EN-1 + Preview: MTT-35-Y-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: p... + # 5 [instruments ] score=+0.6393 (raw # 5) + Entity : MTT-35-CG-EN-1 + Preview: MTT-35-CG-EN-1. Attributes include: - instance of: NamedIndividual - instance of: Questionnaire - instance of: ... + + Section breakdown: instruments: 80% | scales: 20% | collections: 0% + +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 49.9% + scales : 26.0% + collections : 24.1% + +Average match% by expected section type: + collections : 80.0% (5 queries) + instruments : 62.5% (20 queries) + scales : 47.7% (20 queries) diff --git a/embeddings/Pipeline/evaluation_results/model_comparison.txt b/embeddings/Pipeline/evaluation_results/model_comparison.txt new file mode 100644 index 00000000..7515ad93 --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/model_comparison.txt @@ -0,0 +1,40 @@ +POEM Model Comparison -- 2026-05-28 08:46:10 + +MODEL: gpt-oss:latest -- SKIPPED (endpoint test failed: FAIL Error code: 501 - {'error': {'message': 'this model does not support embeddings', 'type': 'api_error', 'param': None, 'code': None}}) +======================================================================== + +MODEL: qwen3-embedding:latest | dim: 4096 + +--- SCOPED (each query searched within its expected section) --- +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 45.2% + scales : 44.8% + collections : 10.0% + +Average match% by expected section type: + collections : 100.0% (5 queries) + instruments : 100.0% (20 queries) + scales : 100.0% (20 queries) + +--- UNSCOPED (all sections searched together) --- +======================================================================== +SUMMARY +------------------------------------------------------------------------ +Average section breakdown across ALL queries: + instruments : 49.9% + scales : 26.0% + collections : 24.1% + +Average match% by expected section type: + collections : 80.0% (5 queries) + instruments : 62.5% (20 queries) + scales : 47.7% (20 queries) + +======================================================================== + +MODEL: gpt-oss:120b -- SKIPPED (endpoint test failed: FAIL Error code: 501 - {'error': {'message': 'this model does not support embeddings', 'type': 'api_error', 'param': None, 'code': None}}) +======================================================================== + diff --git a/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.md b/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.md new file mode 100644 index 00000000..8c0dd00b --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.md @@ -0,0 +1,77 @@ +# POEM Embeddings Evaluation — Work Summary + +Quick reference: see `../../manuals/DOCS_SUMMARY.md` for a concise quick-start and troubleshooting cheatsheet. + +**Reporting period:** through 2026-05-28 +**Model under evaluation:** qwen3-embedding (dim 4096) + +--- + +## 1) Overview of the work + +Over the past week of work on the POEM embedding-search pipeline, I have: + +- **Built out a comprehensive evaluation harness.** The query dataset in `embeddings/evaluate_search.py` has been expanded from 12 to 50 queries, designed to cover every dimension materialized in the .ttl ontology — informants, instrument families, all 6 RCADS clinical subscales, all 5 MTT therapeutic-alliance subscales (previously untested), composite scales, notation codes, collections, and cross-section item-text probes. +- **Made the model-test runner auto-discovering.** `embeddings/model_test.ps1` now queries `GET /v1/models` on the embedding server at runtime rather than relying on a hardcoded model list, so the evaluation keeps working as the server's loaded models change. +- **Diagnosed and fixed a data-modeling defect that was poisoning unscoped search.** The collection emitter in `embeddings/generate_text_templates.py` was rewritten — collections went from ~314 nearly-blank one-line-per-member paragraphs down to 3 rich paragraphs synthesized from member metadata, without modifying any .ttl files. + +### How `model_test.ps1` runs for each model under test + +1. **Step 1 — Endpoint check.** Calls `embeddings.create` with a single test token; prints the embedding dimension or skips the model if the server doesn't support embeddings for it. +2. **Step 2 — Regenerate vectors.** Runs `generate_embeddings.py` against every paragraph in `templates_official.txt`, producing one `.npy` per instrument/scale/collection. +3. **Step 3 — Section-scoped evaluation.** Runs the 50 queries with each query restricted to its expected section (instruments-only for instrument queries, etc.). +4. **Step 4 — Unscoped evaluation.** Runs the same 50 queries with `--no-scope`, letting all three sections compete in one search. +5. **Step 5 — Summarize.** Extracts the SUMMARY block from each eval run and appends both to `model_comparison.txt`. + +--- + +## 2) Baseline results before the pipeline fix + +After the dataset expansion but before the collection-template fix, qwen3-embedding produced: + +| Mode | Instruments | Scales | Collections | +|---|---|---|---| +| **Scoped** | 100% match% | 100% | 100% | +| **Unscoped** | 59% | 47% | 92% | + +The unscoped numbers surfaced a real defect. Average top-5 composition was 47% instruments / 26% scales / **27% collections** — meaning roughly a quarter of every result list was being eaten by collection paragraphs, even though only 3 distinct collections exist in the data. + +**Root cause:** each collection was being emitted as ~100 separate `(collection, member)` paragraphs containing only `instance of: Instrument Collection` plus one member code, with zero descriptive text. These low-information stubs were ranking above real instruments and scales just because they looked semantically "instrument-ish" by sheer count. + +--- + +## 3) Improvements made to the embeddings pipeline + +- **`generate_text_templates.py` — collection emitter rewritten.** Each collection now becomes one paragraph instead of one-per-member. The paragraph carries synthesized attributes derived from the member identifiers themselves: member count, instrument family breakdown (e.g. `RCADS-25 (47), RCADS-47 (33), MTT-35 (15)`), informant coverage (caregiver, youth), and language coverage with friendly names (Arabic, Bengali, Chinese (Simplified), …). The .ttl files were deliberately not touched — all enrichment lives in the template-generation layer, so other consumers of the ontology (RML mappings, the demo UI) remain unaffected. +- **`evaluate_search.py` — dataset expanded.** 12 → 50 queries covering every materialized ontology dimension; notably this added all 5 MTT therapeutic-alliance subscales (zero coverage before), composite scales, notation-field probes, and dedicated collection queries. + +**Net structural effect:** collection paragraphs dropped from 314 → 9 in `templates_official.txt`, and each surviving paragraph carries real descriptive content. + +--- + +## 4) Improvement in results (qwen3-embedding, post-fix) + +**Scoped mode: unchanged at 100% / 100% / 100%** — expected, since scoped search never had the cross-section pollution problem in the first place. + +**Unscoped mode — the fix moved the numbers in the predicted direction:** + +| Metric | Pre-fix | Post-fix | Change | +|---|---|---|---| +| Instruments match% | 59.0% | **62.5%** | **+3.5 pts** ✓ | +| Scales match% | 46.7% | **47.7%** | +1.0 pts | +| Collections match% | 92.0% | 80.0% | −12.0 pts (see note) | +| Collection share of avg top-5 | 27.1% | **24.1%** | **−3.0 pts** (less pollution) ✓ | +| Instrument share of avg top-5 | 47.4% | **49.9%** | **+2.5 pts** (more real results) ✓ | + +### Reading the numbers honestly + +- **Instrument recovery is real (+3.5 pts).** With fewer blank collection paragraphs hogging top-5 slots, real instruments are surfacing more often — exactly the predicted effect. +- **Collection pollution dropped from 27% to 24% of average top-5.** The structural fix is doing what it was designed to do. +- **Collections' own match% dropped from 92% → 80%** as a *side effect* of consolidation: with only 3 rich paragraphs to choose from instead of 300 stubs, some collection queries now legitimately surface MTT or RCADS instruments because those are the actual best matches. This is a healthier failure mode — losing 1 of 5 collection queries to a real semantic competitor is preferable to winning 5/5 by flooding the result list. +- **Scales barely moved (+1 pt).** This tells us scale-vs-instrument confusion is *not* a collection problem — it's the structural reality that item-stem text appears in both instrument and scale paragraphs. Resolving it would need different work (e.g. boosting scale-specific vocabulary, or re-ranking on entity type), and is the next natural area of investigation. + +### Bottom line + +The data-modeling fix worked in the expected direction with modest magnitude. Collection pollution is measurably down, real instruments are recovering top-5 slots, and the underlying ontology stayed untouched. The remaining unscoped gap is dominated by genuine instrument↔scale semantic overlap, which is a different problem class and a candidate for the next iteration. + +**Scoped search remains 100% / 100% / 100% across 45 graded queries — that's the production-ready headline.** diff --git a/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.txt b/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.txt new file mode 100644 index 00000000..00720b78 --- /dev/null +++ b/embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.txt @@ -0,0 +1,170 @@ +POEM Embeddings Evaluation -- Work Summary +========================================== + +Reporting period: through 2026-05-28 +Model under evaluation: qwen3-embedding (dim 4096) + + +1) OVERVIEW OF THE WORK +----------------------- + +Over the past week of work on the POEM embedding-search pipeline, +I have: + +- Built out a comprehensive evaluation harness. The query dataset in + embeddings/evaluate_search.py has been expanded from 12 to 50 + queries, designed to cover every dimension materialized in the .ttl + ontology -- informants, instrument families, all 6 RCADS clinical + subscales, all 5 MTT therapeutic-alliance subscales (previously + untested), composite scales, notation codes, collections, and + cross-section item-text probes. + +- Made the model-test runner auto-discovering. + embeddings/model_test.ps1 now queries GET /v1/models on the + embedding server at runtime rather than relying on a hardcoded + model list, so the evaluation keeps working as the server's loaded + models change. + +- Diagnosed and fixed a data-modeling defect that was poisoning + unscoped search. The collection emitter in + embeddings/generate_text_templates.py was rewritten -- collections + went from ~314 nearly-blank one-line-per-member paragraphs down to + 3 rich paragraphs synthesized from member metadata, without + modifying any .ttl files. + + +How model_test.ps1 runs for each model under test: + + Step 1 -- Endpoint check. + Calls embeddings.create with a single test token; prints the + embedding dimension or skips the model if the server doesn't + support embeddings for it. + + Step 2 -- Regenerate vectors. + Runs generate_embeddings.py against every paragraph in + templates_official.txt, producing one .npy per instrument / + scale / collection. + + Step 3 -- Section-scoped evaluation. + Runs the 50 queries with each query restricted to its expected + section (instruments-only for instrument queries, etc.). + + Step 4 -- Unscoped evaluation. + Runs the same 50 queries with --no-scope, letting all three + sections compete in one search. + + Step 5 -- Summarize. + Extracts the SUMMARY block from each eval run and appends both + to model_comparison.txt. + + +2) BASELINE RESULTS BEFORE THE PIPELINE FIX +------------------------------------------- + +After the dataset expansion but before the collection-template fix, +qwen3-embedding produced: + + Scoped mode: + Instruments : 100% match% + Scales : 100% + Collections : 100% + + Unscoped mode: + Instruments : 59% + Scales : 47% + Collections : 92% + +The unscoped numbers surfaced a real defect. Average top-5 +composition was 47% instruments / 26% scales / 27% collections -- +meaning roughly a quarter of every result list was being eaten by +collection paragraphs, even though only 3 distinct collections exist +in the data. + +Root cause: each collection was being emitted as ~100 separate +(collection, member) paragraphs containing only "instance of: +Instrument Collection" plus one member code, with zero descriptive +text. These low-information stubs were ranking above real +instruments and scales just because they looked semantically +"instrument-ish" by sheer count. + + +3) IMPROVEMENTS MADE TO THE EMBEDDINGS PIPELINE +----------------------------------------------- + +- generate_text_templates.py -- collection emitter rewritten. + Each collection now becomes one paragraph instead of one-per-member. + The paragraph carries synthesized attributes derived from the + member identifiers themselves: member count, instrument family + breakdown (e.g. RCADS-25 (47), RCADS-47 (33), MTT-35 (15)), + informant coverage (caregiver, youth), and language coverage with + friendly names (Arabic, Bengali, Chinese (Simplified), ...). The + .ttl files were deliberately not touched -- all enrichment lives + in the template-generation layer, so other consumers of the + ontology (RML mappings, the demo UI) remain unaffected. + +- evaluate_search.py -- dataset expanded. + 12 -> 50 queries covering every materialized ontology dimension; + notably this added all 5 MTT therapeutic-alliance subscales + (zero coverage before), composite scales, notation-field probes, + and dedicated collection queries. + +Net structural effect: collection paragraphs dropped from 314 -> 9 +in templates_official.txt, and each surviving paragraph carries real +descriptive content. + + +4) IMPROVEMENT IN RESULTS (qwen3-embedding, post-fix) +----------------------------------------------------- + +Scoped mode: unchanged at 100% / 100% / 100% -- expected, since +scoped search never had the cross-section pollution problem in the +first place. + +Unscoped mode -- the fix moved the numbers in the predicted direction: + + Metric Pre-fix Post-fix Change + ---------------------------------- ------- -------- -------- + Instruments match% 59.0% 62.5% +3.5 pts + Scales match% 46.7% 47.7% +1.0 pts + Collections match% 92.0% 80.0% -12.0 pts (*) + Collection share of avg top-5 27.1% 24.1% -3.0 pts (less pollution) + Instrument share of avg top-5 47.4% 49.9% +2.5 pts (more real results) + + +Reading the numbers honestly: + +- Instrument recovery is real (+3.5 pts). With fewer blank collection + paragraphs hogging top-5 slots, real instruments are surfacing + more often -- exactly the predicted effect. + +- Collection pollution dropped from 27% to 24% of average top-5. + The structural fix is doing what it was designed to do. + +- (*) Collections' own match% dropped from 92% -> 80% as a SIDE + EFFECT of consolidation: with only 3 rich paragraphs to choose + from instead of 300 stubs, some collection queries now legitimately + surface MTT or RCADS instruments because those are the actual best + matches. This is a healthier failure mode -- losing 1 of 5 + collection queries to a real semantic competitor is preferable to + winning 5/5 by flooding the result list. + +- Scales barely moved (+1 pt). This tells us scale-vs-instrument + confusion is NOT a collection problem -- it's the structural + reality that item-stem text appears in both instrument and scale + paragraphs. Resolving it would need different work (e.g. boosting + scale-specific vocabulary, or re-ranking on entity type), and is + the next natural area of investigation. + + +BOTTOM LINE +----------- + +The data-modeling fix worked in the expected direction with modest +magnitude. Collection pollution is measurably down, real instruments +are recovering top-5 slots, and the underlying ontology stayed +untouched. The remaining unscoped gap is dominated by genuine +instrument-vs-scale semantic overlap, which is a different problem +class and a candidate for the next iteration. + +Scoped search remains 100% / 100% / 100% across 45 graded queries -- +that's the production-ready headline. diff --git a/embeddings/Pipeline/generate_embeddings.py b/embeddings/Pipeline/generate_embeddings.py new file mode 100644 index 00000000..a2ee2e6d --- /dev/null +++ b/embeddings/Pipeline/generate_embeddings.py @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 +"""Generate (or incrementally update) embeddings for all template blocks. + +Each paragraph block is embedded and stored as one ``.npy`` vector in a section +subfolder, alongside: + + * ``texts.npy`` — the source text strings, index-aligned with the vectors. + * ``manifest.json`` — an ordered list of ``{"hash", "file"}`` (one per text + row) mapping each paragraph to its vector file and the + sha256 of its text. This is what makes incremental + updates possible: on a later run, only blocks whose text + hash changed (or are new) are re-embedded; vectors for + unchanged blocks are kept, and files for removed blocks + are deleted. + +Vector filenames are content-addressed: ``{slug}_{hash12}.npy``. Identical blocks +share a file and are embedded once. + +Usage: + # Full (re)build — embeds every block + python generate_embeddings.py + + # Incremental — re-embed only changed/new blocks (needs a prior manifest) + python generate_embeddings.py --incremental + + # One section only + python generate_embeddings.py --only instruments +""" +from __future__ import annotations + +import os +import sys + +_EMB_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +import re # noqa: E402 +import glob # noqa: E402 +import hashlib # noqa: E402 +import argparse # noqa: E402 + +import numpy as np # noqa: E402 + +from poem_core import config # noqa: E402 +from poem_core.entities import entity_slug_from_text # noqa: E402 +from poem_core.embedding_client import embed_texts # noqa: E402 +from poem_core.corpus import read_manifest, write_manifest # noqa: E402 + +TEMPLATES_PATH = config.TEMPLATES_PATH +EMBEDDINGS_DIR = config.EMBEDDINGS_DIR +BATCH_SIZE = config.BATCH_SIZE + + +# --------------------------------------------------------------------------- +# Template parsing +# --------------------------------------------------------------------------- + +def parse_sections(text: str) -> dict: + """Split the template file into named sections. + + Returns a dict mapping a slugified section name to a list of text blocks, + e.g. {"instruments": [...], "scales": [...], "item_stems": [...]}. + """ + header_pattern = re.compile(r"=== ([A-Z0-9][A-Z0-9 _-]*?) ===") + headers = list(header_pattern.finditer(text)) + + sections = {} + for i, match in enumerate(headers): + name = match.group(1).strip().lower().replace(" ", "_") + start = match.end() + end = headers[i + 1].start() if i + 1 < len(headers) else len(text) + section_text = text[start:end] + + blocks = [b.strip() for b in re.split(r"\n\n+", section_text)] + blocks = [b for b in blocks if b] + sections[name] = blocks + + return sections + + +# --------------------------------------------------------------------------- +# Content addressing +# --------------------------------------------------------------------------- + +def _text_hash(text: str) -> str: + return hashlib.sha256(text.encode("utf-8")).hexdigest() + + +def _vector_filename(text: str, h: str) -> str: + return f"{entity_slug_from_text(text)}_{h[:12]}.npy" + + +# --------------------------------------------------------------------------- +# Embedding +# --------------------------------------------------------------------------- + +def update_section( + section_name: str, + texts: list[str], + out_dir: str, + incremental: bool, +) -> dict: + """Embed (or reuse) every block in one section and persist vectors + manifest. + + Returns a stats dict: {embedded, reused, removed, total}. + """ + os.makedirs(out_dir, exist_ok=True) + + prior = {e["hash"]: e["file"] for e in read_manifest(out_dir)} if incremental else {} + + # Build the index-aligned manifest and figure out which unique hashes still + # need an embedding written to disk. + entries: list[dict] = [] + to_embed: dict[str, str] = {} # hash -> representative text (dedup identical blocks) + reused = 0 + for text in texts: + h = _text_hash(text) + reuse_file = prior.get(h) + if reuse_file and os.path.exists(os.path.join(out_dir, reuse_file)): + entries.append({"hash": h, "file": reuse_file}) + reused += 1 + continue + fname = _vector_filename(text, h) + entries.append({"hash": h, "file": fname}) + # Only embed a given hash once; skip if its file already exists on disk. + if h not in to_embed and not os.path.exists(os.path.join(out_dir, fname)): + to_embed[h] = text + + # Embed the missing unique blocks in batches. + pending = list(to_embed.items()) + file_by_hash = {e["hash"]: e["file"] for e in entries} + embedded = 0 + for i in range(0, len(pending), BATCH_SIZE): + chunk = pending[i:i + BATCH_SIZE] + print(f" [{section_name}] embedding batch {i // BATCH_SIZE + 1} ({len(chunk)} new texts)...") + vecs = embed_texts([t for _, t in chunk]) + for (h, _), vec in zip(chunk, vecs): + np.save(os.path.join(out_dir, file_by_hash[h]), vec) + embedded += 1 + + # Persist the texts index and manifest (index-aligned). + np.save(os.path.join(out_dir, "texts.npy"), np.array(texts, dtype=object)) + write_manifest(out_dir, entries) + + # Delete stale vector files no longer referenced. + keep = {e["file"] for e in entries} | {"texts.npy"} + removed = 0 + for path in glob.glob(os.path.join(out_dir, "*.npy")): + if os.path.basename(path) not in keep: + os.remove(path) + removed += 1 + + return {"embedded": embedded, "reused": reused, "removed": removed, "total": len(texts)} + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def main() -> None: + parser = argparse.ArgumentParser(description="Generate or update POEM embeddings.") + parser.add_argument("--templates", default=TEMPLATES_PATH, + help=f"Templates file to embed (default: {TEMPLATES_PATH})") + parser.add_argument("--incremental", action="store_true", + help="Re-embed only new/changed blocks (uses each section's manifest.json)") + parser.add_argument("--only", default=None, + help="Comma-separated section name(s) to embed (default: all in the file)") + args = parser.parse_args() + + with open(args.templates, encoding="utf-8") as f: + raw = f.read() + sections = parse_sections(raw) + + if args.only: + wanted = {s.strip().lower() for s in args.only.split(",")} + sections = {k: v for k, v in sections.items() if k in wanted} + + for name, blocks in sections.items(): + print(f"Section '{name}': {len(blocks)} paragraphs") + + print(f"\nEmbedding backend: {config.EMBED_MODEL} @ {config.EMBED_BASE_URL}") + print(f"Mode: {'incremental' if args.incremental else 'full rebuild'}\n") + + for section_name, texts in sections.items(): + out_dir = os.path.join(EMBEDDINGS_DIR, section_name) + stats = update_section(section_name, texts, out_dir, args.incremental) + print(f"[{section_name}] embedded {stats['embedded']}, reused {stats['reused']}, " + f"removed {stats['removed']} (total {stats['total']}) -> {out_dir}/") + + print("\nDone!") + + +if __name__ == "__main__": + main() diff --git a/embeddings/Pipeline/generate_text_templates.py b/embeddings/Pipeline/generate_text_templates.py new file mode 100644 index 00000000..9345a6c9 --- /dev/null +++ b/embeddings/Pipeline/generate_text_templates.py @@ -0,0 +1,503 @@ +#!/usr/bin/env python3 +"""Generate text templates for instruments, scales, and collections. + +Output format: + RCADS-25-Y-EN. Attributes include: + - instance of: Psychometric Questionnaire + - has member: I don't feel happy anymore + - has attribute: Youth + - has attribute: Social Phobia (9.1) + +Usage: + python scripts/generate_text_templates.py + python scripts/generate_text_templates.py --output templates.txt +""" +from __future__ import annotations + +import os +import re +import sys +import argparse +from collections import defaultdict + +_EMB_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +from rdflib import Graph, Namespace, URIRef, BNode +from rdflib.namespace import RDF, RDFS, SKOS, OWL + +from poem_core import config +from poem_core.entities import readable_local_name # re-exported for graph_lookup +from poem_core.graph import load_graph # re-exported; loader lives in core + +# Repo paths come from the central config (honors POEM_PROJECT_ROOT / POEM_DATA_DIR). +PROJECT_ROOT = config.PROJECT_ROOT +DATA_DIR = config.DATA_DIR + +POEM = Namespace("http://purl.org/twc/poem/") +FHIR_CODE = URIRef("http://hl7.org/fhir/code") + +# CURIE prefixes accepted by --section NAME=prefix:Class +_PREFIXES = { + "poem:": "http://purl.org/twc/poem/", + "sio:": "http://semanticscience.org/resource/", + "vstoi:": "http://purl.org/twc/vstoi/", + "fhir:": "http://hl7.org/fhir/", + "skos:": "http://www.w3.org/2004/02/skos/core#", +} + + +def expand_uri(s: str) -> URIRef: + """Expand a CURIE (poem:Foo) or pass through a full URI as a URIRef.""" + for pfx, base in _PREFIXES.items(): + if s.startswith(pfx): + return URIRef(base + s[len(pfx):]) + return URIRef(s) + + +# --------------------------------------------------------------------------- +# SPARQL queries — each uses OPTIONAL for labels so missing labels don't +# drop the row; Python falls back to readable_local_name() for any None values. +# All three share one PREFIX block (defined once) to avoid drift between them. +# --------------------------------------------------------------------------- + +_SPARQL_PREFIXES = """\ +PREFIX sio: +PREFIX rdf: +PREFIX rdfs: +PREFIX skos: +PREFIX fhir: +PREFIX dc: +PREFIX poem: +PREFIX vstoi: +""" + +INSTRUMENT_QUERY = _SPARQL_PREFIXES + """ +SELECT ?instrument ?code ?predicate ?objectURI ?objectLabel +WHERE { + ?instrument a poem:PsychometricQuestionnaire . + ?instrument fhir:code ?code . + + { + # instance of — OPTIONAL label, fall back to localname in Python + ?instrument rdf:type ?objectURI . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("instance of" AS ?predicate) + } + UNION + { + # has member — item -> English stem -> label + ?instrument sio:SIO_000059 ?item . + ?item sio:SIO_000253 ?stem . + ?stem dc:language . + ?stem rdfs:label ?objectLabel . + BIND(?stem AS ?objectURI) + BIND("has member" AS ?predicate) + } + UNION + { + # has attribute — informant (Youth, Caregiver, etc.) + ?instrument sio:SIO_000008 ?objectURI . + ?objectURI a vstoi:Informant . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("has attribute" AS ?predicate) + } + UNION + { + # has attribute — scales (from scalesInstrument.ttl) + ?instrument sio:SIO_000008 ?objectURI . + ?objectURI a poem:QuestionnaireScale . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("has attribute" AS ?predicate) + } +} +ORDER BY ?code ?predicate ?objectLabel +""" + +SCALE_QUERY = _SPARQL_PREFIXES + """ +SELECT ?scale ?scaleLabel ?predicate ?objectURI ?objectLabel +WHERE { + ?scale a poem:QuestionnaireScale . + OPTIONAL { ?scale rdfs:label ?scaleLabel } + + { + # instance of + ?scale rdf:type ?objectURI . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("instance of" AS ?predicate) + } + UNION + { + # has member — item stem concepts + ?scale sio:SIO_000059 ?objectURI . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("has member" AS ?predicate) + } + UNION + { + # has attribute — notation (SP, PD, GAD, etc.) + ?scale skos:notation ?objectLabel . + BIND(?scale AS ?objectURI) + BIND("has attribute (notation)" AS ?predicate) + } +} +ORDER BY ?scaleLabel ?predicate ?objectLabel +""" + +COLLECTION_QUERY = _SPARQL_PREFIXES + """ +SELECT ?collection ?collectionLabel ?predicate ?objectURI ?objectLabel +WHERE { + ?collection a poem:InstrumentCollection . + OPTIONAL { ?collection rdfs:label ?collectionLabel } + + { + # instance of + ?collection rdf:type ?objectURI . + OPTIONAL { ?objectURI rdfs:label ?objectLabel } + BIND("instance of" AS ?predicate) + } + UNION + { + # has member — instruments in this collection. The data links collection -> + # instrument via SIO "has member" (sio:SIO_000059), not resource:hasMember. + ?collection sio:SIO_000059 ?objectURI . + OPTIONAL { ?objectURI fhir:code ?objectLabel } + BIND("has member" AS ?predicate) + } +} +ORDER BY ?collection ?predicate ?objectLabel +""" + + +def resolve_label(label, uri) -> str: + """Return label if present, otherwise derive readable name from URI.""" + if label is not None: + return str(label) + if uri is not None: + return readable_local_name(str(uri)) + return "(unknown)" + + +def format_template(identifier: str, data: dict) -> str: + """Format one node's attribute data — one block per has member item.""" + header_preds = ["instance of"] + attr_preds = ["has attribute", "has attribute (notation)"] + + header_lines = [] + for pred in header_preds: + for value in sorted(set(data.get(pred, []))): + header_lines.append(f" - {pred}: {value}") + + attr_lines = [] + for pred in attr_preds: + for value in sorted(set(data.get(pred, []))): + attr_lines.append(f" - {pred}: {value}") + + # Any remaining predicates not in the known sets + known = set(header_preds + ["has member"] + attr_preds) + for pred, values in data.items(): + if pred not in known: + for value in sorted(set(values)): + attr_lines.append(f" - {pred}: {value}") + + members = sorted(set(data.get("has member", []))) + + if not members: + lines = [f"{identifier}. Attributes include:"] + header_lines + attr_lines + return "\n".join(lines) + + blocks = [] + for member in members: + lines = ( + [f"{identifier}. Attributes include:"] + + header_lines + + [f" - has member: {member}"] + + attr_lines + ) + blocks.append("\n".join(lines)) + return "\n\n".join(blocks) + + +def run_instruments(g: Graph) -> list: + results = g.query(INSTRUMENT_QUERY) + nodes = defaultdict(lambda: defaultdict(list)) + for row in results: + code = str(row.code) + pred = str(row.predicate) + val = resolve_label(row.objectLabel, row.objectURI) + nodes[code][pred].append(val) + return [format_template(code, data) for code, data in sorted(nodes.items())] + + +def run_scales(g: Graph) -> list: + results = g.query(SCALE_QUERY) + nodes = defaultdict(lambda: defaultdict(list)) + identifiers = {} + for row in results: + uri = str(row.scale) + label = resolve_label(row.scaleLabel, row.scale) + identifiers[uri] = label + pred = str(row.predicate) + val = resolve_label(row.objectLabel, row.objectURI) + nodes[uri][pred].append(val) + return [format_template(identifiers[uri], data) for uri, data in sorted(nodes.items())] + + +# Map informant codes (as they appear inside instrument identifiers like +# "RCADS-25-Y-EN") to human-readable names. Used to enrich collection +# paragraphs without changing the .ttl ontology. +INFORMANT_NAMES = { + "Y": "youth", + "CG": "caregiver", + "A": "adult", + "T": "teacher", +} + +# Map language codes that appear as suffixes in instrument identifiers to +# human-readable names. Unknown codes fall through as the raw code so the +# .ttl remains the source of truth for any new language added later. +LANGUAGE_NAMES = { + "EN": "English", "ES": "Spanish", "FR": "French", "DE": "German", + "ZH-HANS": "Chinese (Simplified)", "ZH-HANT": "Chinese (Traditional)", + "CH-HANS": "Chinese (Simplified)", + "JA": "Japanese", "KO": "Korean", "AR": "Arabic", "BN": "Bengali", + "HI": "Hindi", "PA": "Punjabi", "MR": "Marathi", "MS": "Malay", + "PT": "Portuguese", "PT-BR": "Brazilian Portuguese", + "FR-CA": "Canadian French", "FR-FR": "European French", + "RU": "Russian", "PL": "Polish", "NL": "Dutch", "FI": "Finnish", + "ET": "Estonian", "EL": "Greek", "HU": "Hungarian", "IS": "Icelandic", + "IT": "Italian", "LT": "Lithuanian", "NO": "Norwegian", "FA": "Persian", + "SL": "Slovenian", "SV": "Swedish", "TR": "Turkish", "UR": "Urdu", + "VI": "Vietnamese", "ZU": "Zulu", "NY": "Chichewa", "SR": "Serbian", + "SW": "Swahili", "MN": "Mongolian", "DA": "Danish", +} + +# Parses identifiers like RCADS-25-Y-EN, MTT-35-CG-EN-1, PHQ-9-A-EN, +# RCADS-47-CG-ZH-HANS, RCADS-47-Y-FR-CA-1. +_CODE_PATTERN = re.compile( + r"^(?P[A-Z]+(?:-\d+)?)" + r"-(?PY|CG|A|T)" + r"-(?P[A-Z]+(?:-[A-Z]+)?)" + r"(?:-(?P\d+))?$" +) + + +def summarize_collection_members(members: list) -> list: + """Synthesize descriptive attribute lines from a collection's member codes. + + Collections in the .ttl have no rdfs:label and no description — only + membership links. Aggregating across member codes (which encode family, + informant, and language) lets the embedded paragraph describe *what is + in* the collection without modifying the ontology. + """ + families = defaultdict(int) + informants = set() + languages = set() + unparsed = 0 + + for code in members: + match = _CODE_PATTERN.match(code) + if not match: + unparsed += 1 + continue + families[match.group("family")] += 1 + informants.add(match.group("informant")) + languages.add(match.group("language")) + + lines = [f" - has member count: {len(members)}"] + + if families: + family_str = ", ".join( + f"{fam} ({count})" for fam, count in sorted(families.items()) + ) + lines.append(f" - has instrument family: {family_str}") + + if informants: + readable = sorted(INFORMANT_NAMES.get(code, code) for code in informants) + lines.append(f" - has informant: {', '.join(readable)}") + + if languages: + readable_langs = sorted(LANGUAGE_NAMES.get(code, code) for code in languages) + lines.append(f" - has language count: {len(languages)}") + lines.append(f" - has language: {', '.join(readable_langs)}") + + if unparsed: + lines.append(f" - has member with unrecognized code: {unparsed}") + + return lines + + +def run_collections(g: Graph) -> list: + """Emit one rich paragraph per collection (not per member). + + The previous implementation emitted one paragraph per (collection, + member) pair, producing ~300 nearly-identical low-information + paragraphs that polluted unscoped semantic search. This version + consolidates each collection into a single paragraph and uses + summarize_collection_members() to inject descriptive attributes + derived from the member identifiers. + """ + results = g.query(COLLECTION_QUERY) + nodes = defaultdict(lambda: defaultdict(list)) + identifiers = {} + for row in results: + uri = str(row.collection) + label = resolve_label(row.collectionLabel, row.collection) + identifiers[uri] = label + pred = str(row.predicate) + val = resolve_label(row.objectLabel, row.objectURI) + nodes[uri][pred].append(val) + + paragraphs = [] + for uri in sorted(nodes): + data = nodes[uri] + identifier = identifiers[uri] + members = sorted(set(data.get("has member", []))) + instance_of = sorted(set(data.get("instance of", []))) + + lines = [f"{identifier}. Attributes include:"] + for io in instance_of: + lines.append(f" - instance of: {io}") + lines.extend(summarize_collection_members(members)) + for m in members: + lines.append(f" - has member: {m}") + + paragraphs.append("\n".join(lines)) + + return paragraphs + + +# --------------------------------------------------------------------------- +# Generic section runner — turns *any* class into a section without a curated +# SPARQL query. Used for ad-hoc sections (e.g. --section items=poem:Item) and +# for registry entries that specify a class but no dedicated runner. +# --------------------------------------------------------------------------- + +def _node_identifier(g: Graph, subj: URIRef) -> str: + """Best stable identifier for a node: notation -> fhir:code -> label -> localname.""" + for getter in (SKOS.notation, FHIR_CODE, RDFS.label): + for obj in g.objects(subj, getter): + return str(obj) + return readable_local_name(str(subj)) + + +def _readable_predicate(g: Graph, pred: URIRef) -> str: + """rdfs:label of the predicate if the ontology defines one, else localname.""" + for obj in g.objects(pred, RDFS.label): + return str(obj) + return readable_local_name(str(pred)) + + +def _object_label(g: Graph, obj) -> str | None: + """Label for a triple object: literal text, an entity's rdfs:label, or None + (so resolve_label falls back to readable_local_name for unlabeled URIs).""" + if isinstance(obj, URIRef): + for lbl in g.objects(obj, RDFS.label): + return str(lbl) + return None + return str(obj) + + +def run_generic(g: Graph, class_uri: URIRef) -> list: + """Emit one paragraph per *named individual* of ``class_uri``. + + Each outgoing predicate is rendered with its readable name and each object + with its label/notation/localname. Blank nodes are skipped (no stable + identity). This is the fallback that lets a brand-new section type work with + no curated query. + """ + nodes = defaultdict(lambda: defaultdict(list)) + identifiers = {} + for subj in g.subjects(RDF.type, class_uri): + if not isinstance(subj, URIRef): + continue + uri = str(subj) + identifiers[uri] = _node_identifier(g, subj) + for pred, obj in g.predicate_objects(subj): + if pred == RDF.type and obj == OWL.NamedIndividual: + continue + if isinstance(obj, BNode): + continue # structural blank nodes carry no readable value + pred_name = _readable_predicate(g, pred) + val = resolve_label(_object_label(g, obj), obj) + nodes[uri][pred_name].append(val) + return [format_template(identifiers[uri], data) for uri, data in sorted(nodes.items())] + + +# --------------------------------------------------------------------------- +# Section registry — maps a section name to how its paragraphs are produced. +# * curated sections provide a dedicated ``runner`` (tuned SPARQL). +# * generic sections provide a ``class`` URI and use run_generic(). +# Add a new section either here, or ad-hoc on the CLI: --section NAME=poem:Class +# --------------------------------------------------------------------------- +SECTION_REGISTRY: dict[str, dict] = { + "instruments": {"runner": run_instruments}, + "scales": {"runner": run_scales}, + "collections": {"runner": run_collections}, +} + + +def build_section(g: Graph, entry: dict) -> list: + runner = entry.get("runner") + if runner is not None: + return runner(g) + return run_generic(g, entry["class"]) + + +def main(): + default_out = os.environ.get( + "TEMPLATES_OUTPUT", + os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates.txt"), + ) + parser = argparse.ArgumentParser() + parser.add_argument("--output", default=default_out, + help="File to write templates to (default: embeddings/Pipeline/templates.txt)") + parser.add_argument("--input", default=DATA_DIR, + help="Folder of instance TTLs to read (default: poem-demo/dist/data)") + parser.add_argument("--only", default=None, + help="Comma-separated section name(s) to generate (default: all registered)") + parser.add_argument("--section", action="append", default=[], metavar="NAME=CLASS", + help="Register an ad-hoc generic section, e.g. --section items=poem:Item " + "(repeatable). Renders one paragraph per named individual of CLASS.") + args = parser.parse_args() + + # Merge ad-hoc --section entries into the registry for this run. + registry = dict(SECTION_REGISTRY) + for spec in args.section: + name, sep, cls = spec.partition("=") + if not sep or not cls.strip(): + parser.error(f"--section expects NAME=CLASS, got {spec!r}") + registry[name.strip().lower()] = {"class": expand_uri(cls.strip())} + + wanted = ([s.strip().lower() for s in args.only.split(",")] + if args.only else list(registry.keys())) + + print("Loading graph...") + g = load_graph(args.input) + + sections = [] + for name in wanted: + entry = registry.get(name) + if entry is None: + print(f" Skipping unknown section {name!r} " + f"(register it with --section {name}=)") + continue + print(f"Generating {name} templates...") + blocks = build_section(g, entry) + print(f" {len(blocks)} {name}") + sections.append(f"=== {name.upper()} ===\n\n" + "\n\n".join(blocks)) + + output = "\n\n\n".join(sections) + + if args.output: + with open(args.output, "w", encoding="utf-8") as f: + f.write(output) + print(f"\nWritten to {args.output}") + else: + print() + print(output) + + +if __name__ == "__main__": + main() diff --git a/embeddings/Pipeline/instruments/GAD-7_25bd4c3c7ac1.npy b/embeddings/Pipeline/instruments/GAD-7_25bd4c3c7ac1.npy new file mode 100644 index 00000000..d65ead73 Binary files /dev/null and b/embeddings/Pipeline/instruments/GAD-7_25bd4c3c7ac1.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1b3e5f456da2.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1b3e5f456da2.npy new file mode 100644 index 00000000..b1dfb9b8 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1b3e5f456da2.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1c17506e1eae.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1c17506e1eae.npy new file mode 100644 index 00000000..58ee16f8 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1c17506e1eae.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1e42685478d0.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1e42685478d0.npy new file mode 100644 index 00000000..9f91230a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_1e42685478d0.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_2338348e321d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_2338348e321d.npy new file mode 100644 index 00000000..224ca8d3 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_2338348e321d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_259f3871ec0a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_259f3871ec0a.npy new file mode 100644 index 00000000..105c5d1b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_259f3871ec0a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_452759e030fd.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_452759e030fd.npy new file mode 100644 index 00000000..9dbaf672 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_452759e030fd.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_4727bb1c5e9d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_4727bb1c5e9d.npy new file mode 100644 index 00000000..40b71b3b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_4727bb1c5e9d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_580f641f7a0a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_580f641f7a0a.npy new file mode 100644 index 00000000..dad62949 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_580f641f7a0a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_5cd4654d3a9d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_5cd4654d3a9d.npy new file mode 100644 index 00000000..62f7be6e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_5cd4654d3a9d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6727945bdc6c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6727945bdc6c.npy new file mode 100644 index 00000000..09369b95 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6727945bdc6c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6e7ae9d21462.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6e7ae9d21462.npy new file mode 100644 index 00000000..d12792bf Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_6e7ae9d21462.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_7da2d641773f.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_7da2d641773f.npy new file mode 100644 index 00000000..22e5a7e9 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_7da2d641773f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_88d84fc8e5d2.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_88d84fc8e5d2.npy new file mode 100644 index 00000000..3aaaeff6 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_88d84fc8e5d2.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_95fa0ba7c371.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_95fa0ba7c371.npy new file mode 100644 index 00000000..4d5795ad Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_95fa0ba7c371.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a18cb44c726a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a18cb44c726a.npy new file mode 100644 index 00000000..aaac11c5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a18cb44c726a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a70e2053b449.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a70e2053b449.npy new file mode 100644 index 00000000..91cdac33 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_a70e2053b449.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aa65e53cba9a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aa65e53cba9a.npy new file mode 100644 index 00000000..eea32351 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aa65e53cba9a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_adbc914a662c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_adbc914a662c.npy new file mode 100644 index 00000000..344af002 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_adbc914a662c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_add818ff2014.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_add818ff2014.npy new file mode 100644 index 00000000..129f733a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_add818ff2014.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ae3777fec78a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ae3777fec78a.npy new file mode 100644 index 00000000..95f03c40 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ae3777fec78a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aeb30f716c5e.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aeb30f716c5e.npy new file mode 100644 index 00000000..9d641036 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_aeb30f716c5e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_af9d60ec8ebc.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_af9d60ec8ebc.npy new file mode 100644 index 00000000..ed46059e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_af9d60ec8ebc.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_b267fbd1441a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_b267fbd1441a.npy new file mode 100644 index 00000000..9008d14b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_b267fbd1441a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_bfebb02767c6.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_bfebb02767c6.npy new file mode 100644 index 00000000..9d30f3a3 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_bfebb02767c6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_cf5647107207.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_cf5647107207.npy new file mode 100644 index 00000000..17dfe4f2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_cf5647107207.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2a7809d3e12.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2a7809d3e12.npy new file mode 100644 index 00000000..3f3b2417 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2a7809d3e12.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2aa0da253d3.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2aa0da253d3.npy new file mode 100644 index 00000000..f4f3346b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2aa0da253d3.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2c3f4b8abf7.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2c3f4b8abf7.npy new file mode 100644 index 00000000..445d14c0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_d2c3f4b8abf7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_db2e358615e9.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_db2e358615e9.npy new file mode 100644 index 00000000..6ad082d4 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_db2e358615e9.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_e9a7f72a1e1c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_e9a7f72a1e1c.npy new file mode 100644 index 00000000..94790980 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_e9a7f72a1e1c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eae011be086b.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eae011be086b.npy new file mode 100644 index 00000000..38ddfdf3 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eae011be086b.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eca62b64e50f.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eca62b64e50f.npy new file mode 100644 index 00000000..ea2a74c0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_eca62b64e50f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ecb51c4c77b5.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ecb51c4c77b5.npy new file mode 100644 index 00000000..9ec01318 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ecb51c4c77b5.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ef8d61281ade.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ef8d61281ade.npy new file mode 100644 index 00000000..7d035447 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_ef8d61281ade.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_f943edfffa48.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_f943edfffa48.npy new file mode 100644 index 00000000..6486965a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-1_f943edfffa48.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_0c7a21996a87.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_0c7a21996a87.npy new file mode 100644 index 00000000..1b60d51c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_0c7a21996a87.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_15e56a445a47.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_15e56a445a47.npy new file mode 100644 index 00000000..aeb614c8 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_15e56a445a47.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_170246433479.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_170246433479.npy new file mode 100644 index 00000000..03b48d3a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_170246433479.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1cce76d405a7.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1cce76d405a7.npy new file mode 100644 index 00000000..7f87aaed Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1cce76d405a7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1d31b5d8f9e4.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1d31b5d8f9e4.npy new file mode 100644 index 00000000..4e091cb8 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1d31b5d8f9e4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1e4ad4a4f3d6.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1e4ad4a4f3d6.npy new file mode 100644 index 00000000..51eb484d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_1e4ad4a4f3d6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2597daf5a996.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2597daf5a996.npy new file mode 100644 index 00000000..607126cf Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2597daf5a996.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_29b0f6bb335a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_29b0f6bb335a.npy new file mode 100644 index 00000000..adf93721 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_29b0f6bb335a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2c4fe50e8da4.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2c4fe50e8da4.npy new file mode 100644 index 00000000..bdd31990 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_2c4fe50e8da4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3802aa0ff185.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3802aa0ff185.npy new file mode 100644 index 00000000..20c3ebe5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3802aa0ff185.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3ac428d6d8ac.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3ac428d6d8ac.npy new file mode 100644 index 00000000..814632ea Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3ac428d6d8ac.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3e2004cd470e.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3e2004cd470e.npy new file mode 100644 index 00000000..69694c60 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_3e2004cd470e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_419fb09052c4.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_419fb09052c4.npy new file mode 100644 index 00000000..2039f7f4 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_419fb09052c4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_545beb636577.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_545beb636577.npy new file mode 100644 index 00000000..bdef9fa2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_545beb636577.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_58accb450d62.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_58accb450d62.npy new file mode 100644 index 00000000..7fd3f417 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_58accb450d62.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_5df1aae073f9.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_5df1aae073f9.npy new file mode 100644 index 00000000..3e918e39 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_5df1aae073f9.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_66f284e14876.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_66f284e14876.npy new file mode 100644 index 00000000..663826a0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_66f284e14876.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_76ad99211439.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_76ad99211439.npy new file mode 100644 index 00000000..b58ee8c6 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_76ad99211439.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_7cd141503087.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_7cd141503087.npy new file mode 100644 index 00000000..6a5c2b6f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_7cd141503087.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_80325a7efee7.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_80325a7efee7.npy new file mode 100644 index 00000000..e26cc89d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_80325a7efee7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_8253baf365b9.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_8253baf365b9.npy new file mode 100644 index 00000000..6c2358fd Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_8253baf365b9.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_85e1d1047de4.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_85e1d1047de4.npy new file mode 100644 index 00000000..ba03c1f9 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_85e1d1047de4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_901827f41e50.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_901827f41e50.npy new file mode 100644 index 00000000..4425f378 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_901827f41e50.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_9b9d2089bfda.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_9b9d2089bfda.npy new file mode 100644 index 00000000..843d087e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_9b9d2089bfda.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_a7d054f63b73.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_a7d054f63b73.npy new file mode 100644 index 00000000..9f1728a5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_a7d054f63b73.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_aa2edd627efe.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_aa2edd627efe.npy new file mode 100644 index 00000000..b7778d96 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_aa2edd627efe.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b4c3bad88174.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b4c3bad88174.npy new file mode 100644 index 00000000..9545e131 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b4c3bad88174.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b5a53ba7e94d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b5a53ba7e94d.npy new file mode 100644 index 00000000..661f26cb Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b5a53ba7e94d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b8f5fda506d2.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b8f5fda506d2.npy new file mode 100644 index 00000000..d25225f9 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_b8f5fda506d2.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_bed3d5c5d5db.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_bed3d5c5d5db.npy new file mode 100644 index 00000000..f862d20c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_bed3d5c5d5db.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_cbab801e7d95.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_cbab801e7d95.npy new file mode 100644 index 00000000..caec7d25 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_cbab801e7d95.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_ce01efe79580.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_ce01efe79580.npy new file mode 100644 index 00000000..0e16544d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_ce01efe79580.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_e799d0cc793f.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_e799d0cc793f.npy new file mode 100644 index 00000000..30dc4385 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_e799d0cc793f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_f7723b99521c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_f7723b99521c.npy new file mode 100644 index 00000000..b4e2010e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_f7723b99521c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_fa7d42da0a20.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_fa7d42da0a20.npy new file mode 100644 index 00000000..9885459a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-2_fa7d42da0a20.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0ce25d544d05.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0ce25d544d05.npy new file mode 100644 index 00000000..21c8a73e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0ce25d544d05.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0f586eade646.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0f586eade646.npy new file mode 100644 index 00000000..c7813eb1 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_0f586eade646.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_10d780c18fcf.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_10d780c18fcf.npy new file mode 100644 index 00000000..e523f949 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_10d780c18fcf.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_15983230d5fb.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_15983230d5fb.npy new file mode 100644 index 00000000..9c515901 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_15983230d5fb.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_170007ed84de.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_170007ed84de.npy new file mode 100644 index 00000000..9471ab97 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_170007ed84de.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_31d6b2c800a3.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_31d6b2c800a3.npy new file mode 100644 index 00000000..ce33f691 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_31d6b2c800a3.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_338fd32a70c6.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_338fd32a70c6.npy new file mode 100644 index 00000000..4b25c75c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_338fd32a70c6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_3795c86aa038.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_3795c86aa038.npy new file mode 100644 index 00000000..8e4ea905 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_3795c86aa038.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_40c4ba389e00.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_40c4ba389e00.npy new file mode 100644 index 00000000..4dfd7ce0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_40c4ba389e00.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4bc858639455.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4bc858639455.npy new file mode 100644 index 00000000..b86dd21d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4bc858639455.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4da1b78d6453.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4da1b78d6453.npy new file mode 100644 index 00000000..6eee4081 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4da1b78d6453.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4efe782b837e.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4efe782b837e.npy new file mode 100644 index 00000000..d58fb9ad Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4efe782b837e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4f42fe6a24a8.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4f42fe6a24a8.npy new file mode 100644 index 00000000..658f5442 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_4f42fe6a24a8.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_54fc0e00fbd6.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_54fc0e00fbd6.npy new file mode 100644 index 00000000..0e5fbd22 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_54fc0e00fbd6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5640960a322b.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5640960a322b.npy new file mode 100644 index 00000000..c162a4e0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5640960a322b.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5740ab4e7a6c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5740ab4e7a6c.npy new file mode 100644 index 00000000..bb89a1a0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5740ab4e7a6c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_59b792270b83.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_59b792270b83.npy new file mode 100644 index 00000000..670d90d2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_59b792270b83.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5daad90e2f3a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5daad90e2f3a.npy new file mode 100644 index 00000000..8e06c63f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_5daad90e2f3a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_639f78de3ee7.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_639f78de3ee7.npy new file mode 100644 index 00000000..5e55102c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_639f78de3ee7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6d164d8127b8.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6d164d8127b8.npy new file mode 100644 index 00000000..7dcfd8c5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6d164d8127b8.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6f1bf519a726.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6f1bf519a726.npy new file mode 100644 index 00000000..89efe798 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_6f1bf519a726.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_72741b54db8b.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_72741b54db8b.npy new file mode 100644 index 00000000..84dc60e5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_72741b54db8b.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_789585038f3a.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_789585038f3a.npy new file mode 100644 index 00000000..c7a97a1f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_789585038f3a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_80e80fd96ec7.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_80e80fd96ec7.npy new file mode 100644 index 00000000..2582c662 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_80e80fd96ec7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_88442540f322.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_88442540f322.npy new file mode 100644 index 00000000..f3a35cc4 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_88442540f322.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_9ad9883bb88e.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_9ad9883bb88e.npy new file mode 100644 index 00000000..8cf6c43d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_9ad9883bb88e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_a174a3da35c2.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_a174a3da35c2.npy new file mode 100644 index 00000000..ad5a1abe Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_a174a3da35c2.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_abc1a11884ee.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_abc1a11884ee.npy new file mode 100644 index 00000000..52c21ce2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_abc1a11884ee.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c489593b665c.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c489593b665c.npy new file mode 100644 index 00000000..f7cde336 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c489593b665c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c90f462f7f42.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c90f462f7f42.npy new file mode 100644 index 00000000..3ec18b23 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_c90f462f7f42.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_db6bc4cddd8d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_db6bc4cddd8d.npy new file mode 100644 index 00000000..3f974e9c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_db6bc4cddd8d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e1e7e935ab81.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e1e7e935ab81.npy new file mode 100644 index 00000000..5828a061 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e1e7e935ab81.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e72f817642c6.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e72f817642c6.npy new file mode 100644 index 00000000..68265ef3 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_e72f817642c6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f387fee8a8da.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f387fee8a8da.npy new file mode 100644 index 00000000..2fabdbef Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f387fee8a8da.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f3de246af846.npy b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f3de246af846.npy new file mode 100644 index 00000000..7b32875d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-EN-3_f3de246af846.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-ES-1_4798ee19c81d.npy b/embeddings/Pipeline/instruments/MTT-35-CG-ES-1_4798ee19c81d.npy new file mode 100644 index 00000000..759e9b37 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-ES-1_4798ee19c81d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-ES-2_56a729d52e9f.npy b/embeddings/Pipeline/instruments/MTT-35-CG-ES-2_56a729d52e9f.npy new file mode 100644 index 00000000..4f1fcef7 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-ES-2_56a729d52e9f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-CG-NO_537e80e050c3.npy b/embeddings/Pipeline/instruments/MTT-35-CG-NO_537e80e050c3.npy new file mode 100644 index 00000000..ccfeaa79 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-CG-NO_537e80e050c3.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_00a36ee4749e.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_00a36ee4749e.npy new file mode 100644 index 00000000..ce7e0fe2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_00a36ee4749e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_01bc48f50a4d.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_01bc48f50a4d.npy new file mode 100644 index 00000000..f2870510 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_01bc48f50a4d.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0481a600042f.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0481a600042f.npy new file mode 100644 index 00000000..e99758fb Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0481a600042f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_054c9651cbd4.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_054c9651cbd4.npy new file mode 100644 index 00000000..a02d4773 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_054c9651cbd4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0d668d3b9eef.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0d668d3b9eef.npy new file mode 100644 index 00000000..a92bfd73 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_0d668d3b9eef.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_11bf10295b1e.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_11bf10295b1e.npy new file mode 100644 index 00000000..d18d6e1b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_11bf10295b1e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_123c27f14140.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_123c27f14140.npy new file mode 100644 index 00000000..bb23f709 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_123c27f14140.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f1ef83e2bba.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f1ef83e2bba.npy new file mode 100644 index 00000000..4bce072a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f1ef83e2bba.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f3dd4785adc.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f3dd4785adc.npy new file mode 100644 index 00000000..74036d13 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_1f3dd4785adc.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_38b27a7c6f33.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_38b27a7c6f33.npy new file mode 100644 index 00000000..4fa0f40e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_38b27a7c6f33.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_3d67fc34e31e.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_3d67fc34e31e.npy new file mode 100644 index 00000000..2c6fe697 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_3d67fc34e31e.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_417c3f73dccc.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_417c3f73dccc.npy new file mode 100644 index 00000000..fb7a204e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_417c3f73dccc.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_49b862129c00.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_49b862129c00.npy new file mode 100644 index 00000000..39d933db Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_49b862129c00.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_4c29d78549da.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_4c29d78549da.npy new file mode 100644 index 00000000..1a456fdd Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_4c29d78549da.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_673f759b6491.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_673f759b6491.npy new file mode 100644 index 00000000..ad6b4dac Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_673f759b6491.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7272fc238989.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7272fc238989.npy new file mode 100644 index 00000000..af727975 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7272fc238989.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_789e3d0221c8.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_789e3d0221c8.npy new file mode 100644 index 00000000..9b499598 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_789e3d0221c8.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7c39ee5fb36b.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7c39ee5fb36b.npy new file mode 100644 index 00000000..633bafb0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_7c39ee5fb36b.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8561923798eb.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8561923798eb.npy new file mode 100644 index 00000000..d72c419f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8561923798eb.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8d1daf554f84.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8d1daf554f84.npy new file mode 100644 index 00000000..ea144847 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_8d1daf554f84.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_985ebbf33eda.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_985ebbf33eda.npy new file mode 100644 index 00000000..b4651242 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_985ebbf33eda.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8580b2de44.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8580b2de44.npy new file mode 100644 index 00000000..8494cfdc Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8580b2de44.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8a43aedce6.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8a43aedce6.npy new file mode 100644 index 00000000..6fd5cca0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_9d8a43aedce6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a055c222c4a8.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a055c222c4a8.npy new file mode 100644 index 00000000..6a6b303b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a055c222c4a8.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a08e19ba18e1.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a08e19ba18e1.npy new file mode 100644 index 00000000..4317381f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a08e19ba18e1.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a3ddad196daa.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a3ddad196daa.npy new file mode 100644 index 00000000..7d4ce35a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a3ddad196daa.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a7b22ea3a50c.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a7b22ea3a50c.npy new file mode 100644 index 00000000..40324437 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_a7b22ea3a50c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_ad4a422430e6.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_ad4a422430e6.npy new file mode 100644 index 00000000..43b0e450 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_ad4a422430e6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_b21cc2a4bbc9.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_b21cc2a4bbc9.npy new file mode 100644 index 00000000..4ffa657c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_b21cc2a4bbc9.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_c23c31cf1973.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_c23c31cf1973.npy new file mode 100644 index 00000000..fdbbfdc0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_c23c31cf1973.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_dc26994e5775.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_dc26994e5775.npy new file mode 100644 index 00000000..0719a6ca Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_dc26994e5775.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e1da0a68c78a.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e1da0a68c78a.npy new file mode 100644 index 00000000..ecfe5300 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e1da0a68c78a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e4ab95d8f5ee.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e4ab95d8f5ee.npy new file mode 100644 index 00000000..1b5ddefe Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e4ab95d8f5ee.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e95c73fc9638.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e95c73fc9638.npy new file mode 100644 index 00000000..6342cc31 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_e95c73fc9638.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_fe9b06b15b28.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_fe9b06b15b28.npy new file mode 100644 index 00000000..1401ef36 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-1_fe9b06b15b28.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_03de827e2b4b.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_03de827e2b4b.npy new file mode 100644 index 00000000..138ddee0 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_03de827e2b4b.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_1849a7c831c8.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_1849a7c831c8.npy new file mode 100644 index 00000000..4ec9dff5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_1849a7c831c8.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_2fee9e707a52.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_2fee9e707a52.npy new file mode 100644 index 00000000..eb3d15a6 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_2fee9e707a52.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_3735b94ef7fa.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_3735b94ef7fa.npy new file mode 100644 index 00000000..f112f1ef Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_3735b94ef7fa.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_397bb5a69a68.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_397bb5a69a68.npy new file mode 100644 index 00000000..06433fea Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_397bb5a69a68.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4a9cc7bc63a6.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4a9cc7bc63a6.npy new file mode 100644 index 00000000..2440cbb9 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4a9cc7bc63a6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4c6b4019f2fe.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4c6b4019f2fe.npy new file mode 100644 index 00000000..6b99ce81 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_4c6b4019f2fe.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_62c2b65573d4.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_62c2b65573d4.npy new file mode 100644 index 00000000..79b07b5a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_62c2b65573d4.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6b5e8e137fbe.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6b5e8e137fbe.npy new file mode 100644 index 00000000..c97da47a Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6b5e8e137fbe.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6cc25e4a0192.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6cc25e4a0192.npy new file mode 100644 index 00000000..c488d857 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_6cc25e4a0192.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7a748d8d5342.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7a748d8d5342.npy new file mode 100644 index 00000000..9ad95c64 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7a748d8d5342.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7bd9fd24d660.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7bd9fd24d660.npy new file mode 100644 index 00000000..5c90d51b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_7bd9fd24d660.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_80e1e550eaf6.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_80e1e550eaf6.npy new file mode 100644 index 00000000..d1340d9d Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_80e1e550eaf6.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8773f5266edb.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8773f5266edb.npy new file mode 100644 index 00000000..afa24e41 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8773f5266edb.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8a669da657b2.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8a669da657b2.npy new file mode 100644 index 00000000..9b83e4ed Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_8a669da657b2.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_9657c887dd20.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_9657c887dd20.npy new file mode 100644 index 00000000..8617e616 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_9657c887dd20.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a415447ec6ad.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a415447ec6ad.npy new file mode 100644 index 00000000..d40602eb Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a415447ec6ad.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a5cf9eecb356.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a5cf9eecb356.npy new file mode 100644 index 00000000..0d69ba2b Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a5cf9eecb356.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a6adb9b3e8ba.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a6adb9b3e8ba.npy new file mode 100644 index 00000000..f6ec9bfa Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_a6adb9b3e8ba.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_af0f17430b0c.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_af0f17430b0c.npy new file mode 100644 index 00000000..c22c75af Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_af0f17430b0c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b825104c03bf.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b825104c03bf.npy new file mode 100644 index 00000000..c1c4e930 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b825104c03bf.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b89db902b959.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b89db902b959.npy new file mode 100644 index 00000000..85fccca7 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_b89db902b959.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ba357bde286c.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ba357bde286c.npy new file mode 100644 index 00000000..f102ffe5 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ba357bde286c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_cb406184a3a7.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_cb406184a3a7.npy new file mode 100644 index 00000000..2da000b2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_cb406184a3a7.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da0480842b8f.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da0480842b8f.npy new file mode 100644 index 00000000..61dc2912 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da0480842b8f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da437b310b7c.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da437b310b7c.npy new file mode 100644 index 00000000..ee8c2dd2 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_da437b310b7c.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_dca7c7871809.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_dca7c7871809.npy new file mode 100644 index 00000000..64da55ea Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_dca7c7871809.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ddfc8e619f93.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ddfc8e619f93.npy new file mode 100644 index 00000000..fc470516 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_ddfc8e619f93.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e051135f5977.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e051135f5977.npy new file mode 100644 index 00000000..e777ca5c Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e051135f5977.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e282823f82c5.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e282823f82c5.npy new file mode 100644 index 00000000..e3a239fa Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e282823f82c5.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e54ff7e3b89a.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e54ff7e3b89a.npy new file mode 100644 index 00000000..a66fb963 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_e54ff7e3b89a.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_eaf5d2644c13.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_eaf5d2644c13.npy new file mode 100644 index 00000000..ec60c131 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_eaf5d2644c13.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f5d94d9d5059.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f5d94d9d5059.npy new file mode 100644 index 00000000..66fe229f Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f5d94d9d5059.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f61b4a909a6f.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f61b4a909a6f.npy new file mode 100644 index 00000000..b3c274ae Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f61b4a909a6f.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f8332e1cf7b9.npy b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f8332e1cf7b9.npy new file mode 100644 index 00000000..0a9aad9e Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-EN-2_f8332e1cf7b9.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-ES-1_91302371a0fc.npy b/embeddings/Pipeline/instruments/MTT-35-Y-ES-1_91302371a0fc.npy new file mode 100644 index 00000000..0b4e74a1 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-ES-1_91302371a0fc.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-ES-2_94bc70420329.npy b/embeddings/Pipeline/instruments/MTT-35-Y-ES-2_94bc70420329.npy new file mode 100644 index 00000000..711c7e42 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-ES-2_94bc70420329.npy differ diff --git a/embeddings/Pipeline/instruments/MTT-35-Y-NO_bb20f79c1a75.npy b/embeddings/Pipeline/instruments/MTT-35-Y-NO_bb20f79c1a75.npy new file mode 100644 index 00000000..6dc22fc9 Binary files /dev/null and b/embeddings/Pipeline/instruments/MTT-35-Y-NO_bb20f79c1a75.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_04574df5b5db.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_04574df5b5db.npy new file mode 100644 index 00000000..ec70aa3c Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_04574df5b5db.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_35c59076a584.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_35c59076a584.npy new file mode 100644 index 00000000..ed13a711 Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_35c59076a584.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_40c4ffe9db3d.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_40c4ffe9db3d.npy new file mode 100644 index 00000000..0e7b0f00 Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_40c4ffe9db3d.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_57cd9c0dd39d.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_57cd9c0dd39d.npy new file mode 100644 index 00000000..0641b50a Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_57cd9c0dd39d.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_80d90731750a.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_80d90731750a.npy new file mode 100644 index 00000000..b4c2d0bd Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_80d90731750a.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_a61696e3feb9.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_a61696e3feb9.npy new file mode 100644 index 00000000..bf62ddf5 Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_a61696e3feb9.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_c6f101bd6da0.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_c6f101bd6da0.npy new file mode 100644 index 00000000..5d123fe7 Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_c6f101bd6da0.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_d5b68496f7a8.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_d5b68496f7a8.npy new file mode 100644 index 00000000..8b7ea75d Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_d5b68496f7a8.npy differ diff --git a/embeddings/Pipeline/instruments/PHQ-9-A-EN_dc7e45bea560.npy b/embeddings/Pipeline/instruments/PHQ-9-A-EN_dc7e45bea560.npy new file mode 100644 index 00000000..412aca03 Binary files /dev/null and b/embeddings/Pipeline/instruments/PHQ-9-A-EN_dc7e45bea560.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-AR_e4df8a090c0c.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-AR_e4df8a090c0c.npy new file mode 100644 index 00000000..0f483581 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-AR_e4df8a090c0c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-BN_10093e62801f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-BN_10093e62801f.npy new file mode 100644 index 00000000..61d2a8f1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-BN_10093e62801f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-CH-HANS_75d5cd6d7f6c.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-CH-HANS_75d5cd6d7f6c.npy new file mode 100644 index 00000000..77ccf70a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-CH-HANS_75d5cd6d7f6c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-DA_2e091da4349b.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-DA_2e091da4349b.npy new file mode 100644 index 00000000..9aab7c90 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-DA_2e091da4349b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-DE_ca3860cf83df.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-DE_ca3860cf83df.npy new file mode 100644 index 00000000..eb8ce6b0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-DE_ca3860cf83df.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EL_55f580f5d084.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EL_55f580f5d084.npy new file mode 100644 index 00000000..1ff56cd4 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EL_55f580f5d084.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0c7211ba3297.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0c7211ba3297.npy new file mode 100644 index 00000000..4c3c2952 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0c7211ba3297.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0f8154c95d64.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0f8154c95d64.npy new file mode 100644 index 00000000..613cefdd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_0f8154c95d64.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_468d1a69efb5.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_468d1a69efb5.npy new file mode 100644 index 00000000..44d03d16 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_468d1a69efb5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_5e564b4998f8.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_5e564b4998f8.npy new file mode 100644 index 00000000..56297317 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_5e564b4998f8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_74f359a1c2b4.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_74f359a1c2b4.npy new file mode 100644 index 00000000..7fb9ec9a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_74f359a1c2b4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_7c6054f371c2.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_7c6054f371c2.npy new file mode 100644 index 00000000..012e3396 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_7c6054f371c2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_8c43cd202e1c.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_8c43cd202e1c.npy new file mode 100644 index 00000000..27ac1598 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_8c43cd202e1c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_b351f4162395.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_b351f4162395.npy new file mode 100644 index 00000000..32597362 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_b351f4162395.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_bbe2f667e76f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_bbe2f667e76f.npy new file mode 100644 index 00000000..5d44c253 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_bbe2f667e76f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_c343c52fe07d.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_c343c52fe07d.npy new file mode 100644 index 00000000..98d12d2b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_c343c52fe07d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cb7d97132ba7.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cb7d97132ba7.npy new file mode 100644 index 00000000..fcd9c802 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cb7d97132ba7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cc2eebaea3ac.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cc2eebaea3ac.npy new file mode 100644 index 00000000..c6261f7b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_cc2eebaea3ac.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_dceded53342c.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_dceded53342c.npy new file mode 100644 index 00000000..89ad0845 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_dceded53342c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e2ebb43fa8a6.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e2ebb43fa8a6.npy new file mode 100644 index 00000000..fe2d0881 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e2ebb43fa8a6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e7da73708d0f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e7da73708d0f.npy new file mode 100644 index 00000000..8e080422 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e7da73708d0f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e85775737c6b.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e85775737c6b.npy new file mode 100644 index 00000000..ad66ee7e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_e85775737c6b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_fddba36048d6.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_fddba36048d6.npy new file mode 100644 index 00000000..51847d99 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN-2_fddba36048d6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_03040ad9acf7.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_03040ad9acf7.npy new file mode 100644 index 00000000..335c1b10 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_03040ad9acf7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_148ed3b29658.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_148ed3b29658.npy new file mode 100644 index 00000000..97b7d27b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_148ed3b29658.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_36a975e39be1.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_36a975e39be1.npy new file mode 100644 index 00000000..e856910a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_36a975e39be1.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_374979d50bf8.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_374979d50bf8.npy new file mode 100644 index 00000000..e884b7fe Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_374979d50bf8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_43643b6a456e.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_43643b6a456e.npy new file mode 100644 index 00000000..9cce5818 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_43643b6a456e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_490f75b214c0.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_490f75b214c0.npy new file mode 100644 index 00000000..c06d22c9 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_490f75b214c0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a0788a75953.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a0788a75953.npy new file mode 100644 index 00000000..5f0e70cf Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a0788a75953.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a13939be271.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a13939be271.npy new file mode 100644 index 00000000..569a72a3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4a13939be271.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4e0958a522ef.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4e0958a522ef.npy new file mode 100644 index 00000000..cb0bc446 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_4e0958a522ef.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_77c0a11a131f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_77c0a11a131f.npy new file mode 100644 index 00000000..4ef0fb22 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_77c0a11a131f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_8addaaccb340.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_8addaaccb340.npy new file mode 100644 index 00000000..cc9da0d7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_8addaaccb340.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_946f2342b9db.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_946f2342b9db.npy new file mode 100644 index 00000000..4bae5c0d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_946f2342b9db.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_97f94ac8db01.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_97f94ac8db01.npy new file mode 100644 index 00000000..c7132c87 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_97f94ac8db01.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_9b19f9a1b857.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_9b19f9a1b857.npy new file mode 100644 index 00000000..e165f746 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_9b19f9a1b857.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_ad65c300a4b5.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_ad65c300a4b5.npy new file mode 100644 index 00000000..d2f78f4a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_ad65c300a4b5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b3313ee077b9.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b3313ee077b9.npy new file mode 100644 index 00000000..43f07bb3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b3313ee077b9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b44965493b34.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b44965493b34.npy new file mode 100644 index 00000000..068fca08 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_b44965493b34.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_bdb78de183ac.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_bdb78de183ac.npy new file mode 100644 index 00000000..b5312fd5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_bdb78de183ac.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_c5e473c8a9ae.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_c5e473c8a9ae.npy new file mode 100644 index 00000000..d91d0132 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_c5e473c8a9ae.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_d51ec6766c3d.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_d51ec6766c3d.npy new file mode 100644 index 00000000..ef2df0b9 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_d51ec6766c3d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dad9f41cbb79.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dad9f41cbb79.npy new file mode 100644 index 00000000..998f5121 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dad9f41cbb79.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dd439177706c.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dd439177706c.npy new file mode 100644 index 00000000..2f9847a5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dd439177706c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dfba1136f724.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dfba1136f724.npy new file mode 100644 index 00000000..645e02ed Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_dfba1136f724.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e4dfc09fbb39.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e4dfc09fbb39.npy new file mode 100644 index 00000000..1f2bc849 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e4dfc09fbb39.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e887f0c21bdb.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e887f0c21bdb.npy new file mode 100644 index 00000000..e7bb8851 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-EN_e887f0c21bdb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-ES_9f6a3a6dd126.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-ES_9f6a3a6dd126.npy new file mode 100644 index 00000000..95b7f5c8 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-ES_9f6a3a6dd126.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-ET_066c690bfe85.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-ET_066c690bfe85.npy new file mode 100644 index 00000000..d277f4dc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-ET_066c690bfe85.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-FA_b2f027115e49.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-FA_b2f027115e49.npy new file mode 100644 index 00000000..15deaa42 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-FA_b2f027115e49.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-FI_d89eb2b0a081.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-FI_d89eb2b0a081.npy new file mode 100644 index 00000000..6a2dea91 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-FI_d89eb2b0a081.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-FR-CA-1_a9473e50ae2a.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-FR-CA-1_a9473e50ae2a.npy new file mode 100644 index 00000000..a01c730a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-FR-CA-1_a9473e50ae2a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-FR-FR-1_d4c6653482cb.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-FR-FR-1_d4c6653482cb.npy new file mode 100644 index 00000000..5fe6136b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-FR-FR-1_d4c6653482cb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-FR_058cbf46de82.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-FR_058cbf46de82.npy new file mode 100644 index 00000000..053b4797 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-FR_058cbf46de82.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-HI_4c4cb9cf2a0a.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-HI_4c4cb9cf2a0a.npy new file mode 100644 index 00000000..9baa5c64 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-HI_4c4cb9cf2a0a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-HU_ac5d330d4dee.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-HU_ac5d330d4dee.npy new file mode 100644 index 00000000..6f72c86f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-HU_ac5d330d4dee.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-IS_be268607cc0f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-IS_be268607cc0f.npy new file mode 100644 index 00000000..70c7b277 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-IS_be268607cc0f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-IT_18504834aefa.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-IT_18504834aefa.npy new file mode 100644 index 00000000..b6883970 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-IT_18504834aefa.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-JA_7ad47a366399.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-JA_7ad47a366399.npy new file mode 100644 index 00000000..23e00020 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-JA_7ad47a366399.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-KO_10d8adc2fe4a.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-KO_10d8adc2fe4a.npy new file mode 100644 index 00000000..6247f9be Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-KO_10d8adc2fe4a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-LT_663e5c88560f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-LT_663e5c88560f.npy new file mode 100644 index 00000000..72989305 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-LT_663e5c88560f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-MN_99f8a78043f6.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-MN_99f8a78043f6.npy new file mode 100644 index 00000000..734f27d3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-MN_99f8a78043f6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-MR_d0c7cf3b854e.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-MR_d0c7cf3b854e.npy new file mode 100644 index 00000000..b4645bbe Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-MR_d0c7cf3b854e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-MS_aaa0241ecf57.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-MS_aaa0241ecf57.npy new file mode 100644 index 00000000..4f23121c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-MS_aaa0241ecf57.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-NL_f9737ae7926e.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-NL_f9737ae7926e.npy new file mode 100644 index 00000000..2836db97 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-NL_f9737ae7926e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-NO_ac3dc3776efc.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-NO_ac3dc3776efc.npy new file mode 100644 index 00000000..55d6a08e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-NO_ac3dc3776efc.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-NY_9494a6f2a475.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-NY_9494a6f2a475.npy new file mode 100644 index 00000000..268fe963 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-NY_9494a6f2a475.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-PA_afcd67540a47.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-PA_afcd67540a47.npy new file mode 100644 index 00000000..e8394021 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-PA_afcd67540a47.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-PL_066c930676b9.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-PL_066c930676b9.npy new file mode 100644 index 00000000..a109c141 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-PL_066c930676b9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-PT_afd02f61e26e.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-PT_afd02f61e26e.npy new file mode 100644 index 00000000..c34cb57d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-PT_afd02f61e26e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-SL_cbaf02601113.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-SL_cbaf02601113.npy new file mode 100644 index 00000000..32b696f3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-SL_cbaf02601113.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-SR_5df96c72be6f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-SR_5df96c72be6f.npy new file mode 100644 index 00000000..7e91dd96 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-SR_5df96c72be6f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-SV_64e998fc6358.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-SV_64e998fc6358.npy new file mode 100644 index 00000000..24e3a546 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-SV_64e998fc6358.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-TR_28271cb68c6a.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-TR_28271cb68c6a.npy new file mode 100644 index 00000000..03bbbbaf Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-TR_28271cb68c6a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-UR_425a44af0d2d.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-UR_425a44af0d2d.npy new file mode 100644 index 00000000..f76a7bb1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-UR_425a44af0d2d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-VI_6ccec4d5d94f.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-VI_6ccec4d5d94f.npy new file mode 100644 index 00000000..a279d549 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-VI_6ccec4d5d94f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANS_991a730c0061.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANS_991a730c0061.npy new file mode 100644 index 00000000..0d0590de Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANS_991a730c0061.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANT_8c1ab2274d57.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANT_8c1ab2274d57.npy new file mode 100644 index 00000000..5aaf3b3b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-ZH-HANT_8c1ab2274d57.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-CG-ZU_b3f3b5bcdd33.npy b/embeddings/Pipeline/instruments/RCADS-25-CG-ZU_b3f3b5bcdd33.npy new file mode 100644 index 00000000..813cede4 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-CG-ZU_b3f3b5bcdd33.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-AR_0bebe08b85b5.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-AR_0bebe08b85b5.npy new file mode 100644 index 00000000..49ade785 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-AR_0bebe08b85b5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-BN_14d1348d7409.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-BN_14d1348d7409.npy new file mode 100644 index 00000000..64089f18 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-BN_14d1348d7409.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-CH-HANS_7b37bf4e781f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-CH-HANS_7b37bf4e781f.npy new file mode 100644 index 00000000..8b5b7123 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-CH-HANS_7b37bf4e781f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-DA_e7c8e277542f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-DA_e7c8e277542f.npy new file mode 100644 index 00000000..99bb6146 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-DA_e7c8e277542f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-DE_9ed218916d5b.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-DE_9ed218916d5b.npy new file mode 100644 index 00000000..bfde87ef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-DE_9ed218916d5b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EL_a66f80548b0a.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EL_a66f80548b0a.npy new file mode 100644 index 00000000..c832bc98 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EL_a66f80548b0a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_00d23abbabd9.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_00d23abbabd9.npy new file mode 100644 index 00000000..44225a30 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_00d23abbabd9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_108b1e17d1a5.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_108b1e17d1a5.npy new file mode 100644 index 00000000..5476bdbc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_108b1e17d1a5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_1fe26ff07e2f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_1fe26ff07e2f.npy new file mode 100644 index 00000000..2c0d1402 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_1fe26ff07e2f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_25b60b5da019.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_25b60b5da019.npy new file mode 100644 index 00000000..9c67bf90 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_25b60b5da019.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_2b25a308b639.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_2b25a308b639.npy new file mode 100644 index 00000000..6cd25ab2 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_2b25a308b639.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_37893fdb3e12.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_37893fdb3e12.npy new file mode 100644 index 00000000..640a7713 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_37893fdb3e12.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_44547512a7df.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_44547512a7df.npy new file mode 100644 index 00000000..fc2e198f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_44547512a7df.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_55d5d9a04337.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_55d5d9a04337.npy new file mode 100644 index 00000000..99053f25 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_55d5d9a04337.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_6f4b7d6313ef.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_6f4b7d6313ef.npy new file mode 100644 index 00000000..2bb7654c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_6f4b7d6313ef.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_70ca50778ab6.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_70ca50778ab6.npy new file mode 100644 index 00000000..38f6e4d6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_70ca50778ab6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_71bc9cb7054f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_71bc9cb7054f.npy new file mode 100644 index 00000000..4be6a5d1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_71bc9cb7054f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_763f982392a0.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_763f982392a0.npy new file mode 100644 index 00000000..56a5de9b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_763f982392a0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_806f29801e55.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_806f29801e55.npy new file mode 100644 index 00000000..12b11382 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_806f29801e55.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_84520f419004.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_84520f419004.npy new file mode 100644 index 00000000..76043989 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_84520f419004.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8610b49c710b.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8610b49c710b.npy new file mode 100644 index 00000000..a9bfe54c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8610b49c710b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8745c58e2f21.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8745c58e2f21.npy new file mode 100644 index 00000000..261a52d1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8745c58e2f21.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_877f9a81b486.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_877f9a81b486.npy new file mode 100644 index 00000000..b21c2b63 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_877f9a81b486.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8e750e4a8d2e.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8e750e4a8d2e.npy new file mode 100644 index 00000000..8009c273 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_8e750e4a8d2e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_9c17e3ba6f6b.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_9c17e3ba6f6b.npy new file mode 100644 index 00000000..aca9824d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_9c17e3ba6f6b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_ad3f05970d41.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_ad3f05970d41.npy new file mode 100644 index 00000000..023664b9 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_ad3f05970d41.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_af36924e25cd.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_af36924e25cd.npy new file mode 100644 index 00000000..c36e7ac5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_af36924e25cd.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_d5844ed76987.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_d5844ed76987.npy new file mode 100644 index 00000000..80036cc6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_d5844ed76987.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f3a4dd5c9acb.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f3a4dd5c9acb.npy new file mode 100644 index 00000000..e7a292ad Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f3a4dd5c9acb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f7b9ce920a84.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f7b9ce920a84.npy new file mode 100644 index 00000000..2eb0fe36 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_f7b9ce920a84.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-EN_fb8e20f5ad72.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_fb8e20f5ad72.npy new file mode 100644 index 00000000..b9f20d84 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-EN_fb8e20f5ad72.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-ES_7205f1fd9df0.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-ES_7205f1fd9df0.npy new file mode 100644 index 00000000..dad00a6d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-ES_7205f1fd9df0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-ET_6b34e9e4b8bf.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-ET_6b34e9e4b8bf.npy new file mode 100644 index 00000000..4db5bf34 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-ET_6b34e9e4b8bf.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FA_79383ca24a9f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FA_79383ca24a9f.npy new file mode 100644 index 00000000..99ad3311 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FA_79383ca24a9f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FI_ae59b45567d6.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FI_ae59b45567d6.npy new file mode 100644 index 00000000..bb266373 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FI_ae59b45567d6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-1_1d9676b39dc3.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-1_1d9676b39dc3.npy new file mode 100644 index 00000000..65e2ca63 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-1_1d9676b39dc3.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-2_b463a586d896.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-2_b463a586d896.npy new file mode 100644 index 00000000..e8b2db6a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-CA-2_b463a586d896.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-1_efc670318700.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-1_efc670318700.npy new file mode 100644 index 00000000..558be5ef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-1_efc670318700.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-2_72782fe8e66f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-2_72782fe8e66f.npy new file mode 100644 index 00000000..d4a7b2f0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FR-FR-2_72782fe8e66f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-FR_a3712e0fd310.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-FR_a3712e0fd310.npy new file mode 100644 index 00000000..b58c99cc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-FR_a3712e0fd310.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-HI-1_b62f945c6be6.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-HI-1_b62f945c6be6.npy new file mode 100644 index 00000000..cc663868 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-HI-1_b62f945c6be6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-HI-2_a0a69dade72f.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-HI-2_a0a69dade72f.npy new file mode 100644 index 00000000..c6f5ddef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-HI-2_a0a69dade72f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-HU_3825710c77b5.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-HU_3825710c77b5.npy new file mode 100644 index 00000000..23e03322 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-HU_3825710c77b5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-IS_a50d8a55a167.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-IS_a50d8a55a167.npy new file mode 100644 index 00000000..5758778a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-IS_a50d8a55a167.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-IT_0ece51d81514.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-IT_0ece51d81514.npy new file mode 100644 index 00000000..5427c1c3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-IT_0ece51d81514.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-JA_24a46c0db82e.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-JA_24a46c0db82e.npy new file mode 100644 index 00000000..09c86654 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-JA_24a46c0db82e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-KO_452a3ac87f5d.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-KO_452a3ac87f5d.npy new file mode 100644 index 00000000..e517550a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-KO_452a3ac87f5d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-LT_03e82eddff74.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-LT_03e82eddff74.npy new file mode 100644 index 00000000..938e3e02 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-LT_03e82eddff74.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-MN_c907f1f6bef5.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-MN_c907f1f6bef5.npy new file mode 100644 index 00000000..a8082d8b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-MN_c907f1f6bef5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-MR_abaedaa650ef.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-MR_abaedaa650ef.npy new file mode 100644 index 00000000..15e9cff3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-MR_abaedaa650ef.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-MS_bcfd0164b777.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-MS_bcfd0164b777.npy new file mode 100644 index 00000000..471c1e56 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-MS_bcfd0164b777.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-NL_ca55aa58f448.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-NL_ca55aa58f448.npy new file mode 100644 index 00000000..ea1384e3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-NL_ca55aa58f448.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-NO_563b86301e55.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-NO_563b86301e55.npy new file mode 100644 index 00000000..ee19305c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-NO_563b86301e55.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-NY-1_f688640b7e28.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-NY-1_f688640b7e28.npy new file mode 100644 index 00000000..74050385 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-NY-1_f688640b7e28.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-NY-2_b87bac621693.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-NY-2_b87bac621693.npy new file mode 100644 index 00000000..fb37f1dd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-NY-2_b87bac621693.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-PA_3c916e0b96f3.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-PA_3c916e0b96f3.npy new file mode 100644 index 00000000..f4d079ac Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-PA_3c916e0b96f3.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-PL_660d9b2cfad4.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-PL_660d9b2cfad4.npy new file mode 100644 index 00000000..6d4ebfc0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-PL_660d9b2cfad4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-PT-BR_477bf02b9e60.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-PT-BR_477bf02b9e60.npy new file mode 100644 index 00000000..ca4e79e5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-PT-BR_477bf02b9e60.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-PT_f36a0f4aca6e.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-PT_f36a0f4aca6e.npy new file mode 100644 index 00000000..90be41ea Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-PT_f36a0f4aca6e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-SL_e6f57bc8213a.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-SL_e6f57bc8213a.npy new file mode 100644 index 00000000..75450d85 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-SL_e6f57bc8213a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-SR_52a6ac572930.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-SR_52a6ac572930.npy new file mode 100644 index 00000000..f7b6f49f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-SR_52a6ac572930.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-SV_98f3dc282c06.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-SV_98f3dc282c06.npy new file mode 100644 index 00000000..8c96abef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-SV_98f3dc282c06.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-TR_1910bc343a0e.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-TR_1910bc343a0e.npy new file mode 100644 index 00000000..4b8c054d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-TR_1910bc343a0e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-UR_d4f17702c148.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-UR_d4f17702c148.npy new file mode 100644 index 00000000..55349e7f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-UR_d4f17702c148.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-VI_c7c2de002a60.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-VI_c7c2de002a60.npy new file mode 100644 index 00000000..42185c54 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-VI_c7c2de002a60.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANS_0ce25f810745.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANS_0ce25f810745.npy new file mode 100644 index 00000000..fd8562f6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANS_0ce25f810745.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANT_6f967b92a9c4.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANT_6f967b92a9c4.npy new file mode 100644 index 00000000..890e9642 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-ZH-HANT_6f967b92a9c4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-25-Y-ZU_fd40bd9dc0a4.npy b/embeddings/Pipeline/instruments/RCADS-25-Y-ZU_fd40bd9dc0a4.npy new file mode 100644 index 00000000..67c43881 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-25-Y-ZU_fd40bd9dc0a4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-35-Y-EN_f9ec5f015568.npy b/embeddings/Pipeline/instruments/RCADS-35-Y-EN_f9ec5f015568.npy new file mode 100644 index 00000000..13c00183 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-35-Y-EN_f9ec5f015568.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-35-Y-SW_3793972b4d05.npy b/embeddings/Pipeline/instruments/RCADS-35-Y-SW_3793972b4d05.npy new file mode 100644 index 00000000..05f7d2a7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-35-Y-SW_3793972b4d05.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-AR_fe928b8357a4.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-AR_fe928b8357a4.npy new file mode 100644 index 00000000..c162c2ec Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-AR_fe928b8357a4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-BN_ae0def83f058.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-BN_ae0def83f058.npy new file mode 100644 index 00000000..138cd9aa Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-BN_ae0def83f058.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-CH-HANS_6a519e20304f.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-CH-HANS_6a519e20304f.npy new file mode 100644 index 00000000..9af003f5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-CH-HANS_6a519e20304f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-DA_3c8d78d33184.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-DA_3c8d78d33184.npy new file mode 100644 index 00000000..43c2415a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-DA_3c8d78d33184.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-DE_e69d394aaf57.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-DE_e69d394aaf57.npy new file mode 100644 index 00000000..d0d0dfc7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-DE_e69d394aaf57.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EL_c73cf5a56750.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EL_c73cf5a56750.npy new file mode 100644 index 00000000..2b8238b9 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EL_c73cf5a56750.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_0447162b7508.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_0447162b7508.npy new file mode 100644 index 00000000..98841422 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_0447162b7508.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_07e43dd18a65.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_07e43dd18a65.npy new file mode 100644 index 00000000..3a8985ac Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_07e43dd18a65.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_11502d8b34d2.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_11502d8b34d2.npy new file mode 100644 index 00000000..b12cd567 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_11502d8b34d2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1a07a8d1ff7d.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1a07a8d1ff7d.npy new file mode 100644 index 00000000..a6af1643 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1a07a8d1ff7d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1bbbd34aba5f.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1bbbd34aba5f.npy new file mode 100644 index 00000000..a90dd768 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_1bbbd34aba5f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_20668e676458.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_20668e676458.npy new file mode 100644 index 00000000..3f8ddc63 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_20668e676458.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_26236374492d.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_26236374492d.npy new file mode 100644 index 00000000..ca374e90 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_26236374492d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_29f7a3ca5404.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_29f7a3ca5404.npy new file mode 100644 index 00000000..fcbc0822 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_29f7a3ca5404.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_32128b2a9902.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_32128b2a9902.npy new file mode 100644 index 00000000..40f286e8 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_32128b2a9902.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_3adc16911ee7.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_3adc16911ee7.npy new file mode 100644 index 00000000..9f22d445 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_3adc16911ee7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_48af2e111c14.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_48af2e111c14.npy new file mode 100644 index 00000000..b3949bef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_48af2e111c14.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_4bdf8d517a43.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_4bdf8d517a43.npy new file mode 100644 index 00000000..40da8495 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_4bdf8d517a43.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_68a64b3862f2.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_68a64b3862f2.npy new file mode 100644 index 00000000..1aed1b36 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_68a64b3862f2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_6fe6d91163d8.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_6fe6d91163d8.npy new file mode 100644 index 00000000..a602a5d7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_6fe6d91163d8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_75d4456e6e74.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_75d4456e6e74.npy new file mode 100644 index 00000000..d1cfc34b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_75d4456e6e74.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_92c56307a196.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_92c56307a196.npy new file mode 100644 index 00000000..6c034fdf Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_92c56307a196.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_990e02a3b4d4.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_990e02a3b4d4.npy new file mode 100644 index 00000000..d0ab1e27 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_990e02a3b4d4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a1d7b8774f93.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a1d7b8774f93.npy new file mode 100644 index 00000000..846c190b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a1d7b8774f93.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a255819a13e0.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a255819a13e0.npy new file mode 100644 index 00000000..ccb03add Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a255819a13e0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a306531836eb.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a306531836eb.npy new file mode 100644 index 00000000..d16c428d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a306531836eb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a5a328ab10c1.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a5a328ab10c1.npy new file mode 100644 index 00000000..8cf1c749 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a5a328ab10c1.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a9de6ce9ff3b.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a9de6ce9ff3b.npy new file mode 100644 index 00000000..1917cee6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_a9de6ce9ff3b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_acb95df92448.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_acb95df92448.npy new file mode 100644 index 00000000..395f5b3e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_acb95df92448.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_b2c9879d2feb.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_b2c9879d2feb.npy new file mode 100644 index 00000000..f20d69d3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_b2c9879d2feb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ba47ca653669.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ba47ca653669.npy new file mode 100644 index 00000000..aae1a071 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ba47ca653669.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ca5db62eda30.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ca5db62eda30.npy new file mode 100644 index 00000000..0dd08f7c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_ca5db62eda30.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_cdebd3e8c571.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_cdebd3e8c571.npy new file mode 100644 index 00000000..a6cdafaf Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_cdebd3e8c571.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_defb4ec11061.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_defb4ec11061.npy new file mode 100644 index 00000000..bc34613f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN-2_defb4ec11061.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_002ee603a1c1.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_002ee603a1c1.npy new file mode 100644 index 00000000..857da020 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_002ee603a1c1.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_014aff1bc542.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_014aff1bc542.npy new file mode 100644 index 00000000..8e872b38 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_014aff1bc542.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_02ccf90e6161.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_02ccf90e6161.npy new file mode 100644 index 00000000..b5ba37ca Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_02ccf90e6161.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_07166098174e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_07166098174e.npy new file mode 100644 index 00000000..091a3f0a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_07166098174e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_086129302cfe.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_086129302cfe.npy new file mode 100644 index 00000000..06beee99 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_086129302cfe.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d3208fdb2de.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d3208fdb2de.npy new file mode 100644 index 00000000..9982e963 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d3208fdb2de.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d934455afc8.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d934455afc8.npy new file mode 100644 index 00000000..d847c296 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_0d934455afc8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1793778bebca.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1793778bebca.npy new file mode 100644 index 00000000..7ea9f868 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1793778bebca.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1b6b23cc0b0e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1b6b23cc0b0e.npy new file mode 100644 index 00000000..c9ccec89 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_1b6b23cc0b0e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_211677429d10.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_211677429d10.npy new file mode 100644 index 00000000..f4cfd38f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_211677429d10.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_24f2f0d99fa6.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_24f2f0d99fa6.npy new file mode 100644 index 00000000..e137cdd1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_24f2f0d99fa6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_31962b68887a.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_31962b68887a.npy new file mode 100644 index 00000000..a728e98c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_31962b68887a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_36fac89ec706.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_36fac89ec706.npy new file mode 100644 index 00000000..4acfc935 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_36fac89ec706.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_44967853e3ad.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_44967853e3ad.npy new file mode 100644 index 00000000..1a9ad1df Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_44967853e3ad.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_51daed7526ce.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_51daed7526ce.npy new file mode 100644 index 00000000..c72db42f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_51daed7526ce.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_5245bdcc77c8.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_5245bdcc77c8.npy new file mode 100644 index 00000000..bdd64944 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_5245bdcc77c8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_525847611836.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_525847611836.npy new file mode 100644 index 00000000..fd682bfc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_525847611836.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_54cce870e322.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_54cce870e322.npy new file mode 100644 index 00000000..d470bff5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_54cce870e322.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_55a5d8b9cd06.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_55a5d8b9cd06.npy new file mode 100644 index 00000000..529fa5e3 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_55a5d8b9cd06.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_618c767bb2c6.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_618c767bb2c6.npy new file mode 100644 index 00000000..3121fb51 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_618c767bb2c6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_64c2c4157e58.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_64c2c4157e58.npy new file mode 100644 index 00000000..3329636c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_64c2c4157e58.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_67d93c8ca286.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_67d93c8ca286.npy new file mode 100644 index 00000000..10565a45 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_67d93c8ca286.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_6f8af4cd1bc5.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_6f8af4cd1bc5.npy new file mode 100644 index 00000000..d6e5c980 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_6f8af4cd1bc5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_789cf4dc71dc.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_789cf4dc71dc.npy new file mode 100644 index 00000000..7d7cd000 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_789cf4dc71dc.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_78cf1a566aae.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_78cf1a566aae.npy new file mode 100644 index 00000000..fb14a9c7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_78cf1a566aae.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_883c2e2f57a0.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_883c2e2f57a0.npy new file mode 100644 index 00000000..0445ca00 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_883c2e2f57a0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9016fe818ab8.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9016fe818ab8.npy new file mode 100644 index 00000000..80537b08 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9016fe818ab8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_93887792dc2f.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_93887792dc2f.npy new file mode 100644 index 00000000..1a9efb64 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_93887792dc2f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_946c9a793f54.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_946c9a793f54.npy new file mode 100644 index 00000000..d69a4d46 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_946c9a793f54.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_98e5452d45ee.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_98e5452d45ee.npy new file mode 100644 index 00000000..9609ef49 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_98e5452d45ee.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9a7b01528206.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9a7b01528206.npy new file mode 100644 index 00000000..bdbcf29b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9a7b01528206.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9b5f2944f843.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9b5f2944f843.npy new file mode 100644 index 00000000..24ae5311 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9b5f2944f843.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9f3ed1316b80.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9f3ed1316b80.npy new file mode 100644 index 00000000..c38e2b00 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_9f3ed1316b80.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a092053b7ce6.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a092053b7ce6.npy new file mode 100644 index 00000000..da520ef5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a092053b7ce6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a0c4df13717e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a0c4df13717e.npy new file mode 100644 index 00000000..6a89f36c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_a0c4df13717e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_aaf37f93782b.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_aaf37f93782b.npy new file mode 100644 index 00000000..cf46be16 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_aaf37f93782b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_b66ac7337d81.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_b66ac7337d81.npy new file mode 100644 index 00000000..ea0d32f7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_b66ac7337d81.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_ba6e664ca37a.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_ba6e664ca37a.npy new file mode 100644 index 00000000..98166bb6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_ba6e664ca37a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_c640dd166e19.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_c640dd166e19.npy new file mode 100644 index 00000000..fcff5c18 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_c640dd166e19.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_cf25f04e849a.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_cf25f04e849a.npy new file mode 100644 index 00000000..c3bcdca8 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_cf25f04e849a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_d4949e37ba9d.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_d4949e37ba9d.npy new file mode 100644 index 00000000..83d5384c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_d4949e37ba9d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dafe86669f1c.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dafe86669f1c.npy new file mode 100644 index 00000000..b84a0da0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dafe86669f1c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dc7198166d36.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dc7198166d36.npy new file mode 100644 index 00000000..b6923b80 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dc7198166d36.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dcde8a8a3bd5.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dcde8a8a3bd5.npy new file mode 100644 index 00000000..27b53889 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_dcde8a8a3bd5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_e5fc5c1e5c86.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_e5fc5c1e5c86.npy new file mode 100644 index 00000000..8527f8ce Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_e5fc5c1e5c86.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_eb95aba4cdd5.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_eb95aba4cdd5.npy new file mode 100644 index 00000000..f926f89d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_eb95aba4cdd5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-EN_fa57a1d6e6da.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_fa57a1d6e6da.npy new file mode 100644 index 00000000..dc118436 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-EN_fa57a1d6e6da.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-ES_64c4f8da11eb.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-ES_64c4f8da11eb.npy new file mode 100644 index 00000000..bc655722 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-ES_64c4f8da11eb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-ET_8cd28864352e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-ET_8cd28864352e.npy new file mode 100644 index 00000000..03321bfb Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-ET_8cd28864352e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FA_af16b6372508.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FA_af16b6372508.npy new file mode 100644 index 00000000..f6770cd1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FA_af16b6372508.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FI_228628cd86b0.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FI_228628cd86b0.npy new file mode 100644 index 00000000..a64e7ad6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FI_228628cd86b0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FR-1_edca367514f5.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-1_edca367514f5.npy new file mode 100644 index 00000000..154eebee Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-1_edca367514f5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FR-2_25986763c6c5.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-2_25986763c6c5.npy new file mode 100644 index 00000000..d99fe58e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-2_25986763c6c5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FR-3_c818c3e7773e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-3_c818c3e7773e.npy new file mode 100644 index 00000000..d7592485 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-3_c818c3e7773e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FR-CA-1_7513d6a15ffa.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-CA-1_7513d6a15ffa.npy new file mode 100644 index 00000000..c628781c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FR-CA-1_7513d6a15ffa.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-FR_36473366d1f2.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-FR_36473366d1f2.npy new file mode 100644 index 00000000..d1711907 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-FR_36473366d1f2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-HI_4d4918859721.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-HI_4d4918859721.npy new file mode 100644 index 00000000..503db5bd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-HI_4d4918859721.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-HU_e47079fd462e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-HU_e47079fd462e.npy new file mode 100644 index 00000000..3ce1a84d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-HU_e47079fd462e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-IS_924bf23b60b9.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-IS_924bf23b60b9.npy new file mode 100644 index 00000000..9e89ae73 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-IS_924bf23b60b9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-IT_c850ee1c8d8e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-IT_c850ee1c8d8e.npy new file mode 100644 index 00000000..8a5581fc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-IT_c850ee1c8d8e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-JA-1_fdc199cba538.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-JA-1_fdc199cba538.npy new file mode 100644 index 00000000..cfde1a1f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-JA-1_fdc199cba538.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-JA-2_8a5b5e2d3888.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-JA-2_8a5b5e2d3888.npy new file mode 100644 index 00000000..9ffd81ad Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-JA-2_8a5b5e2d3888.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-JA_71787c6ac096.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-JA_71787c6ac096.npy new file mode 100644 index 00000000..d58425b5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-JA_71787c6ac096.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-KO_16397ee15a85.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-KO_16397ee15a85.npy new file mode 100644 index 00000000..81fc87b0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-KO_16397ee15a85.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-LT_47fe085a84bd.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-LT_47fe085a84bd.npy new file mode 100644 index 00000000..00fabede Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-LT_47fe085a84bd.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-MN_b34c44f6ed86.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-MN_b34c44f6ed86.npy new file mode 100644 index 00000000..6d07fdd7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-MN_b34c44f6ed86.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-MR_9cf1763cb9b9.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-MR_9cf1763cb9b9.npy new file mode 100644 index 00000000..4defd89a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-MR_9cf1763cb9b9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-MS_546049eea3d9.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-MS_546049eea3d9.npy new file mode 100644 index 00000000..b28fc96e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-MS_546049eea3d9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-NL_a8fd7f628a55.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-NL_a8fd7f628a55.npy new file mode 100644 index 00000000..0340c038 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-NL_a8fd7f628a55.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-NO-1_d4373de666fe.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-NO-1_d4373de666fe.npy new file mode 100644 index 00000000..7e31a467 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-NO-1_d4373de666fe.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-NO-2_bb5557bb7286.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-NO-2_bb5557bb7286.npy new file mode 100644 index 00000000..31302794 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-NO-2_bb5557bb7286.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-NO_983e85ba5f58.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-NO_983e85ba5f58.npy new file mode 100644 index 00000000..4ff00ee5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-NO_983e85ba5f58.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-NY_ecc48513bd68.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-NY_ecc48513bd68.npy new file mode 100644 index 00000000..41aa5121 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-NY_ecc48513bd68.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-PA_78cb3b5385bf.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-PA_78cb3b5385bf.npy new file mode 100644 index 00000000..e4643044 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-PA_78cb3b5385bf.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-PL_361728236027.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-PL_361728236027.npy new file mode 100644 index 00000000..a333b465 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-PL_361728236027.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-PT_6ec6ad1bc708.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-PT_6ec6ad1bc708.npy new file mode 100644 index 00000000..5b8b370d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-PT_6ec6ad1bc708.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-SL_302f48f76c9c.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-SL_302f48f76c9c.npy new file mode 100644 index 00000000..2ae304e7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-SL_302f48f76c9c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-SR_8251bac7c593.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-SR_8251bac7c593.npy new file mode 100644 index 00000000..30ae39f2 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-SR_8251bac7c593.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-SV-1_908c59f53cb9.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-SV-1_908c59f53cb9.npy new file mode 100644 index 00000000..5cfd14c7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-SV-1_908c59f53cb9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-SV-2_fc5645f5ee1e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-SV-2_fc5645f5ee1e.npy new file mode 100644 index 00000000..cd1f8680 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-SV-2_fc5645f5ee1e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-SV_d2c70bbcbc4f.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-SV_d2c70bbcbc4f.npy new file mode 100644 index 00000000..31b4d95d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-SV_d2c70bbcbc4f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-TR_66d04f7dbfa6.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-TR_66d04f7dbfa6.npy new file mode 100644 index 00000000..82cd3c2e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-TR_66d04f7dbfa6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-UR_4d134ee2eae2.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-UR_4d134ee2eae2.npy new file mode 100644 index 00000000..9db117d0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-UR_4d134ee2eae2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-VI_03304defb14e.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-VI_03304defb14e.npy new file mode 100644 index 00000000..ea312133 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-VI_03304defb14e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANS_c266e02013e7.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANS_c266e02013e7.npy new file mode 100644 index 00000000..7010db9d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANS_c266e02013e7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANT_323e45ac967d.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANT_323e45ac967d.npy new file mode 100644 index 00000000..87e7a75b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-ZH-HANT_323e45ac967d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-CG-ZU_bd886c7105a6.npy b/embeddings/Pipeline/instruments/RCADS-47-CG-ZU_bd886c7105a6.npy new file mode 100644 index 00000000..2c8c5339 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-CG-ZU_bd886c7105a6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-AR_bb5c4bc1486c.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-AR_bb5c4bc1486c.npy new file mode 100644 index 00000000..1586cc72 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-AR_bb5c4bc1486c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-BN_c2c37eecb2f0.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-BN_c2c37eecb2f0.npy new file mode 100644 index 00000000..bb78d83d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-BN_c2c37eecb2f0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-CH-HANS_4069dec354e3.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-CH-HANS_4069dec354e3.npy new file mode 100644 index 00000000..72fa7fe5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-CH-HANS_4069dec354e3.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-DA_89605a48f6b7.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-DA_89605a48f6b7.npy new file mode 100644 index 00000000..8d810fed Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-DA_89605a48f6b7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-DE_8fd828fafcdd.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-DE_8fd828fafcdd.npy new file mode 100644 index 00000000..36455f68 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-DE_8fd828fafcdd.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EL_3c0a54d7b677.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EL_3c0a54d7b677.npy new file mode 100644 index 00000000..5b49ca3c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EL_3c0a54d7b677.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_04beee09aa98.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_04beee09aa98.npy new file mode 100644 index 00000000..f74d9f52 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_04beee09aa98.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_066314a00d2f.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_066314a00d2f.npy new file mode 100644 index 00000000..ccc02d00 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_066314a00d2f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0975001964ee.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0975001964ee.npy new file mode 100644 index 00000000..8c2126ed Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0975001964ee.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0ceea783d92c.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0ceea783d92c.npy new file mode 100644 index 00000000..96204eef Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_0ceea783d92c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_1d40683604eb.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_1d40683604eb.npy new file mode 100644 index 00000000..06cd1ae5 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_1d40683604eb.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_27b9ebf72c48.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_27b9ebf72c48.npy new file mode 100644 index 00000000..5212fff7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_27b9ebf72c48.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_2fb40dc3756b.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_2fb40dc3756b.npy new file mode 100644 index 00000000..a9b3567e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_2fb40dc3756b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3a83e9beda93.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3a83e9beda93.npy new file mode 100644 index 00000000..0469de74 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3a83e9beda93.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3abf0884d36a.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3abf0884d36a.npy new file mode 100644 index 00000000..accaaba2 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_3abf0884d36a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_401c0c39e631.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_401c0c39e631.npy new file mode 100644 index 00000000..25112171 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_401c0c39e631.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_4451cc549f99.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_4451cc549f99.npy new file mode 100644 index 00000000..1c73e9e0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_4451cc549f99.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_44ef1a0cb9da.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_44ef1a0cb9da.npy new file mode 100644 index 00000000..f4c29ec0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_44ef1a0cb9da.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45ae95154a32.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45ae95154a32.npy new file mode 100644 index 00000000..e4b48e44 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45ae95154a32.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45b89ad4feb4.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45b89ad4feb4.npy new file mode 100644 index 00000000..3798958b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_45b89ad4feb4.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_46054b546241.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_46054b546241.npy new file mode 100644 index 00000000..c24193b7 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_46054b546241.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_465019350959.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_465019350959.npy new file mode 100644 index 00000000..f4cbc660 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_465019350959.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_576d220e5771.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_576d220e5771.npy new file mode 100644 index 00000000..bff439fe Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_576d220e5771.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_58c7bbdc8521.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_58c7bbdc8521.npy new file mode 100644 index 00000000..546c4054 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_58c7bbdc8521.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_671d69699cd0.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_671d69699cd0.npy new file mode 100644 index 00000000..9cea8e81 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_671d69699cd0.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_72016226e1a9.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_72016226e1a9.npy new file mode 100644 index 00000000..7a1b70fb Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_72016226e1a9.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_731ba1a187e5.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_731ba1a187e5.npy new file mode 100644 index 00000000..ac28fe47 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_731ba1a187e5.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_845a993b7fb2.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_845a993b7fb2.npy new file mode 100644 index 00000000..35c98c27 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_845a993b7fb2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_85953d9a51b2.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_85953d9a51b2.npy new file mode 100644 index 00000000..d54c81a9 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_85953d9a51b2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_892f1bb8d502.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_892f1bb8d502.npy new file mode 100644 index 00000000..8c3061c4 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_892f1bb8d502.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8c05a770008e.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8c05a770008e.npy new file mode 100644 index 00000000..a1fd8742 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8c05a770008e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8df4817daa76.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8df4817daa76.npy new file mode 100644 index 00000000..deff2afb Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_8df4817daa76.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_931384d02175.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_931384d02175.npy new file mode 100644 index 00000000..4a1ba5e2 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_931384d02175.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_94388c94bb29.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_94388c94bb29.npy new file mode 100644 index 00000000..d49b4f14 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_94388c94bb29.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9b13efa118f2.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9b13efa118f2.npy new file mode 100644 index 00000000..df190646 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9b13efa118f2.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9ba907bd5185.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9ba907bd5185.npy new file mode 100644 index 00000000..d7975595 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_9ba907bd5185.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_a1dbe013cf4b.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_a1dbe013cf4b.npy new file mode 100644 index 00000000..282feddc Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_a1dbe013cf4b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_aa10b44d9559.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_aa10b44d9559.npy new file mode 100644 index 00000000..0018bdbf Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_aa10b44d9559.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_ac4841022ffa.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_ac4841022ffa.npy new file mode 100644 index 00000000..fde7b998 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_ac4841022ffa.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b302a80bf45a.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b302a80bf45a.npy new file mode 100644 index 00000000..d8da3376 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b302a80bf45a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b571d208909e.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b571d208909e.npy new file mode 100644 index 00000000..3313f3fa Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b571d208909e.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b946df9fd5db.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b946df9fd5db.npy new file mode 100644 index 00000000..9652248d Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_b946df9fd5db.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_bdc9231d51ce.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_bdc9231d51ce.npy new file mode 100644 index 00000000..c0bfed62 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_bdc9231d51ce.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d5bbba9ca3e7.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d5bbba9ca3e7.npy new file mode 100644 index 00000000..603aa156 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d5bbba9ca3e7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d6d129229d36.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d6d129229d36.npy new file mode 100644 index 00000000..babcc765 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d6d129229d36.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d93c12b7432d.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d93c12b7432d.npy new file mode 100644 index 00000000..daeb4cfd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_d93c12b7432d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_e8ad9c648f78.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_e8ad9c648f78.npy new file mode 100644 index 00000000..210cb1ce Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_e8ad9c648f78.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_eeb0901b4d50.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_eeb0901b4d50.npy new file mode 100644 index 00000000..83898a48 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_eeb0901b4d50.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f0854901c80c.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f0854901c80c.npy new file mode 100644 index 00000000..f40b40fb Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f0854901c80c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f12be44c6329.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f12be44c6329.npy new file mode 100644 index 00000000..6a19faed Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f12be44c6329.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f35e89e708ad.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f35e89e708ad.npy new file mode 100644 index 00000000..b6f71a57 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f35e89e708ad.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f3848196eafd.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f3848196eafd.npy new file mode 100644 index 00000000..885a755e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f3848196eafd.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f42d225f066c.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f42d225f066c.npy new file mode 100644 index 00000000..776078ec Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-EN_f42d225f066c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-ES_831253e25d21.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-ES_831253e25d21.npy new file mode 100644 index 00000000..2d1e1d7b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-ES_831253e25d21.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-ET_f77e94e5649a.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-ET_f77e94e5649a.npy new file mode 100644 index 00000000..d5a058ba Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-ET_f77e94e5649a.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-FA_f54f7e0b8b2f.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-FA_f54f7e0b8b2f.npy new file mode 100644 index 00000000..bd6f199a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-FA_f54f7e0b8b2f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-FI_9d397946c657.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-FI_9d397946c657.npy new file mode 100644 index 00000000..ae2fc285 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-FI_9d397946c657.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-1_282faa344472.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-1_282faa344472.npy new file mode 100644 index 00000000..8cdc1760 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-1_282faa344472.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-2_8479844c01df.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-2_8479844c01df.npy new file mode 100644 index 00000000..93e09a1e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-FR-FR-2_8479844c01df.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-FR_d6c92136ea10.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-FR_d6c92136ea10.npy new file mode 100644 index 00000000..d00edab6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-FR_d6c92136ea10.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-HI_8bb5f461081f.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-HI_8bb5f461081f.npy new file mode 100644 index 00000000..83c6efcd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-HI_8bb5f461081f.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-HU_b58d4850f85b.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-HU_b58d4850f85b.npy new file mode 100644 index 00000000..e591ec99 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-HU_b58d4850f85b.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-IS_4ff2beda223d.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-IS_4ff2beda223d.npy new file mode 100644 index 00000000..9ddeaefd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-IS_4ff2beda223d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-IT_be985eed42d7.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-IT_be985eed42d7.npy new file mode 100644 index 00000000..b2e9f4dd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-IT_be985eed42d7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-JA-1_669ed77604d1.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-JA-1_669ed77604d1.npy new file mode 100644 index 00000000..d37117e6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-JA-1_669ed77604d1.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-JA-2_380e590b0e09.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-JA-2_380e590b0e09.npy new file mode 100644 index 00000000..65c2a2bb Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-JA-2_380e590b0e09.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-JA_b21d78599c19.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-JA_b21d78599c19.npy new file mode 100644 index 00000000..652fbe61 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-JA_b21d78599c19.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-KO_0d2d66f2be68.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-KO_0d2d66f2be68.npy new file mode 100644 index 00000000..7534459b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-KO_0d2d66f2be68.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-LT_0e28c238b076.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-LT_0e28c238b076.npy new file mode 100644 index 00000000..e12d0fa0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-LT_0e28c238b076.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-MN_4e49f9d61713.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-MN_4e49f9d61713.npy new file mode 100644 index 00000000..4521276a Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-MN_4e49f9d61713.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-MR_46da384b790d.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-MR_46da384b790d.npy new file mode 100644 index 00000000..4eb84d70 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-MR_46da384b790d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-MS_9dbd0c326145.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-MS_9dbd0c326145.npy new file mode 100644 index 00000000..ef7ef8a1 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-MS_9dbd0c326145.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-NL_26f2d1a9a0c8.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-NL_26f2d1a9a0c8.npy new file mode 100644 index 00000000..d6073170 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-NL_26f2d1a9a0c8.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-NO-1_7b51014f2079.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-NO-1_7b51014f2079.npy new file mode 100644 index 00000000..bb131950 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-NO-1_7b51014f2079.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-NO-2_7710ae6db1a7.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-NO-2_7710ae6db1a7.npy new file mode 100644 index 00000000..316f23a0 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-NO-2_7710ae6db1a7.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-NO_754f72fe0b68.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-NO_754f72fe0b68.npy new file mode 100644 index 00000000..c50b2408 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-NO_754f72fe0b68.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-NY_a92ccad47178.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-NY_a92ccad47178.npy new file mode 100644 index 00000000..6d4a85d6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-NY_a92ccad47178.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-PA_062c6e45492c.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-PA_062c6e45492c.npy new file mode 100644 index 00000000..5985d09b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-PA_062c6e45492c.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-PL_6fc8cadee4f6.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-PL_6fc8cadee4f6.npy new file mode 100644 index 00000000..6c06aa1f Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-PL_6fc8cadee4f6.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-PT-BR_bc21c2679588.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-PT-BR_bc21c2679588.npy new file mode 100644 index 00000000..b671cfba Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-PT-BR_bc21c2679588.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-PT_1972b3921996.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-PT_1972b3921996.npy new file mode 100644 index 00000000..45142e3b Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-PT_1972b3921996.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-SL_1150f07eb014.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-SL_1150f07eb014.npy new file mode 100644 index 00000000..5b33082e Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-SL_1150f07eb014.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-SR_d81c6501df64.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-SR_d81c6501df64.npy new file mode 100644 index 00000000..9034e814 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-SR_d81c6501df64.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-SV_0d84c8cca673.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-SV_0d84c8cca673.npy new file mode 100644 index 00000000..d78157de Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-SV_0d84c8cca673.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-TR_963064c12278.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-TR_963064c12278.npy new file mode 100644 index 00000000..36746d00 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-TR_963064c12278.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-UR_3cecd3435f12.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-UR_3cecd3435f12.npy new file mode 100644 index 00000000..96d898fd Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-UR_3cecd3435f12.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-VI_5cd60917df1d.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-VI_5cd60917df1d.npy new file mode 100644 index 00000000..e3b1c2e4 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-VI_5cd60917df1d.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANS-1_c07f566095be.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANS-1_c07f566095be.npy new file mode 100644 index 00000000..e631a28c Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANS-1_c07f566095be.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANT_84fbe327c384.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANT_84fbe327c384.npy new file mode 100644 index 00000000..5d6dae82 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-ZH-HANT_84fbe327c384.npy differ diff --git a/embeddings/Pipeline/instruments/RCADS-47-Y-ZU_d995b667c0ed.npy b/embeddings/Pipeline/instruments/RCADS-47-Y-ZU_d995b667c0ed.npy new file mode 100644 index 00000000..1f162fd6 Binary files /dev/null and b/embeddings/Pipeline/instruments/RCADS-47-Y-ZU_d995b667c0ed.npy differ diff --git a/embeddings/Pipeline/instruments/manifest.json b/embeddings/Pipeline/instruments/manifest.json new file mode 100644 index 00000000..9883d38e --- /dev/null +++ b/embeddings/Pipeline/instruments/manifest.json @@ -0,0 +1,2210 @@ +[ +{ +"hash": "25bd4c3c7ac15aa8b9602a30b47ba90070becc7268301b2e68ac42e7f49f218d", +"file": "GAD-7_25bd4c3c7ac1.npy" +}, +{ +"hash": "4727bb1c5e9d13db2d72d45b448253e3693a164d113395848bd12cc5937b1833", +"file": "MTT-35-CG-EN-1_4727bb1c5e9d.npy" +}, +{ +"hash": "af9d60ec8ebca417f9c21609260c1b7ef2dba7c336d4c2a90239288c77d31633", +"file": "MTT-35-CG-EN-1_af9d60ec8ebc.npy" +}, +{ +"hash": "1c17506e1eae34f6b7ed7916895c3f516894ef2e0b1253c0587eb776031675a0", +"file": "MTT-35-CG-EN-1_1c17506e1eae.npy" +}, +{ +"hash": "eae011be086bfc51975c8f3c4ba3e1e1df21926bd166be3ddca0c2af849c7383", +"file": "MTT-35-CG-EN-1_eae011be086b.npy" +}, +{ +"hash": "b267fbd1441a120598e023681401357b71907bfab267b7e124b5d80a6c897964", +"file": "MTT-35-CG-EN-1_b267fbd1441a.npy" +}, +{ +"hash": "ef8d61281ade16aa3d381785144a59ddc82bcbe7777b6f732c5c1534df5b571f", +"file": "MTT-35-CG-EN-1_ef8d61281ade.npy" +}, +{ +"hash": "add818ff201452fa04b9225f294207757b4ef20023d297ea7a6965303b0ee13c", +"file": "MTT-35-CG-EN-1_add818ff2014.npy" +}, +{ +"hash": "1b3e5f456da2ebefd4eb0b51d671bd158a3df8c87d9ff34e6edf2eb99f833334", +"file": "MTT-35-CG-EN-1_1b3e5f456da2.npy" +}, +{ +"hash": "ae3777fec78a9bc571eac0216c35da3a6fc531da51cbee07b7aebf02c8c8fe5d", +"file": "MTT-35-CG-EN-1_ae3777fec78a.npy" +}, +{ +"hash": "1e42685478d01c5bc48ecc2e7f4ea3910b447ff55cba406dd49dba8829be55a0", +"file": "MTT-35-CG-EN-1_1e42685478d0.npy" +}, +{ +"hash": "d2aa0da253d32f7e83a42d5078871365d1ea62754de1f5d83ea6350521529629", +"file": "MTT-35-CG-EN-1_d2aa0da253d3.npy" +}, +{ +"hash": "e9a7f72a1e1cd9f4c767aca1468dce1d23c208989f3bd6683f31188d768cc2b5", +"file": "MTT-35-CG-EN-1_e9a7f72a1e1c.npy" +}, +{ +"hash": "aeb30f716c5e96d7bd3f335520515a27d30a623270b25b797285ce29209c2920", +"file": "MTT-35-CG-EN-1_aeb30f716c5e.npy" +}, +{ +"hash": "d2a7809d3e128f8ba37bc12ead6506f957b709f7d620c04dbec88e9d3a2af30b", +"file": "MTT-35-CG-EN-1_d2a7809d3e12.npy" +}, +{ +"hash": "adbc914a662cf58b272abf314913b769e63e4a3a681be824fdfbd93785443ae5", +"file": "MTT-35-CG-EN-1_adbc914a662c.npy" +}, +{ +"hash": "5cd4654d3a9dda2ddddb8cdacecb89be589143856df8bc55fbe0c263e3368bfc", +"file": "MTT-35-CG-EN-1_5cd4654d3a9d.npy" +}, +{ +"hash": "a70e2053b4491439a6aaa6deaebaa197141a48aad35dbad2834a25bcd7a7a78a", +"file": "MTT-35-CG-EN-1_a70e2053b449.npy" +}, +{ +"hash": "bfebb02767c6991f3c9b4d4ea50eedd19b40a390cd36fb664701d3f8dc0333eb", +"file": "MTT-35-CG-EN-1_bfebb02767c6.npy" +}, +{ +"hash": "6727945bdc6c4fbfdd193d72aeb97d5dae474cd261f4f2feb6efeb8af46fd424", +"file": "MTT-35-CG-EN-1_6727945bdc6c.npy" +}, +{ +"hash": "d2c3f4b8abf70d7f1d750897b13a354a35f0522c85a9ee3848aedb299141aec7", +"file": "MTT-35-CG-EN-1_d2c3f4b8abf7.npy" +}, +{ +"hash": "95fa0ba7c371b15db135e07521e6cc59cfe9e0859eb1c8cc6244eec2316c8866", +"file": "MTT-35-CG-EN-1_95fa0ba7c371.npy" +}, +{ +"hash": "cf56471072072ad573dd57125842936d6b42982da56e6a387f3b5fbae5910f6c", +"file": "MTT-35-CG-EN-1_cf5647107207.npy" +}, +{ +"hash": "580f641f7a0afe6f062b0cf9b79360e55bbef4e9e74469c622e004764abf7714", +"file": "MTT-35-CG-EN-1_580f641f7a0a.npy" +}, +{ +"hash": "f943edfffa48ed73691e91a85ca9ccbfdf8eee9eb433362401dbd745e44c2979", +"file": "MTT-35-CG-EN-1_f943edfffa48.npy" +}, +{ +"hash": "6e7ae9d214626810462544370249e3efd82dc910e0185d8d94c3d46d73369303", +"file": "MTT-35-CG-EN-1_6e7ae9d21462.npy" +}, +{ +"hash": "259f3871ec0acf39fe5c9dd3d6aff44c35c2852569356c71319f927a47d6fdf4", +"file": "MTT-35-CG-EN-1_259f3871ec0a.npy" +}, +{ +"hash": "a18cb44c726ad0ccce5ae1b1b32ddb08ba33c5a5c2a775a9d44008dca9a1d696", +"file": "MTT-35-CG-EN-1_a18cb44c726a.npy" +}, +{ +"hash": "aa65e53cba9a76b3352a91b265b6560c18c25e9542fda9888219bc1ecd024e5b", +"file": "MTT-35-CG-EN-1_aa65e53cba9a.npy" +}, +{ +"hash": "7da2d641773f13dd816764a6b4b9603463c184d4de71e5dea8e4ad887986e111", +"file": "MTT-35-CG-EN-1_7da2d641773f.npy" +}, +{ +"hash": "ecb51c4c77b517dfc7e2e8c631c7a73fc97bbdc62aba9404a71b5769f5c2b1de", +"file": "MTT-35-CG-EN-1_ecb51c4c77b5.npy" +}, +{ +"hash": "db2e358615e902d0f2c211c3812fc4c1d8d6f03c9b891a5cdc730692c6300432", +"file": "MTT-35-CG-EN-1_db2e358615e9.npy" +}, +{ +"hash": "2338348e321dd897a6912771a54253bf60d21b1bd60397bdd99ae76334b36615", +"file": "MTT-35-CG-EN-1_2338348e321d.npy" +}, +{ +"hash": "452759e030fdd5865c9ae4c6d90a4679f7657b9ebbe64c748754e582d45a33a9", +"file": "MTT-35-CG-EN-1_452759e030fd.npy" +}, +{ +"hash": "88d84fc8e5d2dc199a92081bd1065328526a92fafdca1acb357eb5b9c62efd45", +"file": "MTT-35-CG-EN-1_88d84fc8e5d2.npy" +}, +{ +"hash": "eca62b64e50f813e60e5c5febe27d2258b2fdee920ce1abc59196fe0acc147c2", +"file": "MTT-35-CG-EN-1_eca62b64e50f.npy" +}, +{ +"hash": "ce01efe79580813bc227220a25547845539bb5a183f7521cc2ce0ac3f1ff9b22", +"file": "MTT-35-CG-EN-2_ce01efe79580.npy" +}, +{ +"hash": "aa2edd627efe2d19185dcc57a0551cf6ddd7788407a931ea92b9f580d7f2d36c", +"file": "MTT-35-CG-EN-2_aa2edd627efe.npy" +}, +{ +"hash": "b8f5fda506d21ad341e018a1c5fee5d8fdff711aede863bf503d95020e387022", +"file": "MTT-35-CG-EN-2_b8f5fda506d2.npy" +}, +{ +"hash": "170246433479c0aaa0df8f5f6abfd4679aa145c7f8d240c3f0369da281b68f3d", +"file": "MTT-35-CG-EN-2_170246433479.npy" +}, +{ +"hash": "76ad992114390f83cf6b9ece901e001411c2c6eef057deb99943616fd76b7622", +"file": "MTT-35-CG-EN-2_76ad99211439.npy" +}, +{ +"hash": "545beb636577f185f78a9e74c6df6a56ef90882920eb61da02b227df21340383", +"file": "MTT-35-CG-EN-2_545beb636577.npy" +}, +{ +"hash": "fa7d42da0a20211104c8e3f0c6a8bda60e8eb1bc3b70fc30629a393400b79834", +"file": "MTT-35-CG-EN-2_fa7d42da0a20.npy" +}, +{ +"hash": "419fb09052c4f8734a83ee6af6407581b53328c7bebe476fb6ebbe19db39a2db", +"file": "MTT-35-CG-EN-2_419fb09052c4.npy" +}, +{ +"hash": "2c4fe50e8da4903e96c82b4ffc97aa3566d3758678de3fb02ea5934e1404ffcf", +"file": "MTT-35-CG-EN-2_2c4fe50e8da4.npy" +}, +{ +"hash": "5df1aae073f94da1514f68cdb702613f095ae75540d1334674da1e9a06a88e87", +"file": "MTT-35-CG-EN-2_5df1aae073f9.npy" +}, +{ +"hash": "66f284e1487653e21e31b9a65475f02dbb9ba1e521565faa28bd2fc4ea5e2c94", +"file": "MTT-35-CG-EN-2_66f284e14876.npy" +}, +{ +"hash": "80325a7efee7c5a745e0f51e1fb0c248a0f0595d860f9dd7e8c2d00be4f34eb5", +"file": "MTT-35-CG-EN-2_80325a7efee7.npy" +}, +{ +"hash": "8253baf365b9ab1ea54a0a436dda0cf30bb828b1f37f79628e8f10ec88785271", +"file": "MTT-35-CG-EN-2_8253baf365b9.npy" +}, +{ +"hash": "3e2004cd470e8cc0598193cef24ddefde446dfc3afc96e85d1c169fa21bd484a", +"file": "MTT-35-CG-EN-2_3e2004cd470e.npy" +}, +{ +"hash": "15e56a445a479ca281563e4e96a5fe35ff7f0a20c13e9b67c83769155ec9f53a", +"file": "MTT-35-CG-EN-2_15e56a445a47.npy" +}, +{ +"hash": "3802aa0ff185fbe4dfb533f6743f5ad722e6a434289c2a63f8e7141b2138ea29", +"file": "MTT-35-CG-EN-2_3802aa0ff185.npy" +}, +{ +"hash": "1e4ad4a4f3d61bf9a0d7482a8d9ac018b523f9553d4f6e815fda60da82d14043", +"file": "MTT-35-CG-EN-2_1e4ad4a4f3d6.npy" +}, +{ +"hash": "b5a53ba7e94d599d05487de007319acb1df7941b64a432af09a48b0bfe4339d7", +"file": "MTT-35-CG-EN-2_b5a53ba7e94d.npy" +}, +{ +"hash": "b4c3bad881749126e12491311d9566287233be99e3e221296aa4f5c31562cca3", +"file": "MTT-35-CG-EN-2_b4c3bad88174.npy" +}, +{ +"hash": "58accb450d62e293f15e394b173c80b73b5434be0af981c28869d50106d214a0", +"file": "MTT-35-CG-EN-2_58accb450d62.npy" +}, +{ +"hash": "7cd14150308701be28e9ce133bee9745d8bcc843d34e7af3b253211c920d3e31", +"file": "MTT-35-CG-EN-2_7cd141503087.npy" +}, +{ +"hash": "cbab801e7d954d0ccb30b88372ff0db7b34334539997969da3d4ce1034f0780e", +"file": "MTT-35-CG-EN-2_cbab801e7d95.npy" +}, +{ +"hash": "3ac428d6d8ace5fec9bd780f8f40fa37fba6b6d6386e28ee800dc8642462caa0", +"file": "MTT-35-CG-EN-2_3ac428d6d8ac.npy" +}, +{ +"hash": "1d31b5d8f9e48ceb28a05574af3c795caf35294e6e877eeecb73c50a05111a9f", +"file": "MTT-35-CG-EN-2_1d31b5d8f9e4.npy" +}, +{ +"hash": "29b0f6bb335a51cb34e46e04ed195345c27426d4c09f7e5802be2a47faeda0ac", +"file": "MTT-35-CG-EN-2_29b0f6bb335a.npy" +}, +{ +"hash": "e799d0cc793f770f8d851a3effcf96671bf253bf804eb309af03abcabd9552ca", +"file": "MTT-35-CG-EN-2_e799d0cc793f.npy" +}, +{ +"hash": "1cce76d405a751f35c6fb9c9f6b07a10153d4a771397cb2bb916937531083951", +"file": "MTT-35-CG-EN-2_1cce76d405a7.npy" +}, +{ +"hash": "85e1d1047de4cd63f47d1fe6dc176b694425d4891b569ddd7ba22163c33033af", +"file": "MTT-35-CG-EN-2_85e1d1047de4.npy" +}, +{ +"hash": "9b9d2089bfda8f9fec98ca115607829049e4be425325c320bb16ca8ac5706c36", +"file": "MTT-35-CG-EN-2_9b9d2089bfda.npy" +}, +{ +"hash": "2597daf5a99666065d1e74487b82b5678b761aa56ce2c0c95ef2e0676de645a9", +"file": "MTT-35-CG-EN-2_2597daf5a996.npy" +}, +{ +"hash": "0c7a21996a87370411cd5d639fd87b5218fe0ade8a91eccfcf9903f38499d40c", +"file": "MTT-35-CG-EN-2_0c7a21996a87.npy" +}, +{ +"hash": "a7d054f63b73ae8a7ed50bf6618791f3eb3874bed48ed679d7a9c5abd3e61875", +"file": "MTT-35-CG-EN-2_a7d054f63b73.npy" +}, +{ +"hash": "bed3d5c5d5db2018d70fee00891d108247846dfdd4b4c52f88a99f0e99d8361d", +"file": "MTT-35-CG-EN-2_bed3d5c5d5db.npy" +}, +{ +"hash": "f7723b99521ce13317da30e5cfd3581afdc0444e2581efc4408f5c738678f293", +"file": "MTT-35-CG-EN-2_f7723b99521c.npy" +}, +{ +"hash": "901827f41e500aadb2325b3b63bd1f885124c6151e1122026d39decdfcf8faa6", +"file": "MTT-35-CG-EN-2_901827f41e50.npy" +}, +{ +"hash": "170007ed84de83e2df78d96f26dd86b8fafe9d604ca4bc93fc4676e22f8b187f", +"file": "MTT-35-CG-EN-3_170007ed84de.npy" +}, +{ +"hash": "f387fee8a8dab425f8aec70ce8015df2c4b29fe306023792467e4a318c63ede0", +"file": "MTT-35-CG-EN-3_f387fee8a8da.npy" +}, +{ +"hash": "639f78de3ee7573b4af8abd02642cf5ad379bb27f91d6f821cc5e13687974983", +"file": "MTT-35-CG-EN-3_639f78de3ee7.npy" +}, +{ +"hash": "abc1a11884ee7d4b8f8535e148d7f8b8dbd94845b750dc8c4716db05953b6033", +"file": "MTT-35-CG-EN-3_abc1a11884ee.npy" +}, +{ +"hash": "10d780c18fcf76887d2da9dbc76b6ad9e8eaa9928118756cad4d939472e31a1e", +"file": "MTT-35-CG-EN-3_10d780c18fcf.npy" +}, +{ +"hash": "72741b54db8bee79456659a75b158498aaf486f3c4d441773e09a6f4290e190c", +"file": "MTT-35-CG-EN-3_72741b54db8b.npy" +}, +{ +"hash": "54fc0e00fbd6d1e1d80d081fe22795bd47e5025586ee094077c4f77ec511e112", +"file": "MTT-35-CG-EN-3_54fc0e00fbd6.npy" +}, +{ +"hash": "e1e7e935ab8150c3ff70d6921cca130ad78eba59a558c39e523bc9ee530ccc5d", +"file": "MTT-35-CG-EN-3_e1e7e935ab81.npy" +}, +{ +"hash": "a174a3da35c28604a6a456272c00fa2271441b0f80a08eeeedcd4bed7b85e5b9", +"file": "MTT-35-CG-EN-3_a174a3da35c2.npy" +}, +{ +"hash": "0f586eade6466bf97c798d73d741ce7a5cd68e01c71c370b40f3a08266254f4b", +"file": "MTT-35-CG-EN-3_0f586eade646.npy" +}, +{ +"hash": "e72f817642c698d15087d3dff3a8ee691bf28f46c2c90336e82f75cb1ade7c46", +"file": "MTT-35-CG-EN-3_e72f817642c6.npy" +}, +{ +"hash": "6f1bf519a7264e18a0a277832ddd6a65f7797b27971fc1f552310d2fd77cee83", +"file": "MTT-35-CG-EN-3_6f1bf519a726.npy" +}, +{ +"hash": "3795c86aa0381fe088ea638a7bf105ae382e8b73e16c9d4b9e4c31f10a4365e6", +"file": "MTT-35-CG-EN-3_3795c86aa038.npy" +}, +{ +"hash": "4da1b78d645385c1f62f8e38a3af857fa938d350a9e8495cce5921b79c3b5a58", +"file": "MTT-35-CG-EN-3_4da1b78d6453.npy" +}, +{ +"hash": "88442540f322caa28fcbb6fb99a18d5b8ab0488caa05f4a4ed06c246cbe2f70e", +"file": "MTT-35-CG-EN-3_88442540f322.npy" +}, +{ +"hash": "40c4ba389e0005b76903a79c9b92196be6271b9045e2b6379b6de30b1dbff5c0", +"file": "MTT-35-CG-EN-3_40c4ba389e00.npy" +}, +{ +"hash": "789585038f3aad9e3d4558be9235478da52c55f8347a30453d793708c2bb85db", +"file": "MTT-35-CG-EN-3_789585038f3a.npy" +}, +{ +"hash": "4f42fe6a24a8ad7e52aa43d11d1ffc9db95a1fd54157b752f48024ef01ce4a5a", +"file": "MTT-35-CG-EN-3_4f42fe6a24a8.npy" +}, +{ +"hash": "5640960a322b877107e1e375692a6056264d2767272262c09f235720d9c7b0e7", +"file": "MTT-35-CG-EN-3_5640960a322b.npy" +}, +{ +"hash": "15983230d5fb252984534713065e641ea240c7872013626d690aa05a58837d81", +"file": "MTT-35-CG-EN-3_15983230d5fb.npy" +}, +{ +"hash": "80e80fd96ec7f46db670d7b11939a6bece1bf7eb2bbce1d7a64c75e34e826976", +"file": "MTT-35-CG-EN-3_80e80fd96ec7.npy" +}, +{ +"hash": "31d6b2c800a300391c50a486f5118d393fb80187e5cc5f339402fc3329f6874e", +"file": "MTT-35-CG-EN-3_31d6b2c800a3.npy" +}, +{ +"hash": "5740ab4e7a6c2e50f65b9ad171f40dc8092da1016c1e40ce3a74c73233b0533a", +"file": "MTT-35-CG-EN-3_5740ab4e7a6c.npy" +}, +{ +"hash": "6d164d8127b8f60983575d5d53eef2c0944bf72fd408d5a2acd7d07a42e58af2", +"file": "MTT-35-CG-EN-3_6d164d8127b8.npy" +}, +{ +"hash": "db6bc4cddd8d01a8f5b139f0b687b706a4df8e7a5d62357e0ccd8e3a862fc9f3", +"file": "MTT-35-CG-EN-3_db6bc4cddd8d.npy" +}, +{ +"hash": "9ad9883bb88ee70a0f0c802cf19f1964365a6c9b72321d7eba9b182abdacabdb", +"file": "MTT-35-CG-EN-3_9ad9883bb88e.npy" +}, +{ +"hash": "4efe782b837eb49e8e4d81dc451692fa8785beca49a8683bd31789c146557457", +"file": "MTT-35-CG-EN-3_4efe782b837e.npy" +}, +{ +"hash": "f3de246af846083e5d80135835852c8f6f5b28097394c4297571a4cdaaa2e178", +"file": "MTT-35-CG-EN-3_f3de246af846.npy" +}, +{ +"hash": "4bc8586394558607d70e9d0f803a44a178e63bce47025bf0146c7f6759da67e5", +"file": "MTT-35-CG-EN-3_4bc858639455.npy" +}, +{ +"hash": "c489593b665c8872db6cd740fb0b793f577af2c1bd674084fca3fedb226f60ac", +"file": "MTT-35-CG-EN-3_c489593b665c.npy" +}, +{ +"hash": "59b792270b83d92bf73378f5b470bb57a6bcdfb4e35d8a570e45e563a74dbcb9", +"file": "MTT-35-CG-EN-3_59b792270b83.npy" +}, +{ +"hash": "5daad90e2f3ad7f3c9b420aaaca2ebf4458b5f751e2c98e789805480c4525e6d", +"file": "MTT-35-CG-EN-3_5daad90e2f3a.npy" +}, +{ +"hash": "338fd32a70c6bb1e35948b60db595f7c1fc70719833cb85032d9e1357018c6c6", +"file": "MTT-35-CG-EN-3_338fd32a70c6.npy" +}, +{ +"hash": "0ce25d544d056391f34ceaa1af6803a1c77a737232010e4d4cb54a42eee5e238", +"file": "MTT-35-CG-EN-3_0ce25d544d05.npy" +}, +{ +"hash": "c90f462f7f429de43ce9c0c3a43f6fae9bc1583cd45f8aca612e6bc6602f53cd", +"file": "MTT-35-CG-EN-3_c90f462f7f42.npy" +}, +{ +"hash": "4798ee19c81d552b06e2ed76e211026c94e9612abcc408e8e8bb5bc769cf96a1", +"file": "MTT-35-CG-ES-1_4798ee19c81d.npy" +}, +{ +"hash": "56a729d52e9f504f8f4b7479d0315c43bc334a90c9a02af0201bb542beed83ea", +"file": "MTT-35-CG-ES-2_56a729d52e9f.npy" +}, +{ +"hash": "537e80e050c3dffbc9453b48fed1a639a44e8e81ccc61b52b50669a48bc0bef0", +"file": "MTT-35-CG-NO_537e80e050c3.npy" +}, +{ +"hash": "a7b22ea3a50c7dd88b4c913e6c40551f3d715f48ed3f29a6fa283b23751fe345", +"file": "MTT-35-Y-EN-1_a7b22ea3a50c.npy" +}, +{ +"hash": "ad4a422430e67f18729c1d7b863abeec6c3c665196136c79c4db2839c5968ec7", +"file": "MTT-35-Y-EN-1_ad4a422430e6.npy" +}, +{ +"hash": "1f1ef83e2bba9dc01e43744cc4d8324621beb1b258ac002a6edf051298d8efe9", +"file": "MTT-35-Y-EN-1_1f1ef83e2bba.npy" +}, +{ +"hash": "38b27a7c6f33092d6368e1654612131535a6a559f8b1d3ab01d5e4a798ec21bc", +"file": "MTT-35-Y-EN-1_38b27a7c6f33.npy" +}, +{ +"hash": "789e3d0221c8b2321e4539b08972e62cfec991ea5a5c5981aefbaccb16290653", +"file": "MTT-35-Y-EN-1_789e3d0221c8.npy" +}, +{ +"hash": "00a36ee4749e738383e1e4024fe2fa404b96d098c6ec909bc186f43d73dfcafc", +"file": "MTT-35-Y-EN-1_00a36ee4749e.npy" +}, +{ +"hash": "a055c222c4a8adf5b560f7e7fff5c9e8b7c43b62bbcf7db71fb1fabd5feaa385", +"file": "MTT-35-Y-EN-1_a055c222c4a8.npy" +}, +{ +"hash": "e4ab95d8f5ee2caab75f83a75db785b904a34e262d3d2836f7d0e040b3d4d8f2", +"file": "MTT-35-Y-EN-1_e4ab95d8f5ee.npy" +}, +{ +"hash": "dc26994e57757210e220e587a07686dd655fcf9232e6a2fe079ef17540047735", +"file": "MTT-35-Y-EN-1_dc26994e5775.npy" +}, +{ +"hash": "9d8a43aedce6c4f45b0b9a48399c916aa8e710ccec560c9847874fbca0003bb6", +"file": "MTT-35-Y-EN-1_9d8a43aedce6.npy" +}, +{ +"hash": "7272fc238989e485a2acedda58fbef6d0af546ddd5fe4e50304fb5534be39d87", +"file": "MTT-35-Y-EN-1_7272fc238989.npy" +}, +{ +"hash": "c23c31cf19735c5254cbbbfcf7c2cb89a50bf93204afb14b676982cccf10b533", +"file": "MTT-35-Y-EN-1_c23c31cf1973.npy" +}, +{ +"hash": "a3ddad196daa6e1edb321d790e2effc19d264655f31fd85aacfcb975f5d46bdd", +"file": "MTT-35-Y-EN-1_a3ddad196daa.npy" +}, +{ +"hash": "3d67fc34e31e00c01301209a081bd8680448e6073a9846995b068808bc690367", +"file": "MTT-35-Y-EN-1_3d67fc34e31e.npy" +}, +{ +"hash": "673f759b64918546a721e1a453448149f47f0ad083067a0193927377aec7ddc2", +"file": "MTT-35-Y-EN-1_673f759b6491.npy" +}, +{ +"hash": "11bf10295b1ebb7a8a4c095181dd22661dfa7c8c8f2cf147b1bd31dd4418a212", +"file": "MTT-35-Y-EN-1_11bf10295b1e.npy" +}, +{ +"hash": "01bc48f50a4d40f9e9955a25b0b079dc6c779e7f65efc6b2b90111928ccb2e5f", +"file": "MTT-35-Y-EN-1_01bc48f50a4d.npy" +}, +{ +"hash": "9d8580b2de44fb1b21a0cfbeba4064dc07c29a9c7bf70e265a7af5eeecf47de0", +"file": "MTT-35-Y-EN-1_9d8580b2de44.npy" +}, +{ +"hash": "49b862129c007ca0f76f50265f332fe4b12686fa723296e2fc5efbe662b3d00c", +"file": "MTT-35-Y-EN-1_49b862129c00.npy" +}, +{ +"hash": "e1da0a68c78a402c3ac35e5f076f81ee7e196710c4267dbe6fc6e9f8c11384b6", +"file": "MTT-35-Y-EN-1_e1da0a68c78a.npy" +}, +{ +"hash": "fe9b06b15b28b102b5e015e169bde48ea9e552a22ee4de923f42b8efc34e6628", +"file": "MTT-35-Y-EN-1_fe9b06b15b28.npy" +}, +{ +"hash": "4c29d78549dac9cc6e7460aa49e3a0be6fdd457d110d0078ebc0139b8006186d", +"file": "MTT-35-Y-EN-1_4c29d78549da.npy" +}, +{ +"hash": "0481a600042f10f91ee1117766d7dfb5b5312756f9ea90c06133c0ba4fd80e37", +"file": "MTT-35-Y-EN-1_0481a600042f.npy" +}, +{ +"hash": "7c39ee5fb36bda88dc3671cf89998f22411082aa79a43b9fa45a3b8c54d99ed5", +"file": "MTT-35-Y-EN-1_7c39ee5fb36b.npy" +}, +{ +"hash": "123c27f1414029ba95d914d14c86fbee7179a75f95fc3372c4d5930d62850aed", +"file": "MTT-35-Y-EN-1_123c27f14140.npy" +}, +{ +"hash": "8561923798eb9ae3e7a610a3acaac7c519ac56def503949120e1491b5f5eaeef", +"file": "MTT-35-Y-EN-1_8561923798eb.npy" +}, +{ +"hash": "417c3f73dccc7f0312878913d24806ae04b3dbd8ec58b0b27e81724e96a65b99", +"file": "MTT-35-Y-EN-1_417c3f73dccc.npy" +}, +{ +"hash": "8d1daf554f847c2382589b7de874aa6ffcd34f89f0d7abab60b0aee168d55159", +"file": "MTT-35-Y-EN-1_8d1daf554f84.npy" +}, +{ +"hash": "1f3dd4785adc33e1239cd7bab4f29b404738ba824ea35f569746b62f54be34cd", +"file": "MTT-35-Y-EN-1_1f3dd4785adc.npy" +}, +{ +"hash": "985ebbf33edabe1fac25ea0932fea027df707465547f3e28b8cd7b10610a61ee", +"file": "MTT-35-Y-EN-1_985ebbf33eda.npy" +}, +{ +"hash": "054c9651cbd4bf0e7f628ee34a50464a5a9115e1315dcb1f673683444d355332", +"file": "MTT-35-Y-EN-1_054c9651cbd4.npy" +}, +{ +"hash": "0d668d3b9eef2e6723ad9d393863774c8b2fb3f2cc75c822ddff3e993c58449c", +"file": "MTT-35-Y-EN-1_0d668d3b9eef.npy" +}, +{ +"hash": "b21cc2a4bbc95c6160d0088c524de545013e1e58785402d4493f19c6a0a687b4", +"file": "MTT-35-Y-EN-1_b21cc2a4bbc9.npy" +}, +{ +"hash": "e95c73fc963887393edff75e81ce21c798e53d703cbd4148f8e60b18c9aca9bf", +"file": "MTT-35-Y-EN-1_e95c73fc9638.npy" +}, +{ +"hash": "a08e19ba18e101b764ec95004f6667f2dd0cad75a47e214a64f0eac96c83a947", +"file": "MTT-35-Y-EN-1_a08e19ba18e1.npy" +}, +{ +"hash": "03de827e2b4b7a75906aa534a1c3b0283008b9f9de791ca7fde144837cef8d7f", +"file": "MTT-35-Y-EN-2_03de827e2b4b.npy" +}, +{ +"hash": "1849a7c831c85731318126f2a864ec450df9001c5ee7ba46c9f9d4e16b1318da", +"file": "MTT-35-Y-EN-2_1849a7c831c8.npy" +}, +{ +"hash": "a6adb9b3e8babc355e5954ef7f6faa33e6f2da9268fb13c5fb93560924579f33", +"file": "MTT-35-Y-EN-2_a6adb9b3e8ba.npy" +}, +{ +"hash": "b89db902b9598459ad7bccf55409027bb9460301dde1695f60d17b39b8ca4364", +"file": "MTT-35-Y-EN-2_b89db902b959.npy" +}, +{ +"hash": "e282823f82c55700584314575d4d28fa3f8aa433d49aa79a5adcc385a64df18c", +"file": "MTT-35-Y-EN-2_e282823f82c5.npy" +}, +{ +"hash": "dca7c7871809ac91203140b28e12f2f5ba0d31d4e5fae051910ecd041c556a5f", +"file": "MTT-35-Y-EN-2_dca7c7871809.npy" +}, +{ +"hash": "a415447ec6adad0e5b6d7004908a98ed92c9a011c1ed088a95dcd91e1a83bc5a", +"file": "MTT-35-Y-EN-2_a415447ec6ad.npy" +}, +{ +"hash": "e54ff7e3b89a38bdf3736c0c673dc88949ef34879ce1fcc0521e45fe5b863013", +"file": "MTT-35-Y-EN-2_e54ff7e3b89a.npy" +}, +{ +"hash": "e051135f5977519434094fdba67552b5514884025736a020391911ebf23cb26f", +"file": "MTT-35-Y-EN-2_e051135f5977.npy" +}, +{ +"hash": "80e1e550eaf6563262ab5b354448c177fd421d6a906cc8decd7fea233302a9ad", +"file": "MTT-35-Y-EN-2_80e1e550eaf6.npy" +}, +{ +"hash": "eaf5d2644c13e12af79de08eee4e5404c9bfc41025b104e4b98183cf56f72f14", +"file": "MTT-35-Y-EN-2_eaf5d2644c13.npy" +}, +{ +"hash": "4c6b4019f2fe28cb4355950fd3ee8c2a83203cb672647a9dda5a5102fe55a7e7", +"file": "MTT-35-Y-EN-2_4c6b4019f2fe.npy" +}, +{ +"hash": "9657c887dd207d98c8d2628b75719c1f11a3994dab882ecd7ff8bf6df4853bf6", +"file": "MTT-35-Y-EN-2_9657c887dd20.npy" +}, +{ +"hash": "397bb5a69a68c2efc0792efd5c04bbad76d0458837d9e23e3f5b4c36febf07e9", +"file": "MTT-35-Y-EN-2_397bb5a69a68.npy" +}, +{ +"hash": "62c2b65573d4ad03669367d2f54554b1646e9a83ca8b6f9260f26bd44d2f8ff6", +"file": "MTT-35-Y-EN-2_62c2b65573d4.npy" +}, +{ +"hash": "ddfc8e619f934eb1a90941b80311022e2b83c7c3e4700d0bae4c1af78f105ef3", +"file": "MTT-35-Y-EN-2_ddfc8e619f93.npy" +}, +{ +"hash": "f5d94d9d50599b253819ab98a4d9e8d2536caf7e264e39e14a5179b8a4990194", +"file": "MTT-35-Y-EN-2_f5d94d9d5059.npy" +}, +{ +"hash": "a5cf9eecb35617e8ee7ffeb113e4766c5cb1f65e3c22d5ba94efcd6a4fbbfb3a", +"file": "MTT-35-Y-EN-2_a5cf9eecb356.npy" +}, +{ +"hash": "4a9cc7bc63a6914f4f868a9df67abee9343b3ba12878fa86ff53158995c6f131", +"file": "MTT-35-Y-EN-2_4a9cc7bc63a6.npy" +}, +{ +"hash": "6b5e8e137fbef3ae63cba35affc646784241f6bf6697028b35d5307d8f8e5f1b", +"file": "MTT-35-Y-EN-2_6b5e8e137fbe.npy" +}, +{ +"hash": "cb406184a3a7beb2d0c1f58f8484632a4b187f378816f8c3c78a20ae24b66d3f", +"file": "MTT-35-Y-EN-2_cb406184a3a7.npy" +}, +{ +"hash": "af0f17430b0cf0ce12cb0bc7b2acecdf9fc451a4030829a5664a935d18e76de9", +"file": "MTT-35-Y-EN-2_af0f17430b0c.npy" +}, +{ +"hash": "7a748d8d5342628a0d23bf2a675ea45fd0a445eec614ecc1d3675d3c9ce4df45", +"file": "MTT-35-Y-EN-2_7a748d8d5342.npy" +}, +{ +"hash": "da437b310b7c280afb60eb741e906e87aaad455a52da7d3b18d0c5f3699c279c", +"file": "MTT-35-Y-EN-2_da437b310b7c.npy" +}, +{ +"hash": "2fee9e707a529e1a709a49bacbe5eff64e724def28fd8e739af20270cdcaaed5", +"file": "MTT-35-Y-EN-2_2fee9e707a52.npy" +}, +{ +"hash": "8773f5266edb6d835aa20f07b922bc941059fee2c822a92345ba1e147196c32c", +"file": "MTT-35-Y-EN-2_8773f5266edb.npy" +}, +{ +"hash": "ba357bde286c6ad8caafaa2f9b638277bbe0f89865e5a461a95b8c30e1d70a71", +"file": "MTT-35-Y-EN-2_ba357bde286c.npy" +}, +{ +"hash": "f61b4a909a6f8fa705cdd5ff22c332bb772677c0dba799987015204be6368086", +"file": "MTT-35-Y-EN-2_f61b4a909a6f.npy" +}, +{ +"hash": "da0480842b8f506da5fb0b75c43df8418625d5dc6773763a8d286f093c1563ef", +"file": "MTT-35-Y-EN-2_da0480842b8f.npy" +}, +{ +"hash": "f8332e1cf7b9fd55332d6db1b8de648453b46228c45c761a1965db666ba02a17", +"file": "MTT-35-Y-EN-2_f8332e1cf7b9.npy" +}, +{ +"hash": "8a669da657b225b973adbc08fcba8970b91c33eafe57b606575fbb39a18fb998", +"file": "MTT-35-Y-EN-2_8a669da657b2.npy" +}, +{ +"hash": "7bd9fd24d6603a20b2fccfb2d89c798c22eab3626ceb05f5d86a481bc87127eb", +"file": "MTT-35-Y-EN-2_7bd9fd24d660.npy" +}, +{ +"hash": "6cc25e4a01923075f8b59ee950d9c97152652dd7ba30a65f1ce2a4122883b7c3", +"file": "MTT-35-Y-EN-2_6cc25e4a0192.npy" +}, +{ +"hash": "3735b94ef7fa5d4dca478accef182ad765813b2746310bbcfa2d2a9b4279f8fe", +"file": "MTT-35-Y-EN-2_3735b94ef7fa.npy" +}, +{ +"hash": "b825104c03bf637aeea9f61afa618daadf328a08e2450e0db809511283c42f61", +"file": "MTT-35-Y-EN-2_b825104c03bf.npy" +}, +{ +"hash": "91302371a0fc31d7111f1f2ac01c8efb84b10b751c121cc375e417dee268de36", +"file": "MTT-35-Y-ES-1_91302371a0fc.npy" +}, +{ +"hash": "94bc704203292cc3820c8a0bfadc15b41ae31324a2a854b45ebe3442e90fa064", +"file": "MTT-35-Y-ES-2_94bc70420329.npy" +}, +{ +"hash": "bb20f79c1a755e88af68427428e714eeb27a3bd6c0b1d06134e45ada767709a3", +"file": "MTT-35-Y-NO_bb20f79c1a75.npy" +}, +{ +"hash": "04574df5b5db3036da1964ac5c791fd791ab957d953d6d4108e3fc21c9ffb093", +"file": "PHQ-9-A-EN_04574df5b5db.npy" +}, +{ +"hash": "d5b68496f7a8b1595e23724d5de695e7228e193eaa90dd47dde1a977f244a3ee", +"file": "PHQ-9-A-EN_d5b68496f7a8.npy" +}, +{ +"hash": "dc7e45bea5601a241e388898b3dc984f886dbbdc76cb888a5f3c21c9e786fd1a", +"file": "PHQ-9-A-EN_dc7e45bea560.npy" +}, +{ +"hash": "57cd9c0dd39da699cd922362891fea62ed2d6564f7379caa884aea68eaf5db95", +"file": "PHQ-9-A-EN_57cd9c0dd39d.npy" +}, +{ +"hash": "35c59076a584b5f378c41b2808d0a39314488f4c128a30bfe023129250da1f6d", +"file": "PHQ-9-A-EN_35c59076a584.npy" +}, +{ +"hash": "40c4ffe9db3d5bed152c61d842132d36af2577d16f0c9d6fa87d5441429b4e4b", +"file": "PHQ-9-A-EN_40c4ffe9db3d.npy" +}, +{ +"hash": "80d90731750a81dda27fc8e3481d764f152bdffc75140223796fdd75e77858b1", +"file": "PHQ-9-A-EN_80d90731750a.npy" +}, +{ +"hash": "a61696e3feb96210c07f5b17a3301585817ccc0bfe0dad5fcbf0602716673588", +"file": "PHQ-9-A-EN_a61696e3feb9.npy" +}, +{ +"hash": "c6f101bd6da00510e71b236d37729c36bc8a9060e57a788d7d13d4bfce0dd31a", +"file": "PHQ-9-A-EN_c6f101bd6da0.npy" +}, +{ +"hash": "e4df8a090c0c98fd6a6dcda923f7bc2a4014e0487e48e2703285bedcfc6e5638", +"file": "RCADS-25-CG-AR_e4df8a090c0c.npy" +}, +{ +"hash": "10093e62801f53674facdb60b7be631cdef102c109cc520f186216f2e08cba21", +"file": "RCADS-25-CG-BN_10093e62801f.npy" +}, +{ +"hash": "75d5cd6d7f6c3a369cfbc8e053bea55ca8602693c88b7c693662d61f55b6e5a7", +"file": "RCADS-25-CG-CH-HANS_75d5cd6d7f6c.npy" +}, +{ +"hash": "2e091da4349b68e95a43d384d18ad94b12d10197714ad8a0ab466886a34c539d", +"file": "RCADS-25-CG-DA_2e091da4349b.npy" +}, +{ +"hash": "ca3860cf83dfa27596bd429148aa36c2e2248d146b4f81aa309a02204bfede73", +"file": "RCADS-25-CG-DE_ca3860cf83df.npy" +}, +{ +"hash": "55f580f5d084e3da2cc014d90d15bfa88304c809900a51fbdb3f7ebe5f7fb767", +"file": "RCADS-25-CG-EL_55f580f5d084.npy" +}, +{ +"hash": "ad65c300a4b557d228f3f373b033a043fa71bf1c0496e8acff6ab4797e39c9b6", +"file": "RCADS-25-CG-EN_ad65c300a4b5.npy" +}, +{ +"hash": "374979d50bf8ba73257da88d1a165860a6a17d9edc6251b47ad30fbd58a7a997", +"file": "RCADS-25-CG-EN_374979d50bf8.npy" +}, +{ +"hash": "43643b6a456e7351f96eead73cc5c413fae8ff500eac24969f55a743fbcf493e", +"file": "RCADS-25-CG-EN_43643b6a456e.npy" +}, +{ +"hash": "dd439177706cc889052847d2c2322b5dfcb58ae49b616b22b54df069c9c19db6", +"file": "RCADS-25-CG-EN_dd439177706c.npy" +}, +{ +"hash": "490f75b214c0102d26d86a05f3f355229242a6a5bc5c5303e05519a7ddc5e25f", +"file": "RCADS-25-CG-EN_490f75b214c0.npy" +}, +{ +"hash": "4e0958a522ef87f497a326f456081125d2f1679b31dbdad7a9ab9395c888cf86", +"file": "RCADS-25-CG-EN_4e0958a522ef.npy" +}, +{ +"hash": "c5e473c8a9ae5b2cd1913d78b8681fb50fa0d2f54b8ca8086363d9594e1e3f28", +"file": "RCADS-25-CG-EN_c5e473c8a9ae.npy" +}, +{ +"hash": "d51ec6766c3dd37555a1e53c8623f49c97171dbe6bb1b82c5e2cfdb29ca0ae4a", +"file": "RCADS-25-CG-EN_d51ec6766c3d.npy" +}, +{ +"hash": "bdb78de183acb4bd343bcd60a2b0f8ba71eb1d3f95457ee652f1dddc86826b24", +"file": "RCADS-25-CG-EN_bdb78de183ac.npy" +}, +{ +"hash": "4a0788a75953549dde9972e733a081cafabc6211e95ddb98ae0801d4b656deca", +"file": "RCADS-25-CG-EN_4a0788a75953.npy" +}, +{ +"hash": "dfba1136f724e58993069e6ce024ac3f65ff9f92f9f5dc4e6f8d3ec0124fb855", +"file": "RCADS-25-CG-EN_dfba1136f724.npy" +}, +{ +"hash": "e4dfc09fbb39629f219e31ddebd8ba40db499c2d4ba118a7a1e3421daf14db43", +"file": "RCADS-25-CG-EN_e4dfc09fbb39.npy" +}, +{ +"hash": "e887f0c21bdbf76b708aacc81fb3080972a143dec63780b74b222004fccc130d", +"file": "RCADS-25-CG-EN_e887f0c21bdb.npy" +}, +{ +"hash": "946f2342b9dbc26225bf466e46bdcd865bd70f85ad1a57a37be99c5cd58384c7", +"file": "RCADS-25-CG-EN_946f2342b9db.npy" +}, +{ +"hash": "03040ad9acf75a90b83b366c420f6019845a14b3208bd96f5091bd11c0b74e06", +"file": "RCADS-25-CG-EN_03040ad9acf7.npy" +}, +{ +"hash": "8addaaccb34061c0ed85fe5d44c900b264a02011e2085ebb05ae8542d77ac052", +"file": "RCADS-25-CG-EN_8addaaccb340.npy" +}, +{ +"hash": "dad9f41cbb798668eb8a41ac819f8b047ee96aac750313945c7aedecdebdee14", +"file": "RCADS-25-CG-EN_dad9f41cbb79.npy" +}, +{ +"hash": "36a975e39be1b77175c1b06ea7d30366ee4de3fc0da9702f780ec9ee51685b53", +"file": "RCADS-25-CG-EN_36a975e39be1.npy" +}, +{ +"hash": "b3313ee077b986fbed7ebf28bdc33a225d388c0d3439450ccb3ff2215ce37c25", +"file": "RCADS-25-CG-EN_b3313ee077b9.npy" +}, +{ +"hash": "b44965493b340e709c2ced410b44e5c013a7390e0d3246b32354973c61d06ff8", +"file": "RCADS-25-CG-EN_b44965493b34.npy" +}, +{ +"hash": "97f94ac8db015e4d1de62532983d72c2348f6c165a909c69f32ec542796b905a", +"file": "RCADS-25-CG-EN_97f94ac8db01.npy" +}, +{ +"hash": "9b19f9a1b8574a36dd65485fd59323fe6c87146d3d0630f4c589be869f52acf4", +"file": "RCADS-25-CG-EN_9b19f9a1b857.npy" +}, +{ +"hash": "4a13939be2710c8bb4fe98d118948db3c57d33dbfeb18983dc18d6f32d16b958", +"file": "RCADS-25-CG-EN_4a13939be271.npy" +}, +{ +"hash": "77c0a11a131f5079ccbce6030d833877b3da87260fffdc1fed213bd1467606c3", +"file": "RCADS-25-CG-EN_77c0a11a131f.npy" +}, +{ +"hash": "148ed3b296580babf1d4bc9a6558879844a2358911658ff2605e279ab5d8aab8", +"file": "RCADS-25-CG-EN_148ed3b29658.npy" +}, +{ +"hash": "bbe2f667e76feb5ff4d8a2b2e88164efc19c2923e4a62ba90f4d7cdd11a924da", +"file": "RCADS-25-CG-EN-2_bbe2f667e76f.npy" +}, +{ +"hash": "c343c52fe07d72a935aadc280b1fffcf5c90aeb51c012e508acdbf8645a548d1", +"file": "RCADS-25-CG-EN-2_c343c52fe07d.npy" +}, +{ +"hash": "74f359a1c2b461f40d9a4ef5d947eaa4e52976f93d0ceb99f7988afaafdbecdb", +"file": "RCADS-25-CG-EN-2_74f359a1c2b4.npy" +}, +{ +"hash": "e2ebb43fa8a6c246f43b582ff92c8f6415202fe6a79e08e167e3e7fe9864f700", +"file": "RCADS-25-CG-EN-2_e2ebb43fa8a6.npy" +}, +{ +"hash": "cc2eebaea3ac19f9c9abed13a138ab1ce2fa319a7b8404ce752c9774c596a7d1", +"file": "RCADS-25-CG-EN-2_cc2eebaea3ac.npy" +}, +{ +"hash": "468d1a69efb585f52aaa07cd3c476d05cb41eb27004a08f6bcbeaf72f18b206d", +"file": "RCADS-25-CG-EN-2_468d1a69efb5.npy" +}, +{ +"hash": "fddba36048d6a296123c75efdfbf6dd344b7520f03c8d9ec3524b2802e4a6f15", +"file": "RCADS-25-CG-EN-2_fddba36048d6.npy" +}, +{ +"hash": "7c6054f371c24a593012b437a8013dd9710786bc2fd5172e0cf56610ed9a9762", +"file": "RCADS-25-CG-EN-2_7c6054f371c2.npy" +}, +{ +"hash": "e7da73708d0f36e861ecb28aab9bafe6b30d0dd349ca955ee6fb181607740f51", +"file": "RCADS-25-CG-EN-2_e7da73708d0f.npy" +}, +{ +"hash": "b351f4162395c3d9914007c1d6628ed186b77f344802eff5ae18d7343d4d4da7", +"file": "RCADS-25-CG-EN-2_b351f4162395.npy" +}, +{ +"hash": "8c43cd202e1c5dce586ff8faa9b7aafd123516af41db48657766347800ccd3f7", +"file": "RCADS-25-CG-EN-2_8c43cd202e1c.npy" +}, +{ +"hash": "e85775737c6ba01cfd93ef5a2b740411de1766734a3ccca16ef4c2cfd3373ca4", +"file": "RCADS-25-CG-EN-2_e85775737c6b.npy" +}, +{ +"hash": "cb7d97132ba71a63dcada8ebe25856c68c0fe6241e48090168efc062f9c68f4e", +"file": "RCADS-25-CG-EN-2_cb7d97132ba7.npy" +}, +{ +"hash": "5e564b4998f865bb664e2a3af272f3ce75d8ab85305ce27bf51ecbf0d7adc5ff", +"file": "RCADS-25-CG-EN-2_5e564b4998f8.npy" +}, +{ +"hash": "0c7211ba3297f3bc2fe6a60343fddf1b6824853eb38b7860d30dbed49bb094f7", +"file": "RCADS-25-CG-EN-2_0c7211ba3297.npy" +}, +{ +"hash": "dceded53342cb6458c1f0c62ec87b06851cf8db8c7b174c5e0195c7c04abc44c", +"file": "RCADS-25-CG-EN-2_dceded53342c.npy" +}, +{ +"hash": "0f8154c95d64c74f3ad152610579973270198993b7c5216dc04da669d3752e55", +"file": "RCADS-25-CG-EN-2_0f8154c95d64.npy" +}, +{ +"hash": "9f6a3a6dd126d23e9567a30cd7e7275da6b75184a25f9d8a8b5ef88c4a4dd0ff", +"file": "RCADS-25-CG-ES_9f6a3a6dd126.npy" +}, +{ +"hash": "066c690bfe85c7aa4d54f7eba710948841034c3a512bc81521ac634b55f4f569", +"file": "RCADS-25-CG-ET_066c690bfe85.npy" +}, +{ +"hash": "b2f027115e490a48849c7adaad0265bda58a39b9c2762aedc4a7af1cfad8924c", +"file": "RCADS-25-CG-FA_b2f027115e49.npy" +}, +{ +"hash": "d89eb2b0a081f89be03f8f7f125c57d4dab6ae36415fabfd352d37a81ab2dfa4", +"file": "RCADS-25-CG-FI_d89eb2b0a081.npy" +}, +{ +"hash": "058cbf46de8295a023fb10aff217602cb5d9e6f8515e83ad5dd428629c6fcde8", +"file": "RCADS-25-CG-FR_058cbf46de82.npy" +}, +{ +"hash": "a9473e50ae2ab1fa8ec0d6f6480e87101e5f463af3484a4a1230cf21926a77c1", +"file": "RCADS-25-CG-FR-CA-1_a9473e50ae2a.npy" +}, +{ +"hash": "d4c6653482cb15980af1344c859fb122e1ede93820557d3c542315f8d0de5c07", +"file": "RCADS-25-CG-FR-FR-1_d4c6653482cb.npy" +}, +{ +"hash": "4c4cb9cf2a0a990483f77dd3198b383cb02e2e88794f796beca20b85b77c9336", +"file": "RCADS-25-CG-HI_4c4cb9cf2a0a.npy" +}, +{ +"hash": "ac5d330d4dee51a4283d7ed6247ec22e4cce8e7ad30b42c10ad8b726e2cdf3fe", +"file": "RCADS-25-CG-HU_ac5d330d4dee.npy" +}, +{ +"hash": "be268607cc0f6f5f24b6e55dd9824aeffabcaccf91912ac0f9450364cb6bfbf0", +"file": "RCADS-25-CG-IS_be268607cc0f.npy" +}, +{ +"hash": "18504834aefa49cb8717ba223f011bd3db33347a9dd5d0694314ff65f716eb7c", +"file": "RCADS-25-CG-IT_18504834aefa.npy" +}, +{ +"hash": "7ad47a366399d6f1d87646a5d9982e5154c907ce8e16f0614cd6ce6077be40d7", +"file": "RCADS-25-CG-JA_7ad47a366399.npy" +}, +{ +"hash": "10d8adc2fe4add4a3f90b7b88ff3a9e3d05735c9387b5098de913b392b8c8423", +"file": "RCADS-25-CG-KO_10d8adc2fe4a.npy" +}, +{ +"hash": "663e5c88560fde7eb4f4f0d3a79a1e4dec10c02f09442ac7f958e67c26d2e8f7", +"file": "RCADS-25-CG-LT_663e5c88560f.npy" +}, +{ +"hash": "99f8a78043f696ade5f1adc7123ad954c1f67ba455dac4dbf77831f417080d8a", +"file": "RCADS-25-CG-MN_99f8a78043f6.npy" +}, +{ +"hash": "d0c7cf3b854ecce72e2c9afd1ce2c1baa000a341c087701139e67eb4a772c620", +"file": "RCADS-25-CG-MR_d0c7cf3b854e.npy" +}, +{ +"hash": "aaa0241ecf57abb1d5847304d67fd2f3f309b9139624b1d3524be58424e60e04", +"file": "RCADS-25-CG-MS_aaa0241ecf57.npy" +}, +{ +"hash": "f9737ae7926e188a63efe087d8ffe95777fd729343f3836d067281c9ff5dc2d8", +"file": "RCADS-25-CG-NL_f9737ae7926e.npy" +}, +{ +"hash": "ac3dc3776efc341aaf73652e2b1c908d628cbc4e4db6091368be9deeb9d69489", +"file": "RCADS-25-CG-NO_ac3dc3776efc.npy" +}, +{ +"hash": "9494a6f2a4757cf0ab63cde0415b319f61709d1609c9c9fc60d23516baea39df", +"file": "RCADS-25-CG-NY_9494a6f2a475.npy" +}, +{ +"hash": "afcd67540a475fce6c531c437d762deecc98e95d2c76f879a301695eff2a4d70", +"file": "RCADS-25-CG-PA_afcd67540a47.npy" +}, +{ +"hash": "066c930676b9d34b537750105d2b14a69ecb6de8a69b9f110eab3a4c0ed71bbc", +"file": "RCADS-25-CG-PL_066c930676b9.npy" +}, +{ +"hash": "afd02f61e26e5f50ecf7322985ec4d8dc1772cfc38bf1ab7e878ab71df1de328", +"file": "RCADS-25-CG-PT_afd02f61e26e.npy" +}, +{ +"hash": "cbaf026011137fc3a28927855835fe924b561274806eb334e6ae999f75f851a0", +"file": "RCADS-25-CG-SL_cbaf02601113.npy" +}, +{ +"hash": "5df96c72be6f1ff39ba0c9ea60a1fae96176d3db3ec5272440148e1cc102516a", +"file": "RCADS-25-CG-SR_5df96c72be6f.npy" +}, +{ +"hash": "64e998fc6358b8c76659e43ffb786baa0b58f7cdb4ee32133104b5cac5b47a8f", +"file": "RCADS-25-CG-SV_64e998fc6358.npy" +}, +{ +"hash": "28271cb68c6abe8e4fc2c849f2e1e9532c846ab8ada1895e14fec8b1da3e770f", +"file": "RCADS-25-CG-TR_28271cb68c6a.npy" +}, +{ +"hash": "425a44af0d2d4427e7528cec439dfe7ea1ed2c6073bde70b2710d4e7887c3197", +"file": "RCADS-25-CG-UR_425a44af0d2d.npy" +}, +{ +"hash": "6ccec4d5d94f799498b735a8408d1414f679e7acc3c003237e0e9ed623506c67", +"file": "RCADS-25-CG-VI_6ccec4d5d94f.npy" +}, +{ +"hash": "991a730c0061a46df7a1ea18462fcdf488fd0fea52569d419eec02dab9010e83", +"file": "RCADS-25-CG-ZH-HANS_991a730c0061.npy" +}, +{ +"hash": "8c1ab2274d57ad9104664ee5bd1aab9660a226406235cb758940960f9f8f05fa", +"file": "RCADS-25-CG-ZH-HANT_8c1ab2274d57.npy" +}, +{ +"hash": "b3f3b5bcdd336f7720c1ec9d7514fb16539fb8f5c1061c7b3db2b5260cdd6268", +"file": "RCADS-25-CG-ZU_b3f3b5bcdd33.npy" +}, +{ +"hash": "0bebe08b85b5069d9b6a425c6ab5cd27d7ae8dfab851edc5fc34fc43799963c8", +"file": "RCADS-25-Y-AR_0bebe08b85b5.npy" +}, +{ +"hash": "14d1348d7409e038ffe7cfa86602786c93a56b8bfcf2bd9b591af8d664437076", +"file": "RCADS-25-Y-BN_14d1348d7409.npy" +}, +{ +"hash": "7b37bf4e781f796cef4a01e205b0f9e0302cdd545cdbaf4d689b068ebc8ab48b", +"file": "RCADS-25-Y-CH-HANS_7b37bf4e781f.npy" +}, +{ +"hash": "e7c8e277542fd459745cfa507ad00d698e2de3510898f0e640e6b6f315cb598b", +"file": "RCADS-25-Y-DA_e7c8e277542f.npy" +}, +{ +"hash": "9ed218916d5ba51177f981e5b76e1546d2a091bf67773e5dd197ff0edad07131", +"file": "RCADS-25-Y-DE_9ed218916d5b.npy" +}, +{ +"hash": "a66f80548b0a118d099d337bf45e064651e4bfed46e183dc3bc57d84a8ef9dc2", +"file": "RCADS-25-Y-EL_a66f80548b0a.npy" +}, +{ +"hash": "8610b49c710b7ff53b57f01d989d7b2f179a312ed63c9823b6ccc86853796184", +"file": "RCADS-25-Y-EN_8610b49c710b.npy" +}, +{ +"hash": "44547512a7df80b50ad002530baea83f5874e0a101b0f11826bba9a7891c5b96", +"file": "RCADS-25-Y-EN_44547512a7df.npy" +}, +{ +"hash": "71bc9cb7054fffad47b93e55f582e6f92d60b36f5477a6508fff5c5559bf6b54", +"file": "RCADS-25-Y-EN_71bc9cb7054f.npy" +}, +{ +"hash": "8745c58e2f21df4ffe1b9894a58f32554e52010324d274926474c12535ff818a", +"file": "RCADS-25-Y-EN_8745c58e2f21.npy" +}, +{ +"hash": "1fe26ff07e2fca93f0506a5211dc225e2659124520f37848c80af0ae4a1dec84", +"file": "RCADS-25-Y-EN_1fe26ff07e2f.npy" +}, +{ +"hash": "877f9a81b4865c8ac8c93ebb06fc57a208eb9c187ea792132e3a745bd83d25bb", +"file": "RCADS-25-Y-EN_877f9a81b486.npy" +}, +{ +"hash": "d5844ed769874141f3c3b4abddf8bcd7f778bf279f6b4916d071ba2099ab6cf2", +"file": "RCADS-25-Y-EN_d5844ed76987.npy" +}, +{ +"hash": "f3a4dd5c9acb12b66095a64c61d5e03210e7ae7b645165dfd94fa30c6d44008a", +"file": "RCADS-25-Y-EN_f3a4dd5c9acb.npy" +}, +{ +"hash": "af36924e25cdbecd010c708e6def58f3c7e0995033220f191766bacad71e0a6c", +"file": "RCADS-25-Y-EN_af36924e25cd.npy" +}, +{ +"hash": "70ca50778ab6977f118ed300d8d57a8bd4e6b78320edfa703d1ea42e3b13944c", +"file": "RCADS-25-Y-EN_70ca50778ab6.npy" +}, +{ +"hash": "ad3f05970d418b779ac13b63f7fa16cba7b2a5a051a31ed8a2e1e64228d495e3", +"file": "RCADS-25-Y-EN_ad3f05970d41.npy" +}, +{ +"hash": "84520f419004ad7060adcfb105f6fdc9787b728a6160fd7b7668458a922ce2f4", +"file": "RCADS-25-Y-EN_84520f419004.npy" +}, +{ +"hash": "763f982392a00e21949c6dd667d491550e12e565392ec9afbb5e0ec9923c7dbc", +"file": "RCADS-25-Y-EN_763f982392a0.npy" +}, +{ +"hash": "f7b9ce920a840bbd34f09bac97d9e7aeb4348641b1f1f08feca3fd44aab001a8", +"file": "RCADS-25-Y-EN_f7b9ce920a84.npy" +}, +{ +"hash": "9c17e3ba6f6b230a4dfb1f63f2ddaef167e721730bfed927f4e294d6f02303c2", +"file": "RCADS-25-Y-EN_9c17e3ba6f6b.npy" +}, +{ +"hash": "00d23abbabd906cc3c0b602847658ff9e7068fb9c4c5d40b6183789b8fdbcfb3", +"file": "RCADS-25-Y-EN_00d23abbabd9.npy" +}, +{ +"hash": "108b1e17d1a53f980f7ebbfa032a26019c27ea1658793d20b1468f0c7c3a1ae7", +"file": "RCADS-25-Y-EN_108b1e17d1a5.npy" +}, +{ +"hash": "55d5d9a04337c2168aa00aa67a18918f7b48f247aad57e8249ba129ac190391d", +"file": "RCADS-25-Y-EN_55d5d9a04337.npy" +}, +{ +"hash": "fb8e20f5ad723ccc1bbe47461a8e11747840eb0079c298d2a6d747f801d90184", +"file": "RCADS-25-Y-EN_fb8e20f5ad72.npy" +}, +{ +"hash": "6f4b7d6313ef4ae3d81f13996ca329da360dc150c27a463f029e0d7866ba9e0d", +"file": "RCADS-25-Y-EN_6f4b7d6313ef.npy" +}, +{ +"hash": "37893fdb3e128db2a337d1cbabf57fc98785112d8c4bf057cbbc6b0851c24836", +"file": "RCADS-25-Y-EN_37893fdb3e12.npy" +}, +{ +"hash": "806f29801e55b9b400c56ef180a2e51843ab0e7b8f7ecc792b0672f91cff0d12", +"file": "RCADS-25-Y-EN_806f29801e55.npy" +}, +{ +"hash": "8e750e4a8d2edf2c07baccea0a5c9cb695a0744c92596975b3517c62402c2f75", +"file": "RCADS-25-Y-EN_8e750e4a8d2e.npy" +}, +{ +"hash": "25b60b5da019dde2e6c0beb9e35cac55dda945216702b4b78add18693c319786", +"file": "RCADS-25-Y-EN_25b60b5da019.npy" +}, +{ +"hash": "2b25a308b639afdad6efdcf25aa8695a67b588c5c1d2c7866b0d1bba2bc09fde", +"file": "RCADS-25-Y-EN_2b25a308b639.npy" +}, +{ +"hash": "7205f1fd9df000fa0eba09129381326b51eec269a79aff0611335762dc362aa6", +"file": "RCADS-25-Y-ES_7205f1fd9df0.npy" +}, +{ +"hash": "6b34e9e4b8bf44e6b306310a7526569fe52e18cc7d51d890d85e17adb339356d", +"file": "RCADS-25-Y-ET_6b34e9e4b8bf.npy" +}, +{ +"hash": "79383ca24a9f7d1f11f0bf8ff9122c7f5cbd5ec5e83302f0f63b6651898d6d06", +"file": "RCADS-25-Y-FA_79383ca24a9f.npy" +}, +{ +"hash": "ae59b45567d6ffeabca3378893a7132ba6db929fdcf1da60bb91c19589739a77", +"file": "RCADS-25-Y-FI_ae59b45567d6.npy" +}, +{ +"hash": "a3712e0fd310e5ac7c83d28e910ba26b396064f20be2b8dedbc9db2086ba5e32", +"file": "RCADS-25-Y-FR_a3712e0fd310.npy" +}, +{ +"hash": "1d9676b39dc3079c050497011c1f69281001b3cec14af82e45cd515c334472a7", +"file": "RCADS-25-Y-FR-CA-1_1d9676b39dc3.npy" +}, +{ +"hash": "b463a586d896aabff12bceab7ad54e40ff379aa4e0432719c3109b3821acca2a", +"file": "RCADS-25-Y-FR-CA-2_b463a586d896.npy" +}, +{ +"hash": "efc6703187009d932f4ca8e560c96c42174fd7d91cc45ebff98031aba8b0a09b", +"file": "RCADS-25-Y-FR-FR-1_efc670318700.npy" +}, +{ +"hash": "72782fe8e66f569945cef5557e80d71b58715c619b37e7787cbfc01e961c8c8c", +"file": "RCADS-25-Y-FR-FR-2_72782fe8e66f.npy" +}, +{ +"hash": "b62f945c6be60cdd15cfd39a38949ec4511a11aecba2b0ba71311d08f79b41c0", +"file": "RCADS-25-Y-HI-1_b62f945c6be6.npy" +}, +{ +"hash": "a0a69dade72fe3869884c15128300e3873ca814a2ed8db57da7ea37d9cfe329c", +"file": "RCADS-25-Y-HI-2_a0a69dade72f.npy" +}, +{ +"hash": "3825710c77b586c5b6c91d32f78dd3a26a46ecc36d37ca8a8537208da649e69b", +"file": "RCADS-25-Y-HU_3825710c77b5.npy" +}, +{ +"hash": "a50d8a55a167f075068c401f6572df274837a21046f695c05ba7380b11918adb", +"file": "RCADS-25-Y-IS_a50d8a55a167.npy" +}, +{ +"hash": "0ece51d815147ad97e3759c4043b9751e416165dc114ae2109c3beee8ca6ce3e", +"file": "RCADS-25-Y-IT_0ece51d81514.npy" +}, +{ +"hash": "24a46c0db82e054c6db76d5c4a9f5f8838a9685e2b6355f2e943b9e7f1b78ee4", +"file": "RCADS-25-Y-JA_24a46c0db82e.npy" +}, +{ +"hash": "452a3ac87f5d1ed8edb3ba32f00444f859da154704f9553e91c7edb9df9d6ec0", +"file": "RCADS-25-Y-KO_452a3ac87f5d.npy" +}, +{ +"hash": "03e82eddff749f22294e5d242e91c2d2fe4bfd37195e92cc879155f6e8c7aad5", +"file": "RCADS-25-Y-LT_03e82eddff74.npy" +}, +{ +"hash": "c907f1f6bef56a77b9b4d9ad6d52d02ad8b08c9e45738090d560d16dd1fd8f51", +"file": "RCADS-25-Y-MN_c907f1f6bef5.npy" +}, +{ +"hash": "abaedaa650efd1d2aae474036619a164b6cdc4e767d4bfebaecfb3cfc4000716", +"file": "RCADS-25-Y-MR_abaedaa650ef.npy" +}, +{ +"hash": "bcfd0164b7779e7b12299c926349507ea5dac84c53814201d70c31b14b2486c9", +"file": "RCADS-25-Y-MS_bcfd0164b777.npy" +}, +{ +"hash": "ca55aa58f44814f6e33ba196ff18f17e269007c2cb00c449d74ea5b4a4020744", +"file": "RCADS-25-Y-NL_ca55aa58f448.npy" +}, +{ +"hash": "563b86301e558b623fdc6ce746c0edfe9aa4a15d9419923b67ce53ce3c0355fc", +"file": "RCADS-25-Y-NO_563b86301e55.npy" +}, +{ +"hash": "f688640b7e28cf8bff1b0ad72acad89f5b1c4eb60a709f0c9946a4b57d075542", +"file": "RCADS-25-Y-NY-1_f688640b7e28.npy" +}, +{ +"hash": "b87bac621693cdafb2f1de286d6a1a8c850fe89955afa26dd8f3cfe916dfed2d", +"file": "RCADS-25-Y-NY-2_b87bac621693.npy" +}, +{ +"hash": "3c916e0b96f3b9b77b96b01f6d7c569d20b751acab3ec6a509f5c11c2892b9da", +"file": "RCADS-25-Y-PA_3c916e0b96f3.npy" +}, +{ +"hash": "660d9b2cfad4b0e8b9a567c8cfbb9ad5422cfb50fa4326a8333af626dbc1c737", +"file": "RCADS-25-Y-PL_660d9b2cfad4.npy" +}, +{ +"hash": "f36a0f4aca6ee4883fbbf850fa7bc910fb7e49bfd58d8f019686f84288540b4a", +"file": "RCADS-25-Y-PT_f36a0f4aca6e.npy" +}, +{ +"hash": "477bf02b9e609914781a462f6fafa1a090065853ebf7452b38785d94b034eebb", +"file": "RCADS-25-Y-PT-BR_477bf02b9e60.npy" +}, +{ +"hash": "e6f57bc8213a20c59ab0fdf61cbe65dc6fecbf17401cc7c99f0ef7ae23a3273d", +"file": "RCADS-25-Y-SL_e6f57bc8213a.npy" +}, +{ +"hash": "52a6ac572930d22b5c25c082fe4df0da4bf6c15f7db49956bda18280a48dcb68", +"file": "RCADS-25-Y-SR_52a6ac572930.npy" +}, +{ +"hash": "98f3dc282c06f6d21b85a48d13641fa79e50f367e5c59c1e1e668af7c0b1ae79", +"file": "RCADS-25-Y-SV_98f3dc282c06.npy" +}, +{ +"hash": "1910bc343a0ee546c9c7c10e5660a4fa2b0e742eff7c8120f29035c718756f0e", +"file": "RCADS-25-Y-TR_1910bc343a0e.npy" +}, +{ +"hash": "d4f17702c148e43c252daafd13f40d90572fa8027e3cfa02ebfe080570abf9e7", +"file": "RCADS-25-Y-UR_d4f17702c148.npy" +}, +{ +"hash": "c7c2de002a603e26bc1bf39006b99ba38ee3dfa20b7f258c45e123aac882c5e6", +"file": "RCADS-25-Y-VI_c7c2de002a60.npy" +}, +{ +"hash": "0ce25f8107459b4faf8244a968a71374d5cc0a3faad7cde6361e9af10e6f0f73", +"file": "RCADS-25-Y-ZH-HANS_0ce25f810745.npy" +}, +{ +"hash": "6f967b92a9c4278ea4ff59d5821945a582fbf5f6f28411500fdfa4aa7f1e8d5a", +"file": "RCADS-25-Y-ZH-HANT_6f967b92a9c4.npy" +}, +{ +"hash": "fd40bd9dc0a47e9e821366a761155b16da50d991dae2dc85d100354ad407ee68", +"file": "RCADS-25-Y-ZU_fd40bd9dc0a4.npy" +}, +{ +"hash": "f9ec5f0155685013f1b74e8d864b97d196eaebf0363198c1feadd9de4fddefa8", +"file": "RCADS-35-Y-EN_f9ec5f015568.npy" +}, +{ +"hash": "3793972b4d058611390db89a5241c1cd41303b7b43df5ac07de37b776495fb3b", +"file": "RCADS-35-Y-SW_3793972b4d05.npy" +}, +{ +"hash": "fe928b8357a417013e4b7d31205a697872af02d817ebf8e5a66aa39ab227e861", +"file": "RCADS-47-CG-AR_fe928b8357a4.npy" +}, +{ +"hash": "ae0def83f058dddeea3a34f8c2246266e5324f8b4a5bb50ef15e1eeead5ab47e", +"file": "RCADS-47-CG-BN_ae0def83f058.npy" +}, +{ +"hash": "6a519e20304f8a17c97e10357e2281d17c7c6c1e3448fe7774b43105fa419ca7", +"file": "RCADS-47-CG-CH-HANS_6a519e20304f.npy" +}, +{ +"hash": "3c8d78d3318448bd33f76729f630744ec1cba246714fce4ea14d118f76b67298", +"file": "RCADS-47-CG-DA_3c8d78d33184.npy" +}, +{ +"hash": "e69d394aaf570e3401fedfc746faa186f5828a1116b7501494f7b4fdb9fb14e9", +"file": "RCADS-47-CG-DE_e69d394aaf57.npy" +}, +{ +"hash": "c73cf5a567507c78ae8632338deacbf6cd2ce75fce7c6429aaa8a8d6fac7930e", +"file": "RCADS-47-CG-EL_c73cf5a56750.npy" +}, +{ +"hash": "dc7198166d36df3af0d32bc30d20d498ea08989efb12273b958c4f438facf667", +"file": "RCADS-47-CG-EN_dc7198166d36.npy" +}, +{ +"hash": "93887792dc2f53c4e2c8e4d1160c9db4e118ad3464de6c8c5fff6a991eb0efbf", +"file": "RCADS-47-CG-EN_93887792dc2f.npy" +}, +{ +"hash": "64c2c4157e583f4f203af4f28ed822e4e9df7b01a5a5a4d7f992bbbead79e1a3", +"file": "RCADS-47-CG-EN_64c2c4157e58.npy" +}, +{ +"hash": "c640dd166e190efb70fcf85c123d95913401bb54b886dc1874a64c60d09142c9", +"file": "RCADS-47-CG-EN_c640dd166e19.npy" +}, +{ +"hash": "a0c4df13717e2f8ced418e7b9d0e2abcddb74c1b9c71561b36df44fff952129a", +"file": "RCADS-47-CG-EN_a0c4df13717e.npy" +}, +{ +"hash": "55a5d8b9cd062384ffd38d0fe4244af1ac1272c0a7c95e0750d71ebe1854ab7a", +"file": "RCADS-47-CG-EN_55a5d8b9cd06.npy" +}, +{ +"hash": "5245bdcc77c81bee434469e44b1246b3937d6ac62e102886ed73d6bf57766e5c", +"file": "RCADS-47-CG-EN_5245bdcc77c8.npy" +}, +{ +"hash": "014aff1bc542da49f61aabeafbaf59a883ac0b1bc84b85cfd6d0469dc085cb58", +"file": "RCADS-47-CG-EN_014aff1bc542.npy" +}, +{ +"hash": "aaf37f93782b7adb13ed3117517a371a41a6ad44cd97283dab712b00b39d76e9", +"file": "RCADS-47-CG-EN_aaf37f93782b.npy" +}, +{ +"hash": "d4949e37ba9d12aee0bfeea9cef498767cf07598498251f113dd9806074d6544", +"file": "RCADS-47-CG-EN_d4949e37ba9d.npy" +}, +{ +"hash": "36fac89ec7063eea99ccc4ee85340c7203cc004f7b56924ea308d330315ff5c2", +"file": "RCADS-47-CG-EN_36fac89ec706.npy" +}, +{ +"hash": "211677429d10e4fa73debfdcb3ec4d9fa1409db49172b526204b6f3a00d896a3", +"file": "RCADS-47-CG-EN_211677429d10.npy" +}, +{ +"hash": "24f2f0d99fa63e19f1d117db69093eeffdda057bd651c831f281057d2091b410", +"file": "RCADS-47-CG-EN_24f2f0d99fa6.npy" +}, +{ +"hash": "6f8af4cd1bc5d6b1e2a3949edd6cb7a5ebbf03b2dd9c518670327ff5c09e1ec4", +"file": "RCADS-47-CG-EN_6f8af4cd1bc5.npy" +}, +{ +"hash": "e5fc5c1e5c86098c1d4e57e56b14157fc5b47ace302c0ed69bc03246abfac27f", +"file": "RCADS-47-CG-EN_e5fc5c1e5c86.npy" +}, +{ +"hash": "fa57a1d6e6dae04630e53673e273a9a747b10e56b829283383864db9bfd8c2df", +"file": "RCADS-47-CG-EN_fa57a1d6e6da.npy" +}, +{ +"hash": "07166098174e59ad6acde50b28e797ecc15071f17ba997c8d7298f5c42c5df2f", +"file": "RCADS-47-CG-EN_07166098174e.npy" +}, +{ +"hash": "dcde8a8a3bd52e7f1082a781af67fc935aaf6e7ade6cab6be657893f4f986ec1", +"file": "RCADS-47-CG-EN_dcde8a8a3bd5.npy" +}, +{ +"hash": "9f3ed1316b80b528a16c68e7726fc3207231e31c1ec9a9eb0353585030772700", +"file": "RCADS-47-CG-EN_9f3ed1316b80.npy" +}, +{ +"hash": "51daed7526ce1136e3b79cfe2a06876c245dd26bfb23a3117f39b347ff8a60cc", +"file": "RCADS-47-CG-EN_51daed7526ce.npy" +}, +{ +"hash": "0d934455afc8b6f99b67090dc855d78e5e30ce51b913810c0d48718c4d9616cf", +"file": "RCADS-47-CG-EN_0d934455afc8.npy" +}, +{ +"hash": "cf25f04e849af199bdf460f7949c82de865f28dd2b03c383af5e8f68edc1f21a", +"file": "RCADS-47-CG-EN_cf25f04e849a.npy" +}, +{ +"hash": "b66ac7337d817d4527f28ee2d1a7f67a3c8c44ee963e58a41c700ae98c1a5e13", +"file": "RCADS-47-CG-EN_b66ac7337d81.npy" +}, +{ +"hash": "9016fe818ab81adb0b48afc522cbfda8f6dabde1f58515bf8d990902b209c53a", +"file": "RCADS-47-CG-EN_9016fe818ab8.npy" +}, +{ +"hash": "1793778bebcabd7361a3b22832ddb5a0b6bf40193bc2b4e9466d55e56a0bc7b4", +"file": "RCADS-47-CG-EN_1793778bebca.npy" +}, +{ +"hash": "002ee603a1c1c655386e314cfd4d1c4ce12ddef25e196f89ef7db0776238d14f", +"file": "RCADS-47-CG-EN_002ee603a1c1.npy" +}, +{ +"hash": "1b6b23cc0b0e45960955afef0e23efefc0c698f35ba0c33d9233cd2f585c2c63", +"file": "RCADS-47-CG-EN_1b6b23cc0b0e.npy" +}, +{ +"hash": "67d93c8ca286c03e2d6975951da9fac5dccb048a2cc2ce893ab7b346009e5762", +"file": "RCADS-47-CG-EN_67d93c8ca286.npy" +}, +{ +"hash": "ba6e664ca37adbfcdff6f0d84579e6ef0652c91c3bb3dceb0ea5799d9ec96a56", +"file": "RCADS-47-CG-EN_ba6e664ca37a.npy" +}, +{ +"hash": "9a7b01528206610001a2d81d0ba75599884d1d90a6cf685ae128d626e46d802f", +"file": "RCADS-47-CG-EN_9a7b01528206.npy" +}, +{ +"hash": "a092053b7ce6e971878287c61b9c0d9b475857cf424fb2b591a102bb3a8f33d3", +"file": "RCADS-47-CG-EN_a092053b7ce6.npy" +}, +{ +"hash": "883c2e2f57a03767091c9f847485d96304ee8358264390d372df69765704ab22", +"file": "RCADS-47-CG-EN_883c2e2f57a0.npy" +}, +{ +"hash": "9b5f2944f843fa023e5fc975226f991a5965c3b85c6bd3e1967e4ee4977e02f2", +"file": "RCADS-47-CG-EN_9b5f2944f843.npy" +}, +{ +"hash": "525847611836cbd6af998b10326fc0c35f77bda61d81d0ab97eefadd3cf8dd60", +"file": "RCADS-47-CG-EN_525847611836.npy" +}, +{ +"hash": "086129302cfee69dd3a81c8fbfbdb322bf34cdd63bdaf5b8c58c0565aebbedd4", +"file": "RCADS-47-CG-EN_086129302cfe.npy" +}, +{ +"hash": "98e5452d45ee79ccc49c59680c7e7592f9324be60f5d6ba70465777000468854", +"file": "RCADS-47-CG-EN_98e5452d45ee.npy" +}, +{ +"hash": "02ccf90e6161221e7d24869ca982eb517b48702c7302f649bc0381389e075de9", +"file": "RCADS-47-CG-EN_02ccf90e6161.npy" +}, +{ +"hash": "618c767bb2c692ba93ee90fd03d0f2515c9348225b964f933236ddef40fa61eb", +"file": "RCADS-47-CG-EN_618c767bb2c6.npy" +}, +{ +"hash": "789cf4dc71dc5bf66182eb2e1a495d5538cc8ac27b614793f6c83adcb7bdb01b", +"file": "RCADS-47-CG-EN_789cf4dc71dc.npy" +}, +{ +"hash": "44967853e3ad22fac8d18a4ab4870a9f8243fed4cf958091e00c924ef592be5a", +"file": "RCADS-47-CG-EN_44967853e3ad.npy" +}, +{ +"hash": "eb95aba4cdd55b992f669899035eb74bc166e201adc115aa75253ed665b70eff", +"file": "RCADS-47-CG-EN_eb95aba4cdd5.npy" +}, +{ +"hash": "31962b68887ad6e55abfda4f2d4ff8d7fd0553c462a3752265fdf850ac6342c2", +"file": "RCADS-47-CG-EN_31962b68887a.npy" +}, +{ +"hash": "78cf1a566aae8b5ee523d538e298401e8daee2bde6877aa5e902c9091437f93a", +"file": "RCADS-47-CG-EN_78cf1a566aae.npy" +}, +{ +"hash": "54cce870e32238a261b30989c1b458c0f8f23519662123d6cd735dbdde73e8f7", +"file": "RCADS-47-CG-EN_54cce870e322.npy" +}, +{ +"hash": "dafe86669f1c92a4a4575bc41ab85ec6f3a3ef77bba513ea4cad2013b073ab2e", +"file": "RCADS-47-CG-EN_dafe86669f1c.npy" +}, +{ +"hash": "946c9a793f54694fbe4d3b2132f9c974ecde80cd70c86d1b72344bebf5ac42f2", +"file": "RCADS-47-CG-EN_946c9a793f54.npy" +}, +{ +"hash": "0d3208fdb2ded263b4ff2e9a432181a4d9bb5a3a8908b5549d928453ce17baee", +"file": "RCADS-47-CG-EN_0d3208fdb2de.npy" +}, +{ +"hash": "3adc16911ee7989a48cdfa7b9d27f6ef2ae7b7db67f23a29a0a2093efe7b3fc2", +"file": "RCADS-47-CG-EN-2_3adc16911ee7.npy" +}, +{ +"hash": "cdebd3e8c571f35cd17366aecdfc54bca1347f6768caa47c4fb1a75f9c01ec44", +"file": "RCADS-47-CG-EN-2_cdebd3e8c571.npy" +}, +{ +"hash": "a1d7b8774f93610b42aaa932e768e8fb5c3bfcb26d5d40aef740844ada9814b7", +"file": "RCADS-47-CG-EN-2_a1d7b8774f93.npy" +}, +{ +"hash": "acb95df924488bb48be87468ba069b5005ef03d50f3510450c0fdfb34b6b8839", +"file": "RCADS-47-CG-EN-2_acb95df92448.npy" +}, +{ +"hash": "32128b2a990276cafbf3ac181177403dfbabe76e2f3a85d20cbf55b57e406206", +"file": "RCADS-47-CG-EN-2_32128b2a9902.npy" +}, +{ +"hash": "1a07a8d1ff7d47ae3155c22bfe6dd15724203c00a7d48d271b2249862f24ee58", +"file": "RCADS-47-CG-EN-2_1a07a8d1ff7d.npy" +}, +{ +"hash": "20668e676458fc5e725792893e38a365f8754a05add1ac16f10ff97cafa82071", +"file": "RCADS-47-CG-EN-2_20668e676458.npy" +}, +{ +"hash": "75d4456e6e7452bc830f4d8e7445406645ec436c5f862cc5cf2cb3b72b4d2946", +"file": "RCADS-47-CG-EN-2_75d4456e6e74.npy" +}, +{ +"hash": "68a64b3862f2e421efca669123da45e42dbea143f41945270d1dfb34e45f1dca", +"file": "RCADS-47-CG-EN-2_68a64b3862f2.npy" +}, +{ +"hash": "ca5db62eda3065fd0ee0b65a4300eaf4e216c91dc8eeb517d8c43e7029e4f398", +"file": "RCADS-47-CG-EN-2_ca5db62eda30.npy" +}, +{ +"hash": "6fe6d91163d875bd0c0474af041041e26dac584fb8bf4ba84f466513a060f0e5", +"file": "RCADS-47-CG-EN-2_6fe6d91163d8.npy" +}, +{ +"hash": "a5a328ab10c15b745115754ae49d95d401176f8b2b93a2c7e428b5694b933e49", +"file": "RCADS-47-CG-EN-2_a5a328ab10c1.npy" +}, +{ +"hash": "48af2e111c149f2ee6766359a7e15fe19798a97775118e7c13c6059833b0da19", +"file": "RCADS-47-CG-EN-2_48af2e111c14.npy" +}, +{ +"hash": "4bdf8d517a43242d89816cef9c16071d1fcd5c859faa5d30e2b131946858e637", +"file": "RCADS-47-CG-EN-2_4bdf8d517a43.npy" +}, +{ +"hash": "b2c9879d2feb84e512fa8a463b5233a82364a4ebdc538b8fcbeb671a2c488210", +"file": "RCADS-47-CG-EN-2_b2c9879d2feb.npy" +}, +{ +"hash": "0447162b7508364b1f39b3950105586020373e414f0d13c661bad6ef7835ff35", +"file": "RCADS-47-CG-EN-2_0447162b7508.npy" +}, +{ +"hash": "26236374492d907a9a96e9908cfe8ae197e7875f2f43a5293b46bc64d4181c4e", +"file": "RCADS-47-CG-EN-2_26236374492d.npy" +}, +{ +"hash": "990e02a3b4d47f690e286049277519e30d426b68bf8aafebd3b2653f8024cd39", +"file": "RCADS-47-CG-EN-2_990e02a3b4d4.npy" +}, +{ +"hash": "92c56307a1966518cfbb3ebde49f06559718e7db01e866c40f68a513b73866a7", +"file": "RCADS-47-CG-EN-2_92c56307a196.npy" +}, +{ +"hash": "11502d8b34d29f4b83608c3731b339d41c5dc60065b4c558ed5551a6e3bce8e4", +"file": "RCADS-47-CG-EN-2_11502d8b34d2.npy" +}, +{ +"hash": "defb4ec11061e7f87fdcb089ea85e56f783b7b4235b94ce1a1546230d714bc0a", +"file": "RCADS-47-CG-EN-2_defb4ec11061.npy" +}, +{ +"hash": "a9de6ce9ff3b681171a409bc91e4e0a702a2abef22024b9b053c7dbc9e7743d5", +"file": "RCADS-47-CG-EN-2_a9de6ce9ff3b.npy" +}, +{ +"hash": "ba47ca65366980768e8fb89dbb16a5063e941d782afe5701e0bf2f12306e9a27", +"file": "RCADS-47-CG-EN-2_ba47ca653669.npy" +}, +{ +"hash": "1bbbd34aba5f96c69031449547dbde6eb302b61e710b9f40223816a30fccb908", +"file": "RCADS-47-CG-EN-2_1bbbd34aba5f.npy" +}, +{ +"hash": "29f7a3ca5404879ec578902cef513767c045b38fb38daff9bd22dc803c8c13fa", +"file": "RCADS-47-CG-EN-2_29f7a3ca5404.npy" +}, +{ +"hash": "07e43dd18a65ec9645bebcdd6eacd54cb2c5ecd3dd1dfc85a4b8f82f8455b1b1", +"file": "RCADS-47-CG-EN-2_07e43dd18a65.npy" +}, +{ +"hash": "a306531836ebf5075fe06435e9d415578859a6414e65159f5c93ca02cb39930d", +"file": "RCADS-47-CG-EN-2_a306531836eb.npy" +}, +{ +"hash": "a255819a13e0d5912c6deb19f1fef29146a21bf1f474e6dea0bf3cfe6221c3fe", +"file": "RCADS-47-CG-EN-2_a255819a13e0.npy" +}, +{ +"hash": "64c4f8da11ebd2bc6d84accaebd21db2f8d9519b31aee81c9ca9ac27b320a0f9", +"file": "RCADS-47-CG-ES_64c4f8da11eb.npy" +}, +{ +"hash": "8cd28864352eef69d8c3fc01c2ad3e869169e74ac215140a65fce58bdd32a764", +"file": "RCADS-47-CG-ET_8cd28864352e.npy" +}, +{ +"hash": "af16b6372508cf24cc8b7d635ec76244f08848c810a80f36222d0306463928ae", +"file": "RCADS-47-CG-FA_af16b6372508.npy" +}, +{ +"hash": "228628cd86b01dab4f8ca10c4578380e490db5f3105a05e87ec1228162ad69b9", +"file": "RCADS-47-CG-FI_228628cd86b0.npy" +}, +{ +"hash": "36473366d1f20520a7e302cfe3db2d14865e4709f51ec9c61518b28aae7791f0", +"file": "RCADS-47-CG-FR_36473366d1f2.npy" +}, +{ +"hash": "edca367514f547c8c0faa924dcf8000092aa6a853a8c0cebbddcae3b0d143081", +"file": "RCADS-47-CG-FR-1_edca367514f5.npy" +}, +{ +"hash": "25986763c6c5115424d93f2372b543f894f07ed6ff3d3b01489415f829b4a1c3", +"file": "RCADS-47-CG-FR-2_25986763c6c5.npy" +}, +{ +"hash": "c818c3e7773ef3f7d2d0e8d6f044e0df8ae026dfc1a652180315469fdd2a6abc", +"file": "RCADS-47-CG-FR-3_c818c3e7773e.npy" +}, +{ +"hash": "7513d6a15ffa4a19e46c23c8ce8d72d945b265ec9a5d78be277dc092f0c5c019", +"file": "RCADS-47-CG-FR-CA-1_7513d6a15ffa.npy" +}, +{ +"hash": "4d4918859721f9b6187e8e7ea4c38edadce49c206e02c6c2fd395f13b727e58b", +"file": "RCADS-47-CG-HI_4d4918859721.npy" +}, +{ +"hash": "e47079fd462ea28000fa57de9e0307f3816c0bb75190c4fdce5935d7a38a13e4", +"file": "RCADS-47-CG-HU_e47079fd462e.npy" +}, +{ +"hash": "924bf23b60b9e570409c238a4843e6198049edde8158a6090564f4c1931dc1b1", +"file": "RCADS-47-CG-IS_924bf23b60b9.npy" +}, +{ +"hash": "c850ee1c8d8e98d6ce8d1b3b14b9f08e158a4d2f65c19a3ded7123c286b0ea84", +"file": "RCADS-47-CG-IT_c850ee1c8d8e.npy" +}, +{ +"hash": "71787c6ac0960e99c8456312b9faaea738b58cca35946b9dd12cfd2f309bbdfd", +"file": "RCADS-47-CG-JA_71787c6ac096.npy" +}, +{ +"hash": "fdc199cba538fa394fdb0970dfa870ff693796b6af8e3397b263ba4e2c006642", +"file": "RCADS-47-CG-JA-1_fdc199cba538.npy" +}, +{ +"hash": "8a5b5e2d3888fb999421b111c90f1fb7a1f02ab9f9a70fb881e646014b7880c0", +"file": "RCADS-47-CG-JA-2_8a5b5e2d3888.npy" +}, +{ +"hash": "16397ee15a85271d7f1c8fe451f583d65fa4d75d8b1b5f64fcc0448a1d0ab160", +"file": "RCADS-47-CG-KO_16397ee15a85.npy" +}, +{ +"hash": "47fe085a84bddd15bef927a4f7c1452aa3da91e255f1af6f439ece6fa45258d3", +"file": "RCADS-47-CG-LT_47fe085a84bd.npy" +}, +{ +"hash": "b34c44f6ed86d0e850b5839942501bfbf084bfc447fcab8d2b28cf2e277ae110", +"file": "RCADS-47-CG-MN_b34c44f6ed86.npy" +}, +{ +"hash": "9cf1763cb9b9137f1f77b382f256da189ab19490272ee2131ab54dea5bd9e8bc", +"file": "RCADS-47-CG-MR_9cf1763cb9b9.npy" +}, +{ +"hash": "546049eea3d97b491f73c4cb4b4958f01d2678b67305f73351c429ebf138ae4b", +"file": "RCADS-47-CG-MS_546049eea3d9.npy" +}, +{ +"hash": "a8fd7f628a55504328103736ce507bb76d0fe889eeaf5eaa0b602d06bc46e603", +"file": "RCADS-47-CG-NL_a8fd7f628a55.npy" +}, +{ +"hash": "983e85ba5f58213a65dcbf1003815d2a4c817bdcfed2b754d3bdd3bc463774cb", +"file": "RCADS-47-CG-NO_983e85ba5f58.npy" +}, +{ +"hash": "d4373de666fe3c55a9774b58304db2b4cc1f7a827ae36106882c003023030e47", +"file": "RCADS-47-CG-NO-1_d4373de666fe.npy" +}, +{ +"hash": "bb5557bb72869830796849b4093411f4208dc99cd7d8c4fd5fc3fa37956ffa5c", +"file": "RCADS-47-CG-NO-2_bb5557bb7286.npy" +}, +{ +"hash": "ecc48513bd68698a4c803f4f839f20e9375b8581725174a7e5ab325d7d9ca6c4", +"file": "RCADS-47-CG-NY_ecc48513bd68.npy" +}, +{ +"hash": "78cb3b5385bf5c8d513d809d7db1866c709169ac4307a7cd0ab6fd233be25f66", +"file": "RCADS-47-CG-PA_78cb3b5385bf.npy" +}, +{ +"hash": "361728236027f3f8700c1ce14eaa618fc5d922b5ce58f2800774e9465df43240", +"file": "RCADS-47-CG-PL_361728236027.npy" +}, +{ +"hash": "6ec6ad1bc7087a6700126ed4962ab8baebd18a78b6ed867a8033ed32ba96c402", +"file": "RCADS-47-CG-PT_6ec6ad1bc708.npy" +}, +{ +"hash": "302f48f76c9c80a5307a4edb8c05ca78aeb22502f0cc429bf8e2a3b38bdbf6a1", +"file": "RCADS-47-CG-SL_302f48f76c9c.npy" +}, +{ +"hash": "8251bac7c5937b5a01ce6cddb2fbb89ddb2b7555d2d12803eb731af457733996", +"file": "RCADS-47-CG-SR_8251bac7c593.npy" +}, +{ +"hash": "d2c70bbcbc4fd3717326dbe6239f232b85d3f80305afde199f61e205b5615155", +"file": "RCADS-47-CG-SV_d2c70bbcbc4f.npy" +}, +{ +"hash": "908c59f53cb9c1f817a56222abda0b4cb85d288c8e725405f9b32e2a740cab5a", +"file": "RCADS-47-CG-SV-1_908c59f53cb9.npy" +}, +{ +"hash": "fc5645f5ee1e9459b81d2fc612bf189e7a3373244adf1b6b5817ee8c6c74d399", +"file": "RCADS-47-CG-SV-2_fc5645f5ee1e.npy" +}, +{ +"hash": "66d04f7dbfa639f1cf0f3e668e9583c39996ea0cce383ef675ac23667f8b7d5e", +"file": "RCADS-47-CG-TR_66d04f7dbfa6.npy" +}, +{ +"hash": "4d134ee2eae227a0b33ae610950342e3f1d26eef71dd69dc6cd264762c0b8f9b", +"file": "RCADS-47-CG-UR_4d134ee2eae2.npy" +}, +{ +"hash": "03304defb14ec51ef9fde825765038ad4e87a4e8fa3118059f8b79c83855c75f", +"file": "RCADS-47-CG-VI_03304defb14e.npy" +}, +{ +"hash": "c266e02013e7f8bb066598028767ec1fc8269a815727bc7686625d05c9b80b42", +"file": "RCADS-47-CG-ZH-HANS_c266e02013e7.npy" +}, +{ +"hash": "323e45ac967d5b1b0c1ead436bc3e884c884bfa7d5569e70ee4fe00611cff528", +"file": "RCADS-47-CG-ZH-HANT_323e45ac967d.npy" +}, +{ +"hash": "bd886c7105a6ec511fe4d4d62023e87eb9ffe75cb433d40581a97a0ca4c380c6", +"file": "RCADS-47-CG-ZU_bd886c7105a6.npy" +}, +{ +"hash": "bb5c4bc1486c9cc1e87cf28cc56c1a68991833472035cc5d45e7efef67a17a56", +"file": "RCADS-47-Y-AR_bb5c4bc1486c.npy" +}, +{ +"hash": "c2c37eecb2f0fb20db3b14d2d7ae55a3c16ea82608638881c152c7e6010dead7", +"file": "RCADS-47-Y-BN_c2c37eecb2f0.npy" +}, +{ +"hash": "4069dec354e3db8ae14e2ebc6d6a5902f002bb9b2af83daef15086b994f5af4a", +"file": "RCADS-47-Y-CH-HANS_4069dec354e3.npy" +}, +{ +"hash": "89605a48f6b71260caf20e0d3dec11a3115c66a957145fbab49649423be19ff2", +"file": "RCADS-47-Y-DA_89605a48f6b7.npy" +}, +{ +"hash": "8fd828fafcddd7322af053883edc34736b3492dd73b8a5a0a77695b1be9cb6a0", +"file": "RCADS-47-Y-DE_8fd828fafcdd.npy" +}, +{ +"hash": "3c0a54d7b677e63294b9cf8bab41d519e98233b6e243e50493b1faa61dcda433", +"file": "RCADS-47-Y-EL_3c0a54d7b677.npy" +}, +{ +"hash": "731ba1a187e5483e152a4f8427f9e9cb42ee49ce35346d7f6ca47ce5c6811566", +"file": "RCADS-47-Y-EN_731ba1a187e5.npy" +}, +{ +"hash": "8df4817daa76b6ea5f5a9cf9c3ebe9555e13cfa100a61589d66ee39e1cbf6ce0", +"file": "RCADS-47-Y-EN_8df4817daa76.npy" +}, +{ +"hash": "d6d129229d3698bde19606868ae9d5eacff648e6ef2f441cc11aaab091aad413", +"file": "RCADS-47-Y-EN_d6d129229d36.npy" +}, +{ +"hash": "b302a80bf45a2e8074c13296476470a5c306d6e8998b3fd98362369cb6ace5e3", +"file": "RCADS-47-Y-EN_b302a80bf45a.npy" +}, +{ +"hash": "eeb0901b4d505b2d60d9a28743afdd121888adc8ec45f91705b6c1b88200c3e4", +"file": "RCADS-47-Y-EN_eeb0901b4d50.npy" +}, +{ +"hash": "f35e89e708ad43faff55d66bc4d28dfb3d62e06d3b1ebba17adc0d268b6a65ef", +"file": "RCADS-47-Y-EN_f35e89e708ad.npy" +}, +{ +"hash": "576d220e57717245e56b1f04e72cc3c8711e89c1b5547e378db80dfb9ce14710", +"file": "RCADS-47-Y-EN_576d220e5771.npy" +}, +{ +"hash": "1d40683604eb6e7189f11faafc37ecf39cbf9366a4b26279d659ef270eb9c0b2", +"file": "RCADS-47-Y-EN_1d40683604eb.npy" +}, +{ +"hash": "671d69699cd0e659d5fd7eb1077d66c1857a64e94e0c54e9be03dade76553052", +"file": "RCADS-47-Y-EN_671d69699cd0.npy" +}, +{ +"hash": "f12be44c6329b8154a2f83ec190d87890f6ad49245f0d27544044dca7437e862", +"file": "RCADS-47-Y-EN_f12be44c6329.npy" +}, +{ +"hash": "892f1bb8d502e8a7faa9513b9d2ccee189bafb5d3095c2448dd753257e4e5e0c", +"file": "RCADS-47-Y-EN_892f1bb8d502.npy" +}, +{ +"hash": "401c0c39e631d364c11d465a9899475da489716d139443c78d9173568bc7f8d2", +"file": "RCADS-47-Y-EN_401c0c39e631.npy" +}, +{ +"hash": "ac4841022ffa75d852ff68753e4f88cd45f863c757b790b66f5b42ac0ec28288", +"file": "RCADS-47-Y-EN_ac4841022ffa.npy" +}, +{ +"hash": "72016226e1a91d2c16368bb3afb1caff75e6fd8309286d18811c57736776e3c8", +"file": "RCADS-47-Y-EN_72016226e1a9.npy" +}, +{ +"hash": "4451cc549f997a196d2a0c8c0c73d9f89efa5b061fc8f2ece8aa0c9ab30db089", +"file": "RCADS-47-Y-EN_4451cc549f99.npy" +}, +{ +"hash": "3abf0884d36a2de7357bdaa1563c879d63337ed27bdcf6273b3ba5f047e88c02", +"file": "RCADS-47-Y-EN_3abf0884d36a.npy" +}, +{ +"hash": "45b89ad4feb48591d617ede5e5f15a6dfa941122e06ce0b27822493e0a4475d3", +"file": "RCADS-47-Y-EN_45b89ad4feb4.npy" +}, +{ +"hash": "46054b546241cec7de52dd57ece0b06bec7276debde3ed7add8bbc0860162cfc", +"file": "RCADS-47-Y-EN_46054b546241.npy" +}, +{ +"hash": "9ba907bd5185b859c71f96335d02b591b6ec091c62aafa21c2a455dc00d38fa0", +"file": "RCADS-47-Y-EN_9ba907bd5185.npy" +}, +{ +"hash": "aa10b44d9559671c19174565fc03412e8213bd8f2bb55de0602c49cb1595e906", +"file": "RCADS-47-Y-EN_aa10b44d9559.npy" +}, +{ +"hash": "b571d208909e1ab36e4d1a1c703bf71dd2ab4bc5b08b6c86c423b961ccc32f42", +"file": "RCADS-47-Y-EN_b571d208909e.npy" +}, +{ +"hash": "2fb40dc3756b80dbd12545a33ed5808f20f188d9b730e54411d50b3f7f3e4e70", +"file": "RCADS-47-Y-EN_2fb40dc3756b.npy" +}, +{ +"hash": "a1dbe013cf4b43ee50151469632d8dbdb882b0790b06745cccfd39f88da65ece", +"file": "RCADS-47-Y-EN_a1dbe013cf4b.npy" +}, +{ +"hash": "94388c94bb29f14fb54c826a8dc1f7fecb70545796871631da4bc99aa5f2b001", +"file": "RCADS-47-Y-EN_94388c94bb29.npy" +}, +{ +"hash": "58c7bbdc85219aa799d5b562597d1bce23f8875ab5729ccb37e69288bc3ffc65", +"file": "RCADS-47-Y-EN_58c7bbdc8521.npy" +}, +{ +"hash": "e8ad9c648f788741b57c8f39545a8fbcfaed857d34bf46f690aa4914f6afd5f2", +"file": "RCADS-47-Y-EN_e8ad9c648f78.npy" +}, +{ +"hash": "8c05a770008e56b2e5650d23e247083ca6d4686348147c9ca84b56a7f230af5b", +"file": "RCADS-47-Y-EN_8c05a770008e.npy" +}, +{ +"hash": "066314a00d2f7c8afdc8c67c0ea84113986ce10ea9ea90d277faacc0428f3402", +"file": "RCADS-47-Y-EN_066314a00d2f.npy" +}, +{ +"hash": "bdc9231d51ce3f749b78b1c7e23272ab66fd23fb2da03e987d10267cf085a931", +"file": "RCADS-47-Y-EN_bdc9231d51ce.npy" +}, +{ +"hash": "845a993b7fb2d4424fd8080ac5f4fe0b80ff5707b1cc6fdbeb4ebec3070a04fa", +"file": "RCADS-47-Y-EN_845a993b7fb2.npy" +}, +{ +"hash": "27b9ebf72c4809a45a310a965fd0540d40719a3233f793c37bc6242b0db6c26e", +"file": "RCADS-47-Y-EN_27b9ebf72c48.npy" +}, +{ +"hash": "931384d02175de78080d0ce6b73ccd0f4d58fd79183b044b1f6a3ece3471bcb6", +"file": "RCADS-47-Y-EN_931384d02175.npy" +}, +{ +"hash": "04beee09aa98f97e0a735bdf842cafaee0dde0a135e903cf5946c18844143c26", +"file": "RCADS-47-Y-EN_04beee09aa98.npy" +}, +{ +"hash": "d5bbba9ca3e7243dee6d662202385f2cca0c7f35774598f6cf8844cd70d74f33", +"file": "RCADS-47-Y-EN_d5bbba9ca3e7.npy" +}, +{ +"hash": "9b13efa118f250f870b61a1ecea246d1899edcdc32c42b5a1f962d9b59ac99aa", +"file": "RCADS-47-Y-EN_9b13efa118f2.npy" +}, +{ +"hash": "0975001964ee1c7fbb6f1bfa8f6184200aeffeb9adcd7c50f79e8436c79c5cee", +"file": "RCADS-47-Y-EN_0975001964ee.npy" +}, +{ +"hash": "85953d9a51b2fdebb1ad64dba885780b55d7ce9c63f819711119d26296ddabab", +"file": "RCADS-47-Y-EN_85953d9a51b2.npy" +}, +{ +"hash": "44ef1a0cb9da36d8a561e5c028b7c76c39dee892a5a99e60b77152608ddf2d49", +"file": "RCADS-47-Y-EN_44ef1a0cb9da.npy" +}, +{ +"hash": "d93c12b7432deec639f62b207257f70c2f02bd3b2eac5937e8a016af399c4292", +"file": "RCADS-47-Y-EN_d93c12b7432d.npy" +}, +{ +"hash": "465019350959bffd17efea907bdd2b2aacc92250cc7b3c933673130ff7d017a1", +"file": "RCADS-47-Y-EN_465019350959.npy" +}, +{ +"hash": "f0854901c80c7a7973973643c3dccccc87cbba9bf56f882f54390cd7e02de612", +"file": "RCADS-47-Y-EN_f0854901c80c.npy" +}, +{ +"hash": "f3848196eafdde2c2655c3091710697787dba57ce5700b322bbbb39db3308083", +"file": "RCADS-47-Y-EN_f3848196eafd.npy" +}, +{ +"hash": "45ae95154a325f9fa03b5872914c25b197ef6d7cea5dca499d28bc7c71a92230", +"file": "RCADS-47-Y-EN_45ae95154a32.npy" +}, +{ +"hash": "3a83e9beda936fc341d5dd7152ce3dcfc16d0a65d0b1fdd9cb865df589c9eec5", +"file": "RCADS-47-Y-EN_3a83e9beda93.npy" +}, +{ +"hash": "b946df9fd5db4f5ff0283dcdc3bb65336cf98cab713ff898631f912759bc6993", +"file": "RCADS-47-Y-EN_b946df9fd5db.npy" +}, +{ +"hash": "f42d225f066c53f2f0eea3776eec7bd14ad8c7b6a6aab589224edaa6bb529758", +"file": "RCADS-47-Y-EN_f42d225f066c.npy" +}, +{ +"hash": "0ceea783d92c8fe5ed6b22904bd4aee164714405674e93896a90e87353f89c83", +"file": "RCADS-47-Y-EN_0ceea783d92c.npy" +}, +{ +"hash": "831253e25d2185a7aeec443967c0b34a09992640b7c82b053715c4ca9824108e", +"file": "RCADS-47-Y-ES_831253e25d21.npy" +}, +{ +"hash": "f77e94e5649ac3dba9c338738eb09257ae0ffc0b8cc42e1d49bbceaa10ee46f6", +"file": "RCADS-47-Y-ET_f77e94e5649a.npy" +}, +{ +"hash": "f54f7e0b8b2f780081bec1b63813abdbcf5eba2aab13238e84e67298ce63c8b0", +"file": "RCADS-47-Y-FA_f54f7e0b8b2f.npy" +}, +{ +"hash": "9d397946c65788cfc98caa7ff3b7428042ba6d68894189b3db6b6bf6e4e5645c", +"file": "RCADS-47-Y-FI_9d397946c657.npy" +}, +{ +"hash": "d6c92136ea10e5e98281251bd9ecbed16a64357c1c5fdc70ddf3a3b41f66ab3f", +"file": "RCADS-47-Y-FR_d6c92136ea10.npy" +}, +{ +"hash": "282faa34447219d0c25f250ada35ef91a93ff68200551ce280be3d4f9b03b2ee", +"file": "RCADS-47-Y-FR-FR-1_282faa344472.npy" +}, +{ +"hash": "8479844c01df505149827ec75a582aa1c9c4867fb76b3a0ad870c3602bd1fcfd", +"file": "RCADS-47-Y-FR-FR-2_8479844c01df.npy" +}, +{ +"hash": "8bb5f461081fc27692dc7b819d33e206035036badcbef7c41db2783d3fee18fb", +"file": "RCADS-47-Y-HI_8bb5f461081f.npy" +}, +{ +"hash": "b58d4850f85b748890b9888ba0ca703cfbf6259d900d278d089fc40f014b248c", +"file": "RCADS-47-Y-HU_b58d4850f85b.npy" +}, +{ +"hash": "4ff2beda223dc38e06ec0172115eb524f4ce43115658d83903ca1db27ffe5b27", +"file": "RCADS-47-Y-IS_4ff2beda223d.npy" +}, +{ +"hash": "be985eed42d7efe803055d7a5ba8035155e11e37419e26a6ade2adb5f56b7f02", +"file": "RCADS-47-Y-IT_be985eed42d7.npy" +}, +{ +"hash": "b21d78599c19baa75542461b3a4fc5e0f47489fd6850b9ad11b0f739ee76cf6d", +"file": "RCADS-47-Y-JA_b21d78599c19.npy" +}, +{ +"hash": "669ed77604d10b01de26725daf76929e26b352ac79a4f194be5d7db37a653f90", +"file": "RCADS-47-Y-JA-1_669ed77604d1.npy" +}, +{ +"hash": "380e590b0e092963e7649b4aca0b288299682b7b9c529580d4f8927aa61d3428", +"file": "RCADS-47-Y-JA-2_380e590b0e09.npy" +}, +{ +"hash": "0d2d66f2be683f3764dd52a55eb4ba96e4f8593092bf722068706ccd81782c0a", +"file": "RCADS-47-Y-KO_0d2d66f2be68.npy" +}, +{ +"hash": "0e28c238b0768ac67b2655a28941cd0482a27734666192b4117279191eab6bb7", +"file": "RCADS-47-Y-LT_0e28c238b076.npy" +}, +{ +"hash": "4e49f9d617137a04b3ecd44fb3742fccc6c99feb88e4abdeb32c0695c80d3354", +"file": "RCADS-47-Y-MN_4e49f9d61713.npy" +}, +{ +"hash": "46da384b790d8be4c907c6183ac660d7284be47abfaa321cfc896c3476b1fc2f", +"file": "RCADS-47-Y-MR_46da384b790d.npy" +}, +{ +"hash": "9dbd0c3261454988ca1a5331f94ab6fdaddba6a8698a2250079d33841e3d02cc", +"file": "RCADS-47-Y-MS_9dbd0c326145.npy" +}, +{ +"hash": "26f2d1a9a0c828677fa8d8c2cf6694f70cea8e1a5a093895384b84062c9b632f", +"file": "RCADS-47-Y-NL_26f2d1a9a0c8.npy" +}, +{ +"hash": "754f72fe0b6801395f0154b9e542d43e59df58d94641b39661feee26e2bc7615", +"file": "RCADS-47-Y-NO_754f72fe0b68.npy" +}, +{ +"hash": "7b51014f2079624527ece3089eefc69f49c0aa5ab62cbed97c2b7f05e5f4c241", +"file": "RCADS-47-Y-NO-1_7b51014f2079.npy" +}, +{ +"hash": "7710ae6db1a783a47600f506e746b6a60926256def1b034bb283c10cb164e0eb", +"file": "RCADS-47-Y-NO-2_7710ae6db1a7.npy" +}, +{ +"hash": "a92ccad471782cf7671b0cda8bf621a5c8914bdd7928a51225f163e933b57dea", +"file": "RCADS-47-Y-NY_a92ccad47178.npy" +}, +{ +"hash": "062c6e45492c6741faac1ee06a1360dbbe1237e2bc9dbeb10c5d446c0727b9d3", +"file": "RCADS-47-Y-PA_062c6e45492c.npy" +}, +{ +"hash": "6fc8cadee4f6f1efa33413d60962240e832e3824457287e5270107461a91394d", +"file": "RCADS-47-Y-PL_6fc8cadee4f6.npy" +}, +{ +"hash": "1972b39219964c1b23116162cfe6ed605842cb31cb3133a6ad09f38808e90573", +"file": "RCADS-47-Y-PT_1972b3921996.npy" +}, +{ +"hash": "bc21c267958841240006b1b8934cc63ad9f82ef508bb82a9f475151d8be7dbbd", +"file": "RCADS-47-Y-PT-BR_bc21c2679588.npy" +}, +{ +"hash": "1150f07eb01496e8b7586e7dad06b68bfebb2af0e14ae6fa631c3f1de0f04a51", +"file": "RCADS-47-Y-SL_1150f07eb014.npy" +}, +{ +"hash": "d81c6501df64b654e04edd66bd9ba356c916b6e2836206772f9b1f6ca2b27694", +"file": "RCADS-47-Y-SR_d81c6501df64.npy" +}, +{ +"hash": "0d84c8cca673f6cbc46a3b03edf80b6d947e2e02c4bd76d88ff2df55c5d2587b", +"file": "RCADS-47-Y-SV_0d84c8cca673.npy" +}, +{ +"hash": "963064c12278f2df32cb62aded99edbc4b9bc2f547bd22a36515a18c6fc36f06", +"file": "RCADS-47-Y-TR_963064c12278.npy" +}, +{ +"hash": "3cecd3435f12e822eaceb74f01ee048c2c07083311e3566a4ddedf0ddf4b2f2b", +"file": "RCADS-47-Y-UR_3cecd3435f12.npy" +}, +{ +"hash": "5cd60917df1ddcaf2d809f58bedab98168280d858c747386e8102c89607c2a06", +"file": "RCADS-47-Y-VI_5cd60917df1d.npy" +}, +{ +"hash": "c07f566095be16414aee1168221d99627c1c5969a9f33a079f14153defbdefc2", +"file": "RCADS-47-Y-ZH-HANS-1_c07f566095be.npy" +}, +{ +"hash": "84fbe327c384cfc07b507ece32ed05056a8e7ad85e4aba1206173320945c99a3", +"file": "RCADS-47-Y-ZH-HANT_84fbe327c384.npy" +}, +{ +"hash": "d995b667c0ed858b8c4d1242b153c9ab64bba377e73f75234115e135635e188b", +"file": "RCADS-47-Y-ZU_d995b667c0ed.npy" +} +] \ No newline at end of file diff --git a/embeddings/instruments/texts.npy b/embeddings/Pipeline/instruments/texts.npy similarity index 100% rename from embeddings/instruments/texts.npy rename to embeddings/Pipeline/instruments/texts.npy diff --git a/embeddings/Pipeline/model_test.bh b/embeddings/Pipeline/model_test.bh new file mode 100644 index 00000000..3bd9ca9f --- /dev/null +++ b/embeddings/Pipeline/model_test.bh @@ -0,0 +1,11 @@ +$env:EMBED_MODEL = "text-embedding-nomic-embed-text-v1.5" +python embeddings/generate_embeddings.py +python embeddings/evaluate_search.py + +$env:EMBED_MODEL = "text-embedding-embeddinggemma-300m-qat" +python embeddings/generate_embeddings.py +python embeddings/evaluate_search.py + +$env:EMBED_MODEL = "jina-embeddings-v4-text-retrieval" +python embeddings/generate_embeddings.py +python embeddings/evaluate_search.py \ No newline at end of file diff --git a/embeddings/Pipeline/model_test.ps1 b/embeddings/Pipeline/model_test.ps1 new file mode 100644 index 00000000..8fa63fbf --- /dev/null +++ b/embeddings/Pipeline/model_test.ps1 @@ -0,0 +1,141 @@ +# model_test.ps1 — for each of 3 embedding models: +# Step 1: confirm the model responds and print embedding dimension +# Step 2: regenerate all .npy vectors with that model +# Step 3: run section-scoped evaluation (default) +# Step 4: run all-sections evaluation (--no-scope) +# Step 5: extract both summaries into model_comparison.txt +# +# Usage (from project root): +# .\embeddings\model_test.ps1 + +$baseUrl = $env:EMBED_BASE_URL +if (-not $baseUrl) { $baseUrl = "http://idea-llm-01.idea.rpi.edu:11435/v1" } + +# --------------------------------------------------------------------------- +# Discover models available on the embedding server. +# Uses the OpenAI-compatible GET /v1/models endpoint so the script stays +# accurate as the server's loaded model lineup changes. +# --------------------------------------------------------------------------- +Write-Host "Discovering models on $baseUrl ..." -ForegroundColor Yellow +$discovery = python -c " +from openai import OpenAI +try: + client = OpenAI(base_url='$baseUrl', api_key='not-needed') + for m in client.models.list().data: + print(m.id) +except Exception as e: + print('DISCOVERY_FAIL ' + str(e)) +" + +if ($discovery -match '^DISCOVERY_FAIL') { + Write-Host "ERROR: could not list models from $baseUrl" -ForegroundColor Red + Write-Host " $discovery" -ForegroundColor Red + Write-Host " (Check that the server is reachable -- e.g. VPN, EMBED_BASE_URL.)" -ForegroundColor Red + exit 1 +} + +$models = @($discovery | ForEach-Object { $_.Trim() } | Where-Object { $_ }) + +if ($models.Count -eq 0) { + Write-Host "ERROR: server at $baseUrl returned an empty model list." -ForegroundColor Red + exit 1 +} + +Write-Host "Discovered $($models.Count) model(s): $($models -join ', ')" -ForegroundColor Green + +$comparisonFile = "embeddings/evaluation_results/model_comparison.txt" +New-Item -ItemType Directory -Force -Path "embeddings/evaluation_results" | Out-Null +"POEM Model Comparison -- $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Out-File $comparisonFile -Encoding utf8 +"" | Add-Content $comparisonFile -Encoding utf8 + +function Get-Summary($file) { + $content = Get-Content $file -Raw -Encoding utf8 + if ($content -match '(?s)(={10,}\r?\nSUMMARY\r?\n.*)') { + return $Matches[1].TrimEnd() + } + return "(summary section not found)" +} + +foreach ($model in $models) { + Write-Host "`n$(('=' * 72))" -ForegroundColor Cyan + Write-Host "MODEL: $model" -ForegroundColor Cyan + Write-Host "$(('=' * 72))" -ForegroundColor Cyan + + $env:EMBED_MODEL = $model + + # ------------------------------------------------------------------ + # Step 1 — confirm model responds and print embedding dimension + # ------------------------------------------------------------------ + Write-Host "`n[Step 1] Testing model endpoint..." -ForegroundColor Yellow + $dimResult = python -c " +from openai import OpenAI +client = OpenAI(base_url='$baseUrl', api_key='not-needed') +try: + r = client.embeddings.create(model='$model', input=['test']) + print('OK dim=' + str(len(r.data[0].embedding))) +except Exception as e: + print('FAIL ' + str(e)) +" + Write-Host " $dimResult" + if ($dimResult -notlike "OK*") { + Write-Host " Skipping model (endpoint not responding)." -ForegroundColor Red + "MODEL: $model -- SKIPPED (endpoint test failed: $dimResult)" | Add-Content $comparisonFile -Encoding utf8 + ("=" * 72) | Add-Content $comparisonFile -Encoding utf8 + "" | Add-Content $comparisonFile -Encoding utf8 + continue + } + + # ------------------------------------------------------------------ + # Step 2 — regenerate all .npy vectors with this model + # ------------------------------------------------------------------ + Write-Host "`n[Step 2] Regenerating embeddings..." -ForegroundColor Yellow + python embeddings/generate_embeddings.py + + # ------------------------------------------------------------------ + # Step 3 — section-scoped evaluation (each query searches its own section) + # ------------------------------------------------------------------ + Write-Host "`n[Step 3] Running section-scoped evaluation..." -ForegroundColor Yellow + python embeddings/evaluate_search.py + + $scopedFile = Get-ChildItem "embeddings/evaluation_results/evaluation_*.txt" | + Sort-Object LastWriteTime -Descending | + Select-Object -First 1 + + # ------------------------------------------------------------------ + # Step 4 — all-sections evaluation (original behaviour, --no-scope) + # ------------------------------------------------------------------ + Write-Host "`n[Step 4] Running all-sections evaluation (--no-scope)..." -ForegroundColor Yellow + python embeddings/evaluate_search.py --no-scope + + $unscopedFile = Get-ChildItem "embeddings/evaluation_results/evaluation_*.txt" | + Sort-Object LastWriteTime -Descending | + Select-Object -First 1 + + # ------------------------------------------------------------------ + # Step 5 — append both summaries to model_comparison.txt + # ------------------------------------------------------------------ + Write-Host "`n[Step 5] Writing summaries to $comparisonFile..." -ForegroundColor Yellow + + "MODEL: $model | dim: $($dimResult -replace 'OK dim=','')" | Add-Content $comparisonFile -Encoding utf8 + "" | Add-Content $comparisonFile -Encoding utf8 + + "--- SCOPED (each query searched within its expected section) ---" | Add-Content $comparisonFile -Encoding utf8 + if ($scopedFile) { + (Get-Summary $scopedFile.FullName) | Add-Content $comparisonFile -Encoding utf8 + } else { + "(no scoped output file found)" | Add-Content $comparisonFile -Encoding utf8 + } + "" | Add-Content $comparisonFile -Encoding utf8 + + "--- UNSCOPED (all sections searched together) ---" | Add-Content $comparisonFile -Encoding utf8 + if ($unscopedFile) { + (Get-Summary $unscopedFile.FullName) | Add-Content $comparisonFile -Encoding utf8 + } else { + "(no unscoped output file found)" | Add-Content $comparisonFile -Encoding utf8 + } + "" | Add-Content $comparisonFile -Encoding utf8 + ("=" * 72) | Add-Content $comparisonFile -Encoding utf8 + "" | Add-Content $comparisonFile -Encoding utf8 +} + +Write-Host "`nDone. Comparison saved to: $comparisonFile" -ForegroundColor Green diff --git a/embeddings/Pipeline/requirements.txt b/embeddings/Pipeline/requirements.txt new file mode 100644 index 00000000..beac1185 --- /dev/null +++ b/embeddings/Pipeline/requirements.txt @@ -0,0 +1,16 @@ +# POEM embeddings Pipeline dependencies. +# +# Blessed setup installs the shared core package (poem_core) from pyproject.toml: +# pip install -e embeddings # core + runtime deps +# pip install -e "embeddings[milvus]" # + Milvus client +# pip install -e "embeddings[dev]" # + pytest +# These pins mirror that for ad-hoc / non-editable installs. +openai>=1.0.0 +numpy>=1.24.0 +rdflib>=6.0.0 +pytest>=7.0.0 +# Default vector backend is the external Milvus server (VECTOR_BACKEND=milvus; +# see embeddings/docker/milvus-compose.yml). pymilvus is the client. Without it, +# or if the server is unreachable, the store falls back to the in-process numpy +# backend automatically, so this remains effectively optional. +pymilvus>=2.4.0 diff --git a/embeddings/Pipeline/sample_embeddings.py b/embeddings/Pipeline/sample_embeddings.py new file mode 100644 index 00000000..eee96d5e --- /dev/null +++ b/embeddings/Pipeline/sample_embeddings.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +"""Sample: verify the embedding endpoint is reachable and working. + +Reads a few blocks from templates.txt and prints the embedding size for each. +Run this first to confirm connectivity before the full pipeline. + +Usage: + python sample_embeddings.py +""" +from __future__ import annotations + +import os +import sys +import re + +_EMB_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _EMB_ROOT not in sys.path: + sys.path.insert(0, _EMB_ROOT) + +from poem_core import config # noqa: E402 +from poem_core.embedding_client import embed_texts # noqa: E402 + +# Default to templates.txt (TEMPLATES_OUTPUT); honor a TEMPLATES_PATH override. +TEMPLATES_FILE = os.environ.get("TEMPLATES_PATH", config.TEMPLATES_OUTPUT) + +with open(TEMPLATES_FILE, encoding="utf-8") as f: + raw = f.read() + +all_blocks = [b.strip() for b in re.split(r"\n\n+", raw)] +all_blocks = [b for b in all_blocks if b and not b.startswith("===")] + +# Take just the first 3 blocks as a sample. +texts = all_blocks[:3] + +vectors = embed_texts(texts) +for i, vec in enumerate(vectors): + print(f"Text {i} embedding length:", len(vec)) + print(f" Preview: {texts[i][:80]}...") + print() + print(vec.tolist()) diff --git a/embeddings/Pipeline/scales/Attendance-7-1_5b51b2f57165.npy b/embeddings/Pipeline/scales/Attendance-7-1_5b51b2f57165.npy new file mode 100644 index 00000000..f13ddd6c Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_5b51b2f57165.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_72693007f0ab.npy b/embeddings/Pipeline/scales/Attendance-7-1_72693007f0ab.npy new file mode 100644 index 00000000..c4531dcb Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_72693007f0ab.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_781c95e141f3.npy b/embeddings/Pipeline/scales/Attendance-7-1_781c95e141f3.npy new file mode 100644 index 00000000..adfa9b78 Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_781c95e141f3.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_793b86d9629c.npy b/embeddings/Pipeline/scales/Attendance-7-1_793b86d9629c.npy new file mode 100644 index 00000000..e129ef71 Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_793b86d9629c.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_ad7af81a0179.npy b/embeddings/Pipeline/scales/Attendance-7-1_ad7af81a0179.npy new file mode 100644 index 00000000..83aa5f22 Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_ad7af81a0179.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_d35dfe13f6d8.npy b/embeddings/Pipeline/scales/Attendance-7-1_d35dfe13f6d8.npy new file mode 100644 index 00000000..981f3527 Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_d35dfe13f6d8.npy differ diff --git a/embeddings/Pipeline/scales/Attendance-7-1_f0cb73213908.npy b/embeddings/Pipeline/scales/Attendance-7-1_f0cb73213908.npy new file mode 100644 index 00000000..06af3de0 Binary files /dev/null and b/embeddings/Pipeline/scales/Attendance-7-1_f0cb73213908.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_15ce1f7dbb0a.npy b/embeddings/Pipeline/scales/Clarity-7-1_15ce1f7dbb0a.npy new file mode 100644 index 00000000..67191435 Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_15ce1f7dbb0a.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_526bb412bcde.npy b/embeddings/Pipeline/scales/Clarity-7-1_526bb412bcde.npy new file mode 100644 index 00000000..f960ce4d Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_526bb412bcde.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_5a4a3312a315.npy b/embeddings/Pipeline/scales/Clarity-7-1_5a4a3312a315.npy new file mode 100644 index 00000000..7bb882fb Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_5a4a3312a315.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_89ae60f6943c.npy b/embeddings/Pipeline/scales/Clarity-7-1_89ae60f6943c.npy new file mode 100644 index 00000000..2754285e Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_89ae60f6943c.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_9107c537a7e9.npy b/embeddings/Pipeline/scales/Clarity-7-1_9107c537a7e9.npy new file mode 100644 index 00000000..f3273d0b Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_9107c537a7e9.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_c5a5663e5643.npy b/embeddings/Pipeline/scales/Clarity-7-1_c5a5663e5643.npy new file mode 100644 index 00000000..9bcd62c0 Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_c5a5663e5643.npy differ diff --git a/embeddings/Pipeline/scales/Clarity-7-1_c7b411d1b91b.npy b/embeddings/Pipeline/scales/Clarity-7-1_c7b411d1b91b.npy new file mode 100644 index 00000000..8cc9c566 Binary files /dev/null and b/embeddings/Pipeline/scales/Clarity-7-1_c7b411d1b91b.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_17ff245b9959.npy b/embeddings/Pipeline/scales/Depression-9-1_17ff245b9959.npy new file mode 100644 index 00000000..282bb2fe Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_17ff245b9959.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_5c114c45a6e4.npy b/embeddings/Pipeline/scales/Depression-9-1_5c114c45a6e4.npy new file mode 100644 index 00000000..ea3b5379 Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_5c114c45a6e4.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_93b3a2d9ac3b.npy b/embeddings/Pipeline/scales/Depression-9-1_93b3a2d9ac3b.npy new file mode 100644 index 00000000..8283c347 Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_93b3a2d9ac3b.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_ad83328b0edd.npy b/embeddings/Pipeline/scales/Depression-9-1_ad83328b0edd.npy new file mode 100644 index 00000000..9c50067e Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_ad83328b0edd.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_b2775b819670.npy b/embeddings/Pipeline/scales/Depression-9-1_b2775b819670.npy new file mode 100644 index 00000000..db7ff167 Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_b2775b819670.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_cc11e54d7d0c.npy b/embeddings/Pipeline/scales/Depression-9-1_cc11e54d7d0c.npy new file mode 100644 index 00000000..c2f4f8bf Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_cc11e54d7d0c.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_e65be2938375.npy b/embeddings/Pipeline/scales/Depression-9-1_e65be2938375.npy new file mode 100644 index 00000000..eadff14c Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_e65be2938375.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_ecc99b0c3933.npy b/embeddings/Pipeline/scales/Depression-9-1_ecc99b0c3933.npy new file mode 100644 index 00000000..5782ca91 Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_ecc99b0c3933.npy differ diff --git a/embeddings/Pipeline/scales/Depression-9-1_fb3a6b366c20.npy b/embeddings/Pipeline/scales/Depression-9-1_fb3a6b366c20.npy new file mode 100644 index 00000000..66467a66 Binary files /dev/null and b/embeddings/Pipeline/scales/Depression-9-1_fb3a6b366c20.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_05cd391ca571.npy b/embeddings/Pipeline/scales/Expectancy-7-1_05cd391ca571.npy new file mode 100644 index 00000000..a42a750f Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_05cd391ca571.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_2df91a6315e8.npy b/embeddings/Pipeline/scales/Expectancy-7-1_2df91a6315e8.npy new file mode 100644 index 00000000..bc4a20e6 Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_2df91a6315e8.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_6c8b8620245c.npy b/embeddings/Pipeline/scales/Expectancy-7-1_6c8b8620245c.npy new file mode 100644 index 00000000..b1c92d2b Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_6c8b8620245c.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_7a99106bff02.npy b/embeddings/Pipeline/scales/Expectancy-7-1_7a99106bff02.npy new file mode 100644 index 00000000..4461ae4c Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_7a99106bff02.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_8bdadc157d22.npy b/embeddings/Pipeline/scales/Expectancy-7-1_8bdadc157d22.npy new file mode 100644 index 00000000..eb64f6d9 Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_8bdadc157d22.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_8d7d6ea6d580.npy b/embeddings/Pipeline/scales/Expectancy-7-1_8d7d6ea6d580.npy new file mode 100644 index 00000000..211126b1 Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_8d7d6ea6d580.npy differ diff --git a/embeddings/Pipeline/scales/Expectancy-7-1_d28a60031efe.npy b/embeddings/Pipeline/scales/Expectancy-7-1_d28a60031efe.npy new file mode 100644 index 00000000..85984bc3 Binary files /dev/null and b/embeddings/Pipeline/scales/Expectancy-7-1_d28a60031efe.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_181c12249784.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_181c12249784.npy new file mode 100644 index 00000000..92ac573e Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_181c12249784.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_4271e481ad50.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_4271e481ad50.npy new file mode 100644 index 00000000..a9d09a91 Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_4271e481ad50.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_8b450a6d1509.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_8b450a6d1509.npy new file mode 100644 index 00000000..8a98a33c Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_8b450a6d1509.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_912c27fb3b62.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_912c27fb3b62.npy new file mode 100644 index 00000000..3a344d9e Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_912c27fb3b62.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_aa2484c463c4.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_aa2484c463c4.npy new file mode 100644 index 00000000..5396b012 Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_aa2484c463c4.npy differ diff --git a/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_f506f69a9714.npy b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_f506f69a9714.npy new file mode 100644 index 00000000..4605e783 Binary files /dev/null and b/embeddings/Pipeline/scales/Generalized-Anxiety-Disorder-6-1_f506f69a9714.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_19559c495787.npy b/embeddings/Pipeline/scales/Homework-7-1_19559c495787.npy new file mode 100644 index 00000000..0f9b2469 Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_19559c495787.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_60386a348537.npy b/embeddings/Pipeline/scales/Homework-7-1_60386a348537.npy new file mode 100644 index 00000000..43dd0511 Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_60386a348537.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_828266363b2c.npy b/embeddings/Pipeline/scales/Homework-7-1_828266363b2c.npy new file mode 100644 index 00000000..1662639e Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_828266363b2c.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_c06c71297158.npy b/embeddings/Pipeline/scales/Homework-7-1_c06c71297158.npy new file mode 100644 index 00000000..9a0ae0cc Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_c06c71297158.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_d0832b972ae5.npy b/embeddings/Pipeline/scales/Homework-7-1_d0832b972ae5.npy new file mode 100644 index 00000000..40c32b8b Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_d0832b972ae5.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_dfcf683df353.npy b/embeddings/Pipeline/scales/Homework-7-1_dfcf683df353.npy new file mode 100644 index 00000000..1be72776 Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_dfcf683df353.npy differ diff --git a/embeddings/Pipeline/scales/Homework-7-1_ef674a12d857.npy b/embeddings/Pipeline/scales/Homework-7-1_ef674a12d857.npy new file mode 100644 index 00000000..7ed1f371 Binary files /dev/null and b/embeddings/Pipeline/scales/Homework-7-1_ef674a12d857.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_109ea45d196a.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_109ea45d196a.npy new file mode 100644 index 00000000..7a78e301 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_109ea45d196a.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_14b672ece1fd.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_14b672ece1fd.npy new file mode 100644 index 00000000..81eb7b83 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_14b672ece1fd.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_1cf415ad0a59.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_1cf415ad0a59.npy new file mode 100644 index 00000000..9383f957 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_1cf415ad0a59.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_203b5d4ad4a2.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_203b5d4ad4a2.npy new file mode 100644 index 00000000..577590c1 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_203b5d4ad4a2.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_3f7e54b17c4b.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_3f7e54b17c4b.npy new file mode 100644 index 00000000..c3e01664 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_3f7e54b17c4b.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_76874d7fc5ec.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_76874d7fc5ec.npy new file mode 100644 index 00000000..8dcfd888 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_76874d7fc5ec.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_a2e3ee1a62b3.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_a2e3ee1a62b3.npy new file mode 100644 index 00000000..5e4d18e2 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_a2e3ee1a62b3.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_af46e256b243.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_af46e256b243.npy new file mode 100644 index 00000000..0dbb1ded Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_af46e256b243.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_ed351704e7bb.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_ed351704e7bb.npy new file mode 100644 index 00000000..99820ab1 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_ed351704e7bb.npy differ diff --git a/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_f11566e5639e.npy b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_f11566e5639e.npy new file mode 100644 index 00000000..7bdc5be3 Binary files /dev/null and b/embeddings/Pipeline/scales/Major-Depressive-Disorder-10-1_f11566e5639e.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_2f2e7042df9a.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_2f2e7042df9a.npy new file mode 100644 index 00000000..6a371517 Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_2f2e7042df9a.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_83c9c5180f76.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_83c9c5180f76.npy new file mode 100644 index 00000000..2ee01dbd Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_83c9c5180f76.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_a6d9fa25586a.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_a6d9fa25586a.npy new file mode 100644 index 00000000..d3b03a66 Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_a6d9fa25586a.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_b62428d42b65.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_b62428d42b65.npy new file mode 100644 index 00000000..ea6f8ef8 Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_b62428d42b65.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_d14b0454cc00.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_d14b0454cc00.npy new file mode 100644 index 00000000..401424ca Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_d14b0454cc00.npy differ diff --git a/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_f43d161cec13.npy b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_f43d161cec13.npy new file mode 100644 index 00000000..cb0dd6e6 Binary files /dev/null and b/embeddings/Pipeline/scales/Obsessive-Compulsive-Disorder-6-1_f43d161cec13.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_3e0e35a874b2.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_3e0e35a874b2.npy new file mode 100644 index 00000000..503b89a4 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_3e0e35a874b2.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_6056253c583f.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_6056253c583f.npy new file mode 100644 index 00000000..1d0890b1 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_6056253c583f.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_8eb0b6b27ad1.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_8eb0b6b27ad1.npy new file mode 100644 index 00000000..58f18510 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_8eb0b6b27ad1.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_c10e31ea9018.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c10e31ea9018.npy new file mode 100644 index 00000000..bd611018 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c10e31ea9018.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_c188f8e0419b.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c188f8e0419b.npy new file mode 100644 index 00000000..f7a0d945 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c188f8e0419b.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_c85ba2b22117.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c85ba2b22117.npy new file mode 100644 index 00000000..09bce27a Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_c85ba2b22117.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_df1def1bf34f.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_df1def1bf34f.npy new file mode 100644 index 00000000..f82a3b11 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_df1def1bf34f.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_ee2b7806a1d3.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_ee2b7806a1d3.npy new file mode 100644 index 00000000..d6f197a0 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_ee2b7806a1d3.npy differ diff --git a/embeddings/Pipeline/scales/Panic-Disorder-9-1_f000756c08ce.npy b/embeddings/Pipeline/scales/Panic-Disorder-9-1_f000756c08ce.npy new file mode 100644 index 00000000..b77b85e5 Binary files /dev/null and b/embeddings/Pipeline/scales/Panic-Disorder-9-1_f000756c08ce.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_26847e97e20c.npy b/embeddings/Pipeline/scales/Relationship-7-1_26847e97e20c.npy new file mode 100644 index 00000000..cff2efc9 Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_26847e97e20c.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_51420c2d84d5.npy b/embeddings/Pipeline/scales/Relationship-7-1_51420c2d84d5.npy new file mode 100644 index 00000000..f80d7bf5 Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_51420c2d84d5.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_6af03c675aee.npy b/embeddings/Pipeline/scales/Relationship-7-1_6af03c675aee.npy new file mode 100644 index 00000000..9f3ae1f1 Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_6af03c675aee.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_7a89a792aaf1.npy b/embeddings/Pipeline/scales/Relationship-7-1_7a89a792aaf1.npy new file mode 100644 index 00000000..a8ee76e7 Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_7a89a792aaf1.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_7c018b2c9ee4.npy b/embeddings/Pipeline/scales/Relationship-7-1_7c018b2c9ee4.npy new file mode 100644 index 00000000..ca5d533f Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_7c018b2c9ee4.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_9aec512e8a40.npy b/embeddings/Pipeline/scales/Relationship-7-1_9aec512e8a40.npy new file mode 100644 index 00000000..9a935b0a Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_9aec512e8a40.npy differ diff --git a/embeddings/Pipeline/scales/Relationship-7-1_b355f1f2224e.npy b/embeddings/Pipeline/scales/Relationship-7-1_b355f1f2224e.npy new file mode 100644 index 00000000..aa94db1a Binary files /dev/null and b/embeddings/Pipeline/scales/Relationship-7-1_b355f1f2224e.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_189dbc695e54.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_189dbc695e54.npy new file mode 100644 index 00000000..74d8bfb1 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_189dbc695e54.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_389329bb0311.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_389329bb0311.npy new file mode 100644 index 00000000..bfad5554 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_389329bb0311.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_3f67c0427812.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_3f67c0427812.npy new file mode 100644 index 00000000..d999fa30 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_3f67c0427812.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_68bd9010cb62.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_68bd9010cb62.npy new file mode 100644 index 00000000..dc047197 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_68bd9010cb62.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_6f7c1654b65b.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_6f7c1654b65b.npy new file mode 100644 index 00000000..7b6f5d35 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_6f7c1654b65b.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_91ff2ffbe93f.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_91ff2ffbe93f.npy new file mode 100644 index 00000000..2008e498 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_91ff2ffbe93f.npy differ diff --git a/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_c0c8b1e8f2d9.npy b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_c0c8b1e8f2d9.npy new file mode 100644 index 00000000..bea49604 Binary files /dev/null and b/embeddings/Pipeline/scales/Separation-Anxiety-Disorder-7-1_c0c8b1e8f2d9.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_0cad729890cf.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_0cad729890cf.npy new file mode 100644 index 00000000..c56dac79 Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_0cad729890cf.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_3a0fd0320e46.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_3a0fd0320e46.npy new file mode 100644 index 00000000..f573e4f0 Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_3a0fd0320e46.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_3e1d63639e29.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_3e1d63639e29.npy new file mode 100644 index 00000000..4e7e423a Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_3e1d63639e29.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_75734632ff0a.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_75734632ff0a.npy new file mode 100644 index 00000000..2cce1e36 Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_75734632ff0a.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_75f6d420ac4a.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_75f6d420ac4a.npy new file mode 100644 index 00000000..23e134ca Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_75f6d420ac4a.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_aa949bef2430.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_aa949bef2430.npy new file mode 100644 index 00000000..0a24b51e Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_aa949bef2430.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_b23f9829732a.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_b23f9829732a.npy new file mode 100644 index 00000000..dbf5751b Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_b23f9829732a.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_c0580c0a872e.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_c0580c0a872e.npy new file mode 100644 index 00000000..a39b9daf Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_c0580c0a872e.npy differ diff --git a/embeddings/Pipeline/scales/Social-Phobia-9-1_faf5a5f9d653.npy b/embeddings/Pipeline/scales/Social-Phobia-9-1_faf5a5f9d653.npy new file mode 100644 index 00000000..808e4e42 Binary files /dev/null and b/embeddings/Pipeline/scales/Social-Phobia-9-1_faf5a5f9d653.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_002331177535.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_002331177535.npy new file mode 100644 index 00000000..064c6079 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_002331177535.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_35a75367346c.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_35a75367346c.npy new file mode 100644 index 00000000..ee3b0b7a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_35a75367346c.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_375c99037730.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_375c99037730.npy new file mode 100644 index 00000000..b9e701cc Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_375c99037730.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_3eb503e54bdb.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_3eb503e54bdb.npy new file mode 100644 index 00000000..d842c55d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_3eb503e54bdb.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_45a54dad9c6a.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_45a54dad9c6a.npy new file mode 100644 index 00000000..c3c83e7c Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_45a54dad9c6a.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_4a65f1e73c63.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_4a65f1e73c63.npy new file mode 100644 index 00000000..9f4271b6 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_4a65f1e73c63.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_6c36a10d139e.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_6c36a10d139e.npy new file mode 100644 index 00000000..893861bf Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_6c36a10d139e.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_7240d226463f.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_7240d226463f.npy new file mode 100644 index 00000000..38731357 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_7240d226463f.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_7f62afe4161e.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_7f62afe4161e.npy new file mode 100644 index 00000000..a3c5aa26 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_7f62afe4161e.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_9695850b0d49.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_9695850b0d49.npy new file mode 100644 index 00000000..54464754 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_9695850b0d49.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_a046c3945108.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_a046c3945108.npy new file mode 100644 index 00000000..6e6d53ec Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_a046c3945108.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_aa1db463e585.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_aa1db463e585.npy new file mode 100644 index 00000000..731d8c67 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_aa1db463e585.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_b7150038b92e.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_b7150038b92e.npy new file mode 100644 index 00000000..d8146eba Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_b7150038b92e.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_d84247c48724.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_d84247c48724.npy new file mode 100644 index 00000000..f2f23ebb Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_d84247c48724.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-15-1_fc6072094d5b.npy b/embeddings/Pipeline/scales/Total-Anxiety-15-1_fc6072094d5b.npy new file mode 100644 index 00000000..895529c7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-15-1_fc6072094d5b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-20-1_290567d80f41.npy b/embeddings/Pipeline/scales/Total-Anxiety-20-1_290567d80f41.npy new file mode 100644 index 00000000..669a6954 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-20-1_290567d80f41.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_06d53a42d7ce.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_06d53a42d7ce.npy new file mode 100644 index 00000000..b0af214e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_06d53a42d7ce.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_0c475f082316.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_0c475f082316.npy new file mode 100644 index 00000000..72ddd227 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_0c475f082316.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_0ca97e3e901b.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_0ca97e3e901b.npy new file mode 100644 index 00000000..202a9291 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_0ca97e3e901b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_100f34bce8f6.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_100f34bce8f6.npy new file mode 100644 index 00000000..f0060411 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_100f34bce8f6.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_140cfa3e39aa.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_140cfa3e39aa.npy new file mode 100644 index 00000000..8337a145 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_140cfa3e39aa.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_254089924605.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_254089924605.npy new file mode 100644 index 00000000..18c4994a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_254089924605.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_28c8123fd5ac.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_28c8123fd5ac.npy new file mode 100644 index 00000000..b66f2ea8 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_28c8123fd5ac.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_367a4b763e61.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_367a4b763e61.npy new file mode 100644 index 00000000..33b4790f Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_367a4b763e61.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_4273980c6c7b.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4273980c6c7b.npy new file mode 100644 index 00000000..d9bfbcba Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4273980c6c7b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_4653cd28e5d5.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4653cd28e5d5.npy new file mode 100644 index 00000000..fa45cc60 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4653cd28e5d5.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_4e8f19fd2bea.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4e8f19fd2bea.npy new file mode 100644 index 00000000..14982fc7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_4e8f19fd2bea.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_622e48178f31.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_622e48178f31.npy new file mode 100644 index 00000000..dfdfe9cf Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_622e48178f31.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_8009bf6df20b.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_8009bf6df20b.npy new file mode 100644 index 00000000..b9392a7e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_8009bf6df20b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_8d72d8402858.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_8d72d8402858.npy new file mode 100644 index 00000000..6c8023aa Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_8d72d8402858.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_9454f2d73113.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_9454f2d73113.npy new file mode 100644 index 00000000..a2a87274 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_9454f2d73113.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_99c5f1b97ee9.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_99c5f1b97ee9.npy new file mode 100644 index 00000000..af205079 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_99c5f1b97ee9.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_9fb4605d9c94.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_9fb4605d9c94.npy new file mode 100644 index 00000000..116f54cd Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_9fb4605d9c94.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_a659c31ea800.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_a659c31ea800.npy new file mode 100644 index 00000000..1d6cced7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_a659c31ea800.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_ae5f96ef8650.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_ae5f96ef8650.npy new file mode 100644 index 00000000..3d280a2d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_ae5f96ef8650.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_b05d17e14850.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_b05d17e14850.npy new file mode 100644 index 00000000..4811cd58 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_b05d17e14850.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_b77237bd5008.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_b77237bd5008.npy new file mode 100644 index 00000000..c31cca56 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_b77237bd5008.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_bc69ccab8edc.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_bc69ccab8edc.npy new file mode 100644 index 00000000..d1662c40 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_bc69ccab8edc.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_bd7e48400d59.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_bd7e48400d59.npy new file mode 100644 index 00000000..5cb54122 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_bd7e48400d59.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_c3064b6b2388.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c3064b6b2388.npy new file mode 100644 index 00000000..a9df098e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c3064b6b2388.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_c394f2616367.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c394f2616367.npy new file mode 100644 index 00000000..addd4ac5 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c394f2616367.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_c6bb581eb47f.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c6bb581eb47f.npy new file mode 100644 index 00000000..71d8576e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c6bb581eb47f.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_c86dc0efaa6e.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c86dc0efaa6e.npy new file mode 100644 index 00000000..e65b6fa5 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_c86dc0efaa6e.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_cfb92dddc1cc.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_cfb92dddc1cc.npy new file mode 100644 index 00000000..dbc3d073 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_cfb92dddc1cc.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_d101149730f7.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_d101149730f7.npy new file mode 100644 index 00000000..a0792e98 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_d101149730f7.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_d9aea855d848.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_d9aea855d848.npy new file mode 100644 index 00000000..0e92475d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_d9aea855d848.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_db7fadf642d6.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_db7fadf642d6.npy new file mode 100644 index 00000000..1671a50a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_db7fadf642d6.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_e1b192c60818.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_e1b192c60818.npy new file mode 100644 index 00000000..5a148144 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_e1b192c60818.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_e4fb5d71feb0.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_e4fb5d71feb0.npy new file mode 100644 index 00000000..97f473f9 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_e4fb5d71feb0.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_ef21bbe574ee.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_ef21bbe574ee.npy new file mode 100644 index 00000000..df471f8b Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_ef21bbe574ee.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_f37f1bebe0df.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_f37f1bebe0df.npy new file mode 100644 index 00000000..f9b56fcd Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_f37f1bebe0df.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_fc8ac2185f54.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_fc8ac2185f54.npy new file mode 100644 index 00000000..eaf56ae4 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_fc8ac2185f54.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-37-1_fdcb8feba815.npy b/embeddings/Pipeline/scales/Total-Anxiety-37-1_fdcb8feba815.npy new file mode 100644 index 00000000..e7936ff5 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-37-1_fdcb8feba815.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_02ed6b7aede4.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_02ed6b7aede4.npy new file mode 100644 index 00000000..8c606896 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_02ed6b7aede4.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_135c31890943.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_135c31890943.npy new file mode 100644 index 00000000..eb569404 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_135c31890943.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_1cc9248a2c0b.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_1cc9248a2c0b.npy new file mode 100644 index 00000000..5bb535c1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_1cc9248a2c0b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_204fc419a60b.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_204fc419a60b.npy new file mode 100644 index 00000000..441dfad4 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_204fc419a60b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_23b7322fc105.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_23b7322fc105.npy new file mode 100644 index 00000000..e52ac41f Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_23b7322fc105.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_2a01a42eb9f1.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_2a01a42eb9f1.npy new file mode 100644 index 00000000..91d3e3e1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_2a01a42eb9f1.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_35b66c6dde2b.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_35b66c6dde2b.npy new file mode 100644 index 00000000..c857c0a6 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_35b66c6dde2b.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_365f00829466.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_365f00829466.npy new file mode 100644 index 00000000..162f75a6 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_365f00829466.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3d0942187bbf.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3d0942187bbf.npy new file mode 100644 index 00000000..0fe6e5be Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3d0942187bbf.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3e02ae6037c4.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3e02ae6037c4.npy new file mode 100644 index 00000000..d7815eb1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_3e02ae6037c4.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_4d9e18dedf0d.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_4d9e18dedf0d.npy new file mode 100644 index 00000000..5c3f6237 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_4d9e18dedf0d.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_7c5efbc7de35.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_7c5efbc7de35.npy new file mode 100644 index 00000000..29817a04 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_7c5efbc7de35.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_82728aeab8d2.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_82728aeab8d2.npy new file mode 100644 index 00000000..4a269a1b Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_82728aeab8d2.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_87389794536f.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_87389794536f.npy new file mode 100644 index 00000000..88b8b77d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_87389794536f.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_8b1156a80792.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_8b1156a80792.npy new file mode 100644 index 00000000..a3d8e1fb Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_8b1156a80792.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_906b7deae8ed.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_906b7deae8ed.npy new file mode 100644 index 00000000..c902600e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_906b7deae8ed.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_91aeddd3022f.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_91aeddd3022f.npy new file mode 100644 index 00000000..05078e79 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_91aeddd3022f.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_96d33a0703b1.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_96d33a0703b1.npy new file mode 100644 index 00000000..4e1c3d66 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_96d33a0703b1.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a80f5799afae.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a80f5799afae.npy new file mode 100644 index 00000000..348a4942 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a80f5799afae.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a96a9230e2c2.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a96a9230e2c2.npy new file mode 100644 index 00000000..0f788cde Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_a96a9230e2c2.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_abf4d953ef49.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_abf4d953ef49.npy new file mode 100644 index 00000000..8b4511dc Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_abf4d953ef49.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_dab82d41fd68.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_dab82d41fd68.npy new file mode 100644 index 00000000..0942c8d8 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_dab82d41fd68.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e2872fa45fed.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e2872fa45fed.npy new file mode 100644 index 00000000..b377fffb Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e2872fa45fed.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e5dea251153c.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e5dea251153c.npy new file mode 100644 index 00000000..7d672ab1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_e5dea251153c.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_fcfd446046d1.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_fcfd446046d1.npy new file mode 100644 index 00000000..0354a4b1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-25-1_fcfd446046d1.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0d8188820adf.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0d8188820adf.npy new file mode 100644 index 00000000..73615a1a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0d8188820adf.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0f0beb097402.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0f0beb097402.npy new file mode 100644 index 00000000..3c38cbf7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_0f0beb097402.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1398fa5077f8.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1398fa5077f8.npy new file mode 100644 index 00000000..2bae4378 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1398fa5077f8.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_13d578fab1c5.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_13d578fab1c5.npy new file mode 100644 index 00000000..05e0fbc5 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_13d578fab1c5.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1ca9a122edcb.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1ca9a122edcb.npy new file mode 100644 index 00000000..c3b5360a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1ca9a122edcb.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1d01e8ac44d2.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1d01e8ac44d2.npy new file mode 100644 index 00000000..e5c89a8f Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1d01e8ac44d2.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1e401ded2090.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1e401ded2090.npy new file mode 100644 index 00000000..962e2562 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_1e401ded2090.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_23f10d2782a9.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_23f10d2782a9.npy new file mode 100644 index 00000000..616708a1 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_23f10d2782a9.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_27b5cec4cf34.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_27b5cec4cf34.npy new file mode 100644 index 00000000..b874a092 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_27b5cec4cf34.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_2fd346520a8a.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_2fd346520a8a.npy new file mode 100644 index 00000000..45fd8152 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_2fd346520a8a.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3c815a27b907.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3c815a27b907.npy new file mode 100644 index 00000000..405327cc Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3c815a27b907.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3fe63cb8430a.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3fe63cb8430a.npy new file mode 100644 index 00000000..72105c5d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_3fe63cb8430a.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_40e25974bc62.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_40e25974bc62.npy new file mode 100644 index 00000000..6c53e71d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_40e25974bc62.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4188ef31d050.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4188ef31d050.npy new file mode 100644 index 00000000..de33d345 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4188ef31d050.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_46ca17f5d5f9.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_46ca17f5d5f9.npy new file mode 100644 index 00000000..d7a93922 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_46ca17f5d5f9.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4d35a432e93c.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4d35a432e93c.npy new file mode 100644 index 00000000..1d74792d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4d35a432e93c.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4f4bbb2035ea.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4f4bbb2035ea.npy new file mode 100644 index 00000000..6053003b Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_4f4bbb2035ea.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_51de56db8a4d.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_51de56db8a4d.npy new file mode 100644 index 00000000..f8318eba Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_51de56db8a4d.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_54a9e412461a.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_54a9e412461a.npy new file mode 100644 index 00000000..1eb9e6ed Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_54a9e412461a.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_55ed5bc4a733.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_55ed5bc4a733.npy new file mode 100644 index 00000000..03ff4a00 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_55ed5bc4a733.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_596e5fe430ed.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_596e5fe430ed.npy new file mode 100644 index 00000000..965332ac Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_596e5fe430ed.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_5a5e29e84f5e.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_5a5e29e84f5e.npy new file mode 100644 index 00000000..a6caeed0 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_5a5e29e84f5e.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_630eede4b317.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_630eede4b317.npy new file mode 100644 index 00000000..414a6f0e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_630eede4b317.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_660a57dbb899.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_660a57dbb899.npy new file mode 100644 index 00000000..71350864 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_660a57dbb899.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_66cceaf346fb.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_66cceaf346fb.npy new file mode 100644 index 00000000..5a757b99 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_66cceaf346fb.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_728189f57985.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_728189f57985.npy new file mode 100644 index 00000000..84d86af7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_728189f57985.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_73ee147e605f.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_73ee147e605f.npy new file mode 100644 index 00000000..6b5b496a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_73ee147e605f.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746c089e766d.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746c089e766d.npy new file mode 100644 index 00000000..137af36c Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746c089e766d.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746e96af2a18.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746e96af2a18.npy new file mode 100644 index 00000000..0595349b Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_746e96af2a18.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_752d387d6d38.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_752d387d6d38.npy new file mode 100644 index 00000000..39ec61e4 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_752d387d6d38.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_759798ce4054.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_759798ce4054.npy new file mode 100644 index 00000000..68e2597d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_759798ce4054.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_78b83e715427.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_78b83e715427.npy new file mode 100644 index 00000000..eb72cb01 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_78b83e715427.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_7ba518851728.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_7ba518851728.npy new file mode 100644 index 00000000..d175f402 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_7ba518851728.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a116826db9c4.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a116826db9c4.npy new file mode 100644 index 00000000..c3ed70fa Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a116826db9c4.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a24039550c03.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a24039550c03.npy new file mode 100644 index 00000000..2226039e Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a24039550c03.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a6d4ce350490.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a6d4ce350490.npy new file mode 100644 index 00000000..1947cf81 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_a6d4ce350490.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b1e97cf679a3.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b1e97cf679a3.npy new file mode 100644 index 00000000..8011b960 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b1e97cf679a3.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b3a3aa9f9352.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b3a3aa9f9352.npy new file mode 100644 index 00000000..f0553b05 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b3a3aa9f9352.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b71020533f28.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b71020533f28.npy new file mode 100644 index 00000000..55eb64a7 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_b71020533f28.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c2ad16f63fb7.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c2ad16f63fb7.npy new file mode 100644 index 00000000..e8f1e75a Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c2ad16f63fb7.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c9c50f8663a8.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c9c50f8663a8.npy new file mode 100644 index 00000000..52f68c4c Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_c9c50f8663a8.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cc4cd5212681.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cc4cd5212681.npy new file mode 100644 index 00000000..3dcaffde Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cc4cd5212681.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cfb5d4066db5.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cfb5d4066db5.npy new file mode 100644 index 00000000..874ac84d Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_cfb5d4066db5.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_d7bf09590a34.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_d7bf09590a34.npy new file mode 100644 index 00000000..81c1d131 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_d7bf09590a34.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_e291c4799676.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_e291c4799676.npy new file mode 100644 index 00000000..347d3fdc Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_e291c4799676.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_f6e139c5c7df.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_f6e139c5c7df.npy new file mode 100644 index 00000000..843cdb00 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_f6e139c5c7df.npy differ diff --git a/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_fd26365afe26.npy b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_fd26365afe26.npy new file mode 100644 index 00000000..46264e04 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Anxiety-and-Depression-47-1_fd26365afe26.npy differ diff --git a/embeddings/Pipeline/scales/Total-Depression-5-1_1779a09b98b8.npy b/embeddings/Pipeline/scales/Total-Depression-5-1_1779a09b98b8.npy new file mode 100644 index 00000000..0cff8c20 Binary files /dev/null and b/embeddings/Pipeline/scales/Total-Depression-5-1_1779a09b98b8.npy differ diff --git a/embeddings/Pipeline/scales/manifest.json b/embeddings/Pipeline/scales/manifest.json new file mode 100644 index 00000000..ac51131b --- /dev/null +++ b/embeddings/Pipeline/scales/manifest.json @@ -0,0 +1,870 @@ +[ +{ +"hash": "75f6d420ac4a0fc7d54e9eb2a5b267c0a3b91e24ff6afb3f4e12b25da06b61f8", +"file": "Social-Phobia-9-1_75f6d420ac4a.npy" +}, +{ +"hash": "aa949bef2430053fa7f5c1012bb6931c6b4ef046a0e14f20ac1308d2e9666892", +"file": "Social-Phobia-9-1_aa949bef2430.npy" +}, +{ +"hash": "3e1d63639e296f30ec8329e1a4969cb6adc72758b23f6c09c2ee130a99dc20db", +"file": "Social-Phobia-9-1_3e1d63639e29.npy" +}, +{ +"hash": "b23f9829732ad22308645b9bef430ca9e92cc9cbe94a00cef6d97296168b30e8", +"file": "Social-Phobia-9-1_b23f9829732a.npy" +}, +{ +"hash": "faf5a5f9d653c0972a460f44f4a706efcae3138a28dde09c3ec1c77d39568038", +"file": "Social-Phobia-9-1_faf5a5f9d653.npy" +}, +{ +"hash": "c0580c0a872e59e076633a026efd313a8a1b1720d8fd3e974f02c32a771b1e10", +"file": "Social-Phobia-9-1_c0580c0a872e.npy" +}, +{ +"hash": "3a0fd0320e46c7b724ed36dd6eb3865d265ac6879aca0b0292cb62423ff59ffa", +"file": "Social-Phobia-9-1_3a0fd0320e46.npy" +}, +{ +"hash": "75734632ff0af45fa832d0a77067288c68dbda0c3cea66903846f7831d1ad23f", +"file": "Social-Phobia-9-1_75734632ff0a.npy" +}, +{ +"hash": "0cad729890cf9d28681d1351818d6db97d7cdb8952d51527ad32bd1ff5be4b82", +"file": "Social-Phobia-9-1_0cad729890cf.npy" +}, +{ +"hash": "82728aeab8d23d8b2c4bdb4ad29cae7e3c35b6b769599a62d22f3d1154129864", +"file": "Total-Anxiety-and-Depression-25-1_82728aeab8d2.npy" +}, +{ +"hash": "dab82d41fd68521d1cd58eedf2addfa998b55eb53d7f9d21edd355ba987734ca", +"file": "Total-Anxiety-and-Depression-25-1_dab82d41fd68.npy" +}, +{ +"hash": "204fc419a60b00c24dd274223c96523ab3f6de050c75362cb5461b721bbbaf96", +"file": "Total-Anxiety-and-Depression-25-1_204fc419a60b.npy" +}, +{ +"hash": "906b7deae8ed87f967dbd1887721d641f64523aa797ca4a370ac16161307ae53", +"file": "Total-Anxiety-and-Depression-25-1_906b7deae8ed.npy" +}, +{ +"hash": "87389794536f1318eafc0c2fd860673e1646ac1beda0dbfe8f994ee7d774b11e", +"file": "Total-Anxiety-and-Depression-25-1_87389794536f.npy" +}, +{ +"hash": "1cc9248a2c0b769649f5f37edc45887964454a6fcd7d514d4c38b27a28c60846", +"file": "Total-Anxiety-and-Depression-25-1_1cc9248a2c0b.npy" +}, +{ +"hash": "fcfd446046d10c3c09cc89259b403d07882c74b887dbe9a0df37719e1389f78a", +"file": "Total-Anxiety-and-Depression-25-1_fcfd446046d1.npy" +}, +{ +"hash": "23b7322fc105a07e3f052eff6e1a3bb21ad8f3d4d780350eb166966ccb3aff61", +"file": "Total-Anxiety-and-Depression-25-1_23b7322fc105.npy" +}, +{ +"hash": "135c31890943bea3b435e5aa692a2fd2d9a744991e26e3538f02c9f5af0127d4", +"file": "Total-Anxiety-and-Depression-25-1_135c31890943.npy" +}, +{ +"hash": "3d0942187bbf17294ca983a213d26e25e4d50a24e1863fa67d341ca6a420fb17", +"file": "Total-Anxiety-and-Depression-25-1_3d0942187bbf.npy" +}, +{ +"hash": "35b66c6dde2bd7d9998cbe2feb1455d18612e653282a7bd48eac56a693288a56", +"file": "Total-Anxiety-and-Depression-25-1_35b66c6dde2b.npy" +}, +{ +"hash": "abf4d953ef49b705eb0da64f239e23270787ec0134d2c0058f9606864e0ba288", +"file": "Total-Anxiety-and-Depression-25-1_abf4d953ef49.npy" +}, +{ +"hash": "8b1156a80792c8c8edd3a8aabaad13c1f614f9692d210544dd45c2274f011fc1", +"file": "Total-Anxiety-and-Depression-25-1_8b1156a80792.npy" +}, +{ +"hash": "7c5efbc7de3536001d9e36bd1442225e655749abf160637b719335f92d7e4015", +"file": "Total-Anxiety-and-Depression-25-1_7c5efbc7de35.npy" +}, +{ +"hash": "3e02ae6037c4f18c297b45c0fcaa09a25ba8e52b2ac006f2ade18cb5616c0d80", +"file": "Total-Anxiety-and-Depression-25-1_3e02ae6037c4.npy" +}, +{ +"hash": "02ed6b7aede4a5289dbab6ff7dddfadbf3984d8b53e3a23a1508638d46d47cee", +"file": "Total-Anxiety-and-Depression-25-1_02ed6b7aede4.npy" +}, +{ +"hash": "a80f5799afaeac2a05b88c73b740bf4f296dfd38110d310b872fa1d53ee4cdae", +"file": "Total-Anxiety-and-Depression-25-1_a80f5799afae.npy" +}, +{ +"hash": "91aeddd3022f9f054d306c6ca285d1a61e30f7e588642121312c5276be247c93", +"file": "Total-Anxiety-and-Depression-25-1_91aeddd3022f.npy" +}, +{ +"hash": "365f008294661135b719ca708a498e2226f86ecfdbaf2539b9d03e9b10011f95", +"file": "Total-Anxiety-and-Depression-25-1_365f00829466.npy" +}, +{ +"hash": "2a01a42eb9f1ca67c4c2d417ac523644a3a8b780cf607df2dd7e73e1e5ef0ccb", +"file": "Total-Anxiety-and-Depression-25-1_2a01a42eb9f1.npy" +}, +{ +"hash": "a96a9230e2c2d3c12ee3792995d5da27e5ceba51a4c87f50e9b119c0bb4a011b", +"file": "Total-Anxiety-and-Depression-25-1_a96a9230e2c2.npy" +}, +{ +"hash": "e5dea251153c63739ffd01357ae29ae8cec3a9e26faa21a785cbd187bf767a6e", +"file": "Total-Anxiety-and-Depression-25-1_e5dea251153c.npy" +}, +{ +"hash": "96d33a0703b162a6b87f2e0fda6eea22f125fc9b5ac17f55c6ca22d94fe2a6b6", +"file": "Total-Anxiety-and-Depression-25-1_96d33a0703b1.npy" +}, +{ +"hash": "e2872fa45fed01a0a16123b55f6170731cd92862e5e80cd3831e04ad9f251cfe", +"file": "Total-Anxiety-and-Depression-25-1_e2872fa45fed.npy" +}, +{ +"hash": "4d9e18dedf0d05d91301892b64cab70461a1964e7c03550fdd0b7c876c4f4d29", +"file": "Total-Anxiety-and-Depression-25-1_4d9e18dedf0d.npy" +}, +{ +"hash": "1779a09b98b85036d7c9560ec091850f88b9d70a2a8b2f6c05102ae75ba778d3", +"file": "Total-Depression-5-1_1779a09b98b8.npy" +}, +{ +"hash": "290567d80f41bb651cfe98aa9c86c830d7a4ac987456951b38449577206c4569", +"file": "Total-Anxiety-20-1_290567d80f41.npy" +}, +{ +"hash": "6af03c675aeec89b26188340251a9700aa7d87e2e1cf097c336c45302bf63af0", +"file": "Relationship-7-1_6af03c675aee.npy" +}, +{ +"hash": "26847e97e20ca2b00668c0c3f2bfd52a9c930cd39109c4cec15a675e033ff740", +"file": "Relationship-7-1_26847e97e20c.npy" +}, +{ +"hash": "51420c2d84d558b4036a915744651ad096c95ed079914c1c32877ac054e6f0e4", +"file": "Relationship-7-1_51420c2d84d5.npy" +}, +{ +"hash": "b355f1f2224e0ed4b016eacbe376f455abb99fa0f255ac4ba9a5096028f83bf1", +"file": "Relationship-7-1_b355f1f2224e.npy" +}, +{ +"hash": "7a89a792aaf1b8c14e18776827f2e3391151435673d8649a0ddecbc7791e6d89", +"file": "Relationship-7-1_7a89a792aaf1.npy" +}, +{ +"hash": "7c018b2c9ee4f7f86f0d2e3acbe81f1dfdf0cb9aebcfe300543cf6e0f0e7c85a", +"file": "Relationship-7-1_7c018b2c9ee4.npy" +}, +{ +"hash": "9aec512e8a40d786dc8bf0bf50c517664d93701147db04a5ad6518bfdf5eca76", +"file": "Relationship-7-1_9aec512e8a40.npy" +}, +{ +"hash": "6c8b8620245c2d6cf266785938fd19ffeaef8d356307b46704ec0cb2ad08115a", +"file": "Expectancy-7-1_6c8b8620245c.npy" +}, +{ +"hash": "2df91a6315e8b498d86ca19d5e885e5836a67ef6e52a103b6276217558bf1e50", +"file": "Expectancy-7-1_2df91a6315e8.npy" +}, +{ +"hash": "8d7d6ea6d58067f93ccc4d89eb9d4f365bc506598a39b6e65dc1c0430b4a7484", +"file": "Expectancy-7-1_8d7d6ea6d580.npy" +}, +{ +"hash": "7a99106bff02f1074f9ee137eb020f0a5397a86e1a2c25a4d5e183691e0a61e0", +"file": "Expectancy-7-1_7a99106bff02.npy" +}, +{ +"hash": "8bdadc157d2226544b88692145e3a266d6e78c3f3aeffeab91c50ba6106aaf84", +"file": "Expectancy-7-1_8bdadc157d22.npy" +}, +{ +"hash": "05cd391ca571681da3d972681db5b87773d297cb90f94ab06e1507c66dd609db", +"file": "Expectancy-7-1_05cd391ca571.npy" +}, +{ +"hash": "d28a60031efe4ebed8c11881efb371e2dfebad983286c814786e098a99bcf2ff", +"file": "Expectancy-7-1_d28a60031efe.npy" +}, +{ +"hash": "5b51b2f5716587c4e41546c5a138fbd9012295c04177faca3c2117bcc0e01679", +"file": "Attendance-7-1_5b51b2f57165.npy" +}, +{ +"hash": "d35dfe13f6d8466b3b879c76c78e512998222af8152fe8fa5a2acfabe8932e4a", +"file": "Attendance-7-1_d35dfe13f6d8.npy" +}, +{ +"hash": "72693007f0ab61083c8a48d68b46a3cb141e8f1075189bfc68f6e68c947c8cd5", +"file": "Attendance-7-1_72693007f0ab.npy" +}, +{ +"hash": "793b86d9629c69c9fa76d99edb7829631b46f6fc3a0dc55d5d25e941b14f7100", +"file": "Attendance-7-1_793b86d9629c.npy" +}, +{ +"hash": "781c95e141f35158edb7cccfad6703aab6a010311cba56f9c38267d99e66979f", +"file": "Attendance-7-1_781c95e141f3.npy" +}, +{ +"hash": "ad7af81a0179ac900a4a990780abfd08a26976117ee32c0bdb41a29c3ecf739e", +"file": "Attendance-7-1_ad7af81a0179.npy" +}, +{ +"hash": "f0cb732139085cf449d83cc082c5224b5f63946587c571ee4df295843fe7862d", +"file": "Attendance-7-1_f0cb73213908.npy" +}, +{ +"hash": "526bb412bcde71ab5c91f3da9c8af261da68b70cbf559a08f2b981f3668f743c", +"file": "Clarity-7-1_526bb412bcde.npy" +}, +{ +"hash": "89ae60f6943cb69a4e3a494f46326243e649daa8cd17ccf668980573cc9af933", +"file": "Clarity-7-1_89ae60f6943c.npy" +}, +{ +"hash": "9107c537a7e99e725bb72282cea087182225f4cf4db52f0c3a192faa3e9dbf61", +"file": "Clarity-7-1_9107c537a7e9.npy" +}, +{ +"hash": "15ce1f7dbb0aac304f7af8876f32c2fb09bea8723702dfbc5d2e52b6281e3d3d", +"file": "Clarity-7-1_15ce1f7dbb0a.npy" +}, +{ +"hash": "c7b411d1b91ba2989a93eb7c9416e12c4127017066f6534e6ebd2d7f33f7ef37", +"file": "Clarity-7-1_c7b411d1b91b.npy" +}, +{ +"hash": "5a4a3312a31554855e01eb9e6d6cf8600b67c07e0fd10af04b7fac2ac26f27a6", +"file": "Clarity-7-1_5a4a3312a315.npy" +}, +{ +"hash": "c5a5663e5643b0a07e11ef66bc6bdcdf5918418f86e35e89591e38b8e0fa81c5", +"file": "Clarity-7-1_c5a5663e5643.npy" +}, +{ +"hash": "ef674a12d8572f3acdc83286ec34ad083bf1f58e917472248fc11f78d81c752b", +"file": "Homework-7-1_ef674a12d857.npy" +}, +{ +"hash": "60386a3485376eb3e28a77529b0d3fcccdd8ae79587977f45e709b8f89b4f6e1", +"file": "Homework-7-1_60386a348537.npy" +}, +{ +"hash": "828266363b2cd9aa3da8719a54079631f3db943668b7759114cde991f6ca34ec", +"file": "Homework-7-1_828266363b2c.npy" +}, +{ +"hash": "c06c7129715839e08f60d3cec87f682f949a6a4fbb468e37769fe59c136e871e", +"file": "Homework-7-1_c06c71297158.npy" +}, +{ +"hash": "d0832b972ae5451fa33355ab32abd9f17e7b856e9e0ae1f8aa93b446491a03ba", +"file": "Homework-7-1_d0832b972ae5.npy" +}, +{ +"hash": "19559c495787156da5bf5b94ade0a9d51802338b60747d7993361b46c9b880d6", +"file": "Homework-7-1_19559c495787.npy" +}, +{ +"hash": "dfcf683df3538703e59cc05f739d982fea0d10698377d32866600afa4bf0ba3c", +"file": "Homework-7-1_dfcf683df353.npy" +}, +{ +"hash": "ecc99b0c39335046b8fc8c087b71cb66d215d89317ea51d9ba9f8b5417fb4140", +"file": "Depression-9-1_ecc99b0c3933.npy" +}, +{ +"hash": "93b3a2d9ac3b9759c0ceb18d0a4ee4fbe88934b91ee0bcfffe6140c4303dfcf9", +"file": "Depression-9-1_93b3a2d9ac3b.npy" +}, +{ +"hash": "b2775b819670ea0cc236fed23ef2729b7b5b306daf937bf9ea3acb2a5acb3098", +"file": "Depression-9-1_b2775b819670.npy" +}, +{ +"hash": "e65be29383759654dc58da64cc5a423fe4d95cd1348391dfa332a1bedb42270e", +"file": "Depression-9-1_e65be2938375.npy" +}, +{ +"hash": "cc11e54d7d0c1b0828063c3ca628abf4aa7976fa3ee82320b78519c31021eb64", +"file": "Depression-9-1_cc11e54d7d0c.npy" +}, +{ +"hash": "17ff245b995910d04497f7583a1ccd30efeb5097c1794c59abab708c6a444738", +"file": "Depression-9-1_17ff245b9959.npy" +}, +{ +"hash": "fb3a6b366c20cec2c5c2f1258f5570eef7ef2386d183e8d289bdf63046fd704a", +"file": "Depression-9-1_fb3a6b366c20.npy" +}, +{ +"hash": "ad83328b0eddaf1795348aa09e5e0e9ada4af2c281d5e57afbabc70f14735701", +"file": "Depression-9-1_ad83328b0edd.npy" +}, +{ +"hash": "5c114c45a6e48509269b79587e3f38b601e70972998f12b553e603039fddfdf7", +"file": "Depression-9-1_5c114c45a6e4.npy" +}, +{ +"hash": "6056253c583f0846f8021da7eb77aa9837a2465da130f7c1f6944c56c1654766", +"file": "Panic-Disorder-9-1_6056253c583f.npy" +}, +{ +"hash": "c10e31ea90180c3d736004155d0a4255a07de7a13939294c618b91033cfe7e54", +"file": "Panic-Disorder-9-1_c10e31ea9018.npy" +}, +{ +"hash": "ee2b7806a1d3531e1ef67ec88e0a776fa73868a44b8d0a6cbf2bfdbc2339a6d7", +"file": "Panic-Disorder-9-1_ee2b7806a1d3.npy" +}, +{ +"hash": "8eb0b6b27ad1d6abd2d38566ee4fae5665fd69bceb9544fd83a8b202a1fac9ab", +"file": "Panic-Disorder-9-1_8eb0b6b27ad1.npy" +}, +{ +"hash": "df1def1bf34fb5b9c4d4111723ef7b4f101aca8ae48a62db08cd4bb9ce2b0242", +"file": "Panic-Disorder-9-1_df1def1bf34f.npy" +}, +{ +"hash": "3e0e35a874b2d4023744af5aa04caab11033f936fcb0f792b26a644423d34139", +"file": "Panic-Disorder-9-1_3e0e35a874b2.npy" +}, +{ +"hash": "c188f8e0419b08ff77c0f6788513788997c70be44a533f95f318495f80d9df1f", +"file": "Panic-Disorder-9-1_c188f8e0419b.npy" +}, +{ +"hash": "c85ba2b221172bd7f99977a70c6e80d3404d16f4fb02b62210662e357a01841c", +"file": "Panic-Disorder-9-1_c85ba2b22117.npy" +}, +{ +"hash": "f000756c08ce14044cb2511c44693e8c46160ac8f04e034907d688aaa9772ebd", +"file": "Panic-Disorder-9-1_f000756c08ce.npy" +}, +{ +"hash": "4271e481ad508995e03de116bcdd0abda46f04cd69b9231217ce5ba56006303c", +"file": "Generalized-Anxiety-Disorder-6-1_4271e481ad50.npy" +}, +{ +"hash": "181c122497842b0974f8fd4ba2379c9ab24322880f8ddb10f1c61d8ae4a6fb12", +"file": "Generalized-Anxiety-Disorder-6-1_181c12249784.npy" +}, +{ +"hash": "8b450a6d1509af4b1f83bfab59a0ac03c515e3dd6d1c119b843693f314a7c47d", +"file": "Generalized-Anxiety-Disorder-6-1_8b450a6d1509.npy" +}, +{ +"hash": "f506f69a9714ca8c12cedc61731cc1819c98528140d9a321dc90274deb39d337", +"file": "Generalized-Anxiety-Disorder-6-1_f506f69a9714.npy" +}, +{ +"hash": "912c27fb3b6266d5d32c0180e72056deb8d1e7f4ff0c1e8f8858b56445e568cc", +"file": "Generalized-Anxiety-Disorder-6-1_912c27fb3b62.npy" +}, +{ +"hash": "aa2484c463c4c51ebc00e7cea0dd2ab1b81520bf71129e81ed3bd12592a21b56", +"file": "Generalized-Anxiety-Disorder-6-1_aa2484c463c4.npy" +}, +{ +"hash": "1cf415ad0a5993adfdd5de7df398c2b71f99d80ed6cd8f6bb2f6a8a041a86cf1", +"file": "Major-Depressive-Disorder-10-1_1cf415ad0a59.npy" +}, +{ +"hash": "203b5d4ad4a220f4a8c45d54d058974226c794f80236ab1faffb6ef15bda4c41", +"file": "Major-Depressive-Disorder-10-1_203b5d4ad4a2.npy" +}, +{ +"hash": "14b672ece1fd1f2b6d8696921a5762c60d3ea56be809c34126378724da6e34c1", +"file": "Major-Depressive-Disorder-10-1_14b672ece1fd.npy" +}, +{ +"hash": "af46e256b243389d2aca0ca337292765c956d18075d72663827eee021fbf496d", +"file": "Major-Depressive-Disorder-10-1_af46e256b243.npy" +}, +{ +"hash": "ed351704e7bb98a5d0e4e96c704171f6d634936584f9cd42bc6e3e7986680d20", +"file": "Major-Depressive-Disorder-10-1_ed351704e7bb.npy" +}, +{ +"hash": "3f7e54b17c4be805d9659e2f12a1dd9816c88cb185186db74262b93181502552", +"file": "Major-Depressive-Disorder-10-1_3f7e54b17c4b.npy" +}, +{ +"hash": "76874d7fc5ec0229431e4cdd858b6cb5df6f1ab3cd59dd2687e0628f25d82258", +"file": "Major-Depressive-Disorder-10-1_76874d7fc5ec.npy" +}, +{ +"hash": "109ea45d196ac705380ba8376aa09ec4ec0c2a7f426f5b4359cee9ee2c26eedb", +"file": "Major-Depressive-Disorder-10-1_109ea45d196a.npy" +}, +{ +"hash": "f11566e5639e23fd9bb8182965043f04aa32e89febaa99b1602670124404448b", +"file": "Major-Depressive-Disorder-10-1_f11566e5639e.npy" +}, +{ +"hash": "a2e3ee1a62b3026eba16602faec09aa67aaa853497cc2fba66795aaae5af534d", +"file": "Major-Depressive-Disorder-10-1_a2e3ee1a62b3.npy" +}, +{ +"hash": "91ff2ffbe93feefea8492e2031c05a0a38247d22f319844edd0988d9ddecc79d", +"file": "Separation-Anxiety-Disorder-7-1_91ff2ffbe93f.npy" +}, +{ +"hash": "389329bb03111776f69aea359b2d7b4efd8ad954652739907e703b2a1ddebc48", +"file": "Separation-Anxiety-Disorder-7-1_389329bb0311.npy" +}, +{ +"hash": "3f67c0427812c552439d78461436dfadef36a44e6322663d3da61905411cd776", +"file": "Separation-Anxiety-Disorder-7-1_3f67c0427812.npy" +}, +{ +"hash": "c0c8b1e8f2d997ad21ce0516aa010300b2385d18b2f6bf181cb75e153dfbe9a1", +"file": "Separation-Anxiety-Disorder-7-1_c0c8b1e8f2d9.npy" +}, +{ +"hash": "68bd9010cb626557ecb8806f70465eee8e7cefd60a12e3e787cb8b17495d497b", +"file": "Separation-Anxiety-Disorder-7-1_68bd9010cb62.npy" +}, +{ +"hash": "6f7c1654b65ba5ee0300627215e1c2efb7cbb47141e6026e3535b410c289fd6b", +"file": "Separation-Anxiety-Disorder-7-1_6f7c1654b65b.npy" +}, +{ +"hash": "189dbc695e542d8f08471d0d70cce885b3d3c30026266a1cec570d2cc94c3dab", +"file": "Separation-Anxiety-Disorder-7-1_189dbc695e54.npy" +}, +{ +"hash": "b62428d42b65ff715fbe7ad8fa43555d4476816b5085c1c3f155b5051f018a77", +"file": "Obsessive-Compulsive-Disorder-6-1_b62428d42b65.npy" +}, +{ +"hash": "a6d9fa25586a4b06feb04207e3ad6d1f6ded045c7aae2047c15a193f6ed524bd", +"file": "Obsessive-Compulsive-Disorder-6-1_a6d9fa25586a.npy" +}, +{ +"hash": "2f2e7042df9a4422e93d919d08afaf95a1bf73fc7f8c94f66f2fd6d403ea7955", +"file": "Obsessive-Compulsive-Disorder-6-1_2f2e7042df9a.npy" +}, +{ +"hash": "f43d161cec138aefc01ccb83fd65183662d10aeb7b618289007664404b1fc40e", +"file": "Obsessive-Compulsive-Disorder-6-1_f43d161cec13.npy" +}, +{ +"hash": "d14b0454cc00ca00f0182273477947413c4d5059bf5de35ccacf9eb339b20bb6", +"file": "Obsessive-Compulsive-Disorder-6-1_d14b0454cc00.npy" +}, +{ +"hash": "83c9c5180f7638da69e8f6445428f9a5a95e2dde061b02d34b691826eceb973c", +"file": "Obsessive-Compulsive-Disorder-6-1_83c9c5180f76.npy" +}, +{ +"hash": "d9aea855d848b34b9e3a19c4dd306e08584b16bc060f88a73da4cd3f086800df", +"file": "Total-Anxiety-37-1_d9aea855d848.npy" +}, +{ +"hash": "8009bf6df20bf87279328ce313197896d0bf78b1274c13f8b2bdbb6d5e981a30", +"file": "Total-Anxiety-37-1_8009bf6df20b.npy" +}, +{ +"hash": "0ca97e3e901b4036bb483d7b1d75255599f0e796bba8338ea2b7d88b2d0b78b6", +"file": "Total-Anxiety-37-1_0ca97e3e901b.npy" +}, +{ +"hash": "622e48178f31b53cece9ce765e1f6edce330a4bd7fee81b43a453e079548b48c", +"file": "Total-Anxiety-37-1_622e48178f31.npy" +}, +{ +"hash": "fc8ac2185f54121cc94ff226442df4540e2cbe084e497865a2c7882b454ac038", +"file": "Total-Anxiety-37-1_fc8ac2185f54.npy" +}, +{ +"hash": "db7fadf642d601fea2f02b2c21e39dfc2499e224e39cdcdf38f3273fe0ec5707", +"file": "Total-Anxiety-37-1_db7fadf642d6.npy" +}, +{ +"hash": "cfb92dddc1cc27cdb38880479aea8d5e754cf02f120fc218ae772502ea5e9ea1", +"file": "Total-Anxiety-37-1_cfb92dddc1cc.npy" +}, +{ +"hash": "4273980c6c7b5f281c20a69ffd7e762ba66861651f256066650d46ba983007b8", +"file": "Total-Anxiety-37-1_4273980c6c7b.npy" +}, +{ +"hash": "c3064b6b2388e69466e8dde51f827d9a8a17907ece86a14a6a432a48acfc96fb", +"file": "Total-Anxiety-37-1_c3064b6b2388.npy" +}, +{ +"hash": "367a4b763e6145ebb19b63c2c9ad1517b66a0db7f8a750a9da3bb76e8cad0e4c", +"file": "Total-Anxiety-37-1_367a4b763e61.npy" +}, +{ +"hash": "06d53a42d7cefaa8f3c2e4dd00d708960e5f9806094f440d09db514801c6c922", +"file": "Total-Anxiety-37-1_06d53a42d7ce.npy" +}, +{ +"hash": "99c5f1b97ee95f63b197be1eb6ac26a2e39a8599430d0fcfecb0cd53b95a3eac", +"file": "Total-Anxiety-37-1_99c5f1b97ee9.npy" +}, +{ +"hash": "140cfa3e39aa63c973b0159d873a94531312382bbc7afc1aa575b0d889347a4c", +"file": "Total-Anxiety-37-1_140cfa3e39aa.npy" +}, +{ +"hash": "c86dc0efaa6ea53bde4c9c02e6cc05454f60f7fae20980c8d2fb87e21fd09fd9", +"file": "Total-Anxiety-37-1_c86dc0efaa6e.npy" +}, +{ +"hash": "bc69ccab8edc3fd99f8132d1ff1182982c78dbe9e67678182ff9f641779e0c00", +"file": "Total-Anxiety-37-1_bc69ccab8edc.npy" +}, +{ +"hash": "c394f26163671b49915ed4eafb7727b8205615879f659b8619fa4d0cf50b3948", +"file": "Total-Anxiety-37-1_c394f2616367.npy" +}, +{ +"hash": "b05d17e14850a104276133bf862b155dbbc98098d2a4b2ebd109ad9db6a8545e", +"file": "Total-Anxiety-37-1_b05d17e14850.npy" +}, +{ +"hash": "0c475f08231685b60846fc196374cbb2b38ab13853c4fa3129d70e2ae3412116", +"file": "Total-Anxiety-37-1_0c475f082316.npy" +}, +{ +"hash": "e4fb5d71feb0dd84b63fdb7279df4d1b4f72273e5c5d0fe1e4bdd3177142c12d", +"file": "Total-Anxiety-37-1_e4fb5d71feb0.npy" +}, +{ +"hash": "100f34bce8f60da6e622d4e4e040606094c5e6c5a58eeae6db52318ab532531a", +"file": "Total-Anxiety-37-1_100f34bce8f6.npy" +}, +{ +"hash": "28c8123fd5ac6ef57469be96debb7f1c247379f3b51e833db56d752a8209f6a6", +"file": "Total-Anxiety-37-1_28c8123fd5ac.npy" +}, +{ +"hash": "c6bb581eb47f0ecffc5989a14c4d5de82576aa7ef2fbb1cc3aaa03e16344f108", +"file": "Total-Anxiety-37-1_c6bb581eb47f.npy" +}, +{ +"hash": "e1b192c60818a3ff484419929e8a6cb76731a491b66e6156c5976d8a45061680", +"file": "Total-Anxiety-37-1_e1b192c60818.npy" +}, +{ +"hash": "ae5f96ef865011fbf1b2587f09ef39cc0b713bd95c95b1082208c3072aab7a7f", +"file": "Total-Anxiety-37-1_ae5f96ef8650.npy" +}, +{ +"hash": "f37f1bebe0df4669c81e65b04819ef0ed5591af2108477b22388102f7431df98", +"file": "Total-Anxiety-37-1_f37f1bebe0df.npy" +}, +{ +"hash": "9fb4605d9c94f2c537576f5fc33b79191daf2f955f33c3b9c0ff16c55181d43a", +"file": "Total-Anxiety-37-1_9fb4605d9c94.npy" +}, +{ +"hash": "d101149730f7eaa88da9bb2c7516f2811cfbdf953b11f8aa1dfbe26555889639", +"file": "Total-Anxiety-37-1_d101149730f7.npy" +}, +{ +"hash": "bd7e48400d590fc40b9766633adbcc246b3f49ddbef5306b7acbcc10cbd086b1", +"file": "Total-Anxiety-37-1_bd7e48400d59.npy" +}, +{ +"hash": "ef21bbe574ee868c3a03dc221939ea2468d64943a2c145098d5173395e063cbe", +"file": "Total-Anxiety-37-1_ef21bbe574ee.npy" +}, +{ +"hash": "fdcb8feba8158b7f4f3f0da8e3bdc93dd4d4e5d31b12e14b0b10b3c61e650c01", +"file": "Total-Anxiety-37-1_fdcb8feba815.npy" +}, +{ +"hash": "a659c31ea80004fcba82d9e11397d1221d489842584cbac231c358abf6504f24", +"file": "Total-Anxiety-37-1_a659c31ea800.npy" +}, +{ +"hash": "9454f2d73113e78250d4f3584958e3243ff645b868bdacfc98c9d40a520f27a5", +"file": "Total-Anxiety-37-1_9454f2d73113.npy" +}, +{ +"hash": "2540899246054e3f84246a6efcfddccbc2c2596fe03b200bffa90acecf26d585", +"file": "Total-Anxiety-37-1_254089924605.npy" +}, +{ +"hash": "8d72d8402858e0e2ccb84d23df79036ccc075e50ddcc85501171ed530a82517e", +"file": "Total-Anxiety-37-1_8d72d8402858.npy" +}, +{ +"hash": "b77237bd5008ec8d505b4989874d1267f580e4b028b10786293e50f3a176693d", +"file": "Total-Anxiety-37-1_b77237bd5008.npy" +}, +{ +"hash": "4e8f19fd2bea9fa935ccdb16149ac3e08806344ba787e130e3af0227f713de97", +"file": "Total-Anxiety-37-1_4e8f19fd2bea.npy" +}, +{ +"hash": "4653cd28e5d5c5944b9de5b48637c2a8182a5bda21600f8b609cf915a8591def", +"file": "Total-Anxiety-37-1_4653cd28e5d5.npy" +}, +{ +"hash": "13d578fab1c5e06c70d9253e431f7b6d64a31096810dfb03a6911e2f04ab174a", +"file": "Total-Anxiety-and-Depression-47-1_13d578fab1c5.npy" +}, +{ +"hash": "759798ce40548e9c2e6c1092ad6671bbc1b69c4d7955bec9493cf1b4c393695b", +"file": "Total-Anxiety-and-Depression-47-1_759798ce4054.npy" +}, +{ +"hash": "1ca9a122edcbe01943566200bf70728cafd6a23c029906f20f358be993bfb26c", +"file": "Total-Anxiety-and-Depression-47-1_1ca9a122edcb.npy" +}, +{ +"hash": "f6e139c5c7df87773c89d0e48c71c8ce6f026a7ea30dbc48fc5be2313775f8e3", +"file": "Total-Anxiety-and-Depression-47-1_f6e139c5c7df.npy" +}, +{ +"hash": "4f4bbb2035eac8ff18ae492f714c7b674f8647d2d3633ef94b367d376b331a9a", +"file": "Total-Anxiety-and-Depression-47-1_4f4bbb2035ea.npy" +}, +{ +"hash": "a6d4ce3504909b19131240d526452108c19ff9e3281de6f57d6e1d36efbe48de", +"file": "Total-Anxiety-and-Depression-47-1_a6d4ce350490.npy" +}, +{ +"hash": "3fe63cb8430a32efb8bc532ce9756205bf89dd22c131db2fe65a5bda4e4c3371", +"file": "Total-Anxiety-and-Depression-47-1_3fe63cb8430a.npy" +}, +{ +"hash": "d7bf09590a34438dd892f704a80134070b0169901071e4541de4efd3fcbc9398", +"file": "Total-Anxiety-and-Depression-47-1_d7bf09590a34.npy" +}, +{ +"hash": "27b5cec4cf34b5c663ec651f6b38c0afafa75ad576c4fce532b063cb9ce89dd5", +"file": "Total-Anxiety-and-Depression-47-1_27b5cec4cf34.npy" +}, +{ +"hash": "51de56db8a4d434365428da17bcbb4a0f21a3e9b33b97638fa379ab6713b7540", +"file": "Total-Anxiety-and-Depression-47-1_51de56db8a4d.npy" +}, +{ +"hash": "66cceaf346fbe192500194d821992b67ae4b94f7cd88a947bd2fd062221c1a7e", +"file": "Total-Anxiety-and-Depression-47-1_66cceaf346fb.npy" +}, +{ +"hash": "c9c50f8663a88df6bbc07b9e9580a2b49c53ad0cf3adff16b28cae9a3bb18749", +"file": "Total-Anxiety-and-Depression-47-1_c9c50f8663a8.npy" +}, +{ +"hash": "660a57dbb899bd6919eb602ca7a32766780c0f9dd23f085797817287cbf5324c", +"file": "Total-Anxiety-and-Depression-47-1_660a57dbb899.npy" +}, +{ +"hash": "2fd346520a8afce27826e21170623d6ad6510ba59b496510faccdefafddb9b3f", +"file": "Total-Anxiety-and-Depression-47-1_2fd346520a8a.npy" +}, +{ +"hash": "630eede4b3171a8fcf45f25717c60f838036bca1145fc6f5f7392d1c27d4bbee", +"file": "Total-Anxiety-and-Depression-47-1_630eede4b317.npy" +}, +{ +"hash": "746e96af2a1843074ac3677f7d446b517469a1ade9d4f89cf544a71ff0971483", +"file": "Total-Anxiety-and-Depression-47-1_746e96af2a18.npy" +}, +{ +"hash": "55ed5bc4a73399405d562f205494e3567dc207dcabad4c5d6625ff2699255f8c", +"file": "Total-Anxiety-and-Depression-47-1_55ed5bc4a733.npy" +}, +{ +"hash": "5a5e29e84f5ea88913a7595732fe3e55599a3748fb26c88d108bb5f871fcd008", +"file": "Total-Anxiety-and-Depression-47-1_5a5e29e84f5e.npy" +}, +{ +"hash": "4d35a432e93c551046f3462789d98b17e93b8e1f946eeefc16f588f43f5788ff", +"file": "Total-Anxiety-and-Depression-47-1_4d35a432e93c.npy" +}, +{ +"hash": "596e5fe430ed63b062902e41fd9dadd0b0abee627c768e9a3472f48a387dfe3e", +"file": "Total-Anxiety-and-Depression-47-1_596e5fe430ed.npy" +}, +{ +"hash": "4188ef31d050e7d384a60acc335cfa3bc0957421f80728fcc1936894c7a4c5fa", +"file": "Total-Anxiety-and-Depression-47-1_4188ef31d050.npy" +}, +{ +"hash": "cc4cd5212681e33245022478dfa0504a36e776025839be743a3e215d6d72326e", +"file": "Total-Anxiety-and-Depression-47-1_cc4cd5212681.npy" +}, +{ +"hash": "40e25974bc6240daa1bcadea400ea039d0c60d417e60e6193e5548a9176262f7", +"file": "Total-Anxiety-and-Depression-47-1_40e25974bc62.npy" +}, +{ +"hash": "fd26365afe2672b17156c75005131c620117cb8aede818093755f27c42849a73", +"file": "Total-Anxiety-and-Depression-47-1_fd26365afe26.npy" +}, +{ +"hash": "1398fa5077f85510b19c5111b0d401e8429d701d9cca65d56eeb8003525d7295", +"file": "Total-Anxiety-and-Depression-47-1_1398fa5077f8.npy" +}, +{ +"hash": "e291c4799676b9b7f946d466fd580087d2bbf3359cbe911f2caa2c263fd16579", +"file": "Total-Anxiety-and-Depression-47-1_e291c4799676.npy" +}, +{ +"hash": "0d8188820adf9c4ba7e8312463cf6fe40f4252c78600b21099c3e60a7818185e", +"file": "Total-Anxiety-and-Depression-47-1_0d8188820adf.npy" +}, +{ +"hash": "73ee147e605fc79f9ac7da10f14798ff1daaec200a32fa5d005e13311e563557", +"file": "Total-Anxiety-and-Depression-47-1_73ee147e605f.npy" +}, +{ +"hash": "7ba518851728cd57c8d79e27d8d27162d310e20beea7b8a4e440ea46fd840d01", +"file": "Total-Anxiety-and-Depression-47-1_7ba518851728.npy" +}, +{ +"hash": "b71020533f28a54eaefb155dba2ebc933d182f00ff874865bfa311af2d049df6", +"file": "Total-Anxiety-and-Depression-47-1_b71020533f28.npy" +}, +{ +"hash": "cfb5d4066db52dda0b755cd0e049a0a1ac23974f924e3c18c82cb6533cba9c59", +"file": "Total-Anxiety-and-Depression-47-1_cfb5d4066db5.npy" +}, +{ +"hash": "0f0beb0974022943e386949790699075b6b68ff98ad06dbe462ace8d6651c6ed", +"file": "Total-Anxiety-and-Depression-47-1_0f0beb097402.npy" +}, +{ +"hash": "746c089e766db5fa586d5a5a46f0485add28c9a50a286b3ff0ca1690f49cc4cb", +"file": "Total-Anxiety-and-Depression-47-1_746c089e766d.npy" +}, +{ +"hash": "54a9e412461a07c0854e766761417ada2192ef8deaeab6964c16806dd658c596", +"file": "Total-Anxiety-and-Depression-47-1_54a9e412461a.npy" +}, +{ +"hash": "752d387d6d38f32ea8deeef2c73f8d812504c2c658d0d551c5ea36da635ddf48", +"file": "Total-Anxiety-and-Depression-47-1_752d387d6d38.npy" +}, +{ +"hash": "23f10d2782a996e5eefa37db6650dc7492853af813fbae0e0cdcda4767658e6c", +"file": "Total-Anxiety-and-Depression-47-1_23f10d2782a9.npy" +}, +{ +"hash": "46ca17f5d5f9a079d47d94a9d63bf696065373212c0cfa1178de3e50e2d6674d", +"file": "Total-Anxiety-and-Depression-47-1_46ca17f5d5f9.npy" +}, +{ +"hash": "c2ad16f63fb77c2483601926d69a0e30f332657f037eaf297f7003f4ea8d608d", +"file": "Total-Anxiety-and-Depression-47-1_c2ad16f63fb7.npy" +}, +{ +"hash": "a24039550c03481a430fa51ad570bfdbb4b111186648c1f468cae41c0845ade4", +"file": "Total-Anxiety-and-Depression-47-1_a24039550c03.npy" +}, +{ +"hash": "728189f57985a52e856f911d1c3e2052458c65e7a83a75e5d72aaa1653f87054", +"file": "Total-Anxiety-and-Depression-47-1_728189f57985.npy" +}, +{ +"hash": "3c815a27b90757e097e5366ae54f30d845aa6491a1ebc9809b30e668b33281d8", +"file": "Total-Anxiety-and-Depression-47-1_3c815a27b907.npy" +}, +{ +"hash": "b1e97cf679a37de13b32938ee95b448e5d544d017b349f4a39047be88c6dab6e", +"file": "Total-Anxiety-and-Depression-47-1_b1e97cf679a3.npy" +}, +{ +"hash": "1d01e8ac44d2af9455e5268da6c9f5d3a3f7c5d72161f40723ec9916b5959a25", +"file": "Total-Anxiety-and-Depression-47-1_1d01e8ac44d2.npy" +}, +{ +"hash": "a116826db9c4d89417b71a446644d8bb2f16947fb8a29c227a4a03de0477634c", +"file": "Total-Anxiety-and-Depression-47-1_a116826db9c4.npy" +}, +{ +"hash": "78b83e71542754351a7e0f597cd5dc3ee40384462855bd5573980a6f7d515fb3", +"file": "Total-Anxiety-and-Depression-47-1_78b83e715427.npy" +}, +{ +"hash": "1e401ded209045553252bd5a9163bd77e2d1c914177c4508f633217b9d080c92", +"file": "Total-Anxiety-and-Depression-47-1_1e401ded2090.npy" +}, +{ +"hash": "b3a3aa9f935287a370bc1c6b085475ec1e55ca41657ebf1979a02556f7b28531", +"file": "Total-Anxiety-and-Depression-47-1_b3a3aa9f9352.npy" +}, +{ +"hash": "3eb503e54bdb050f13ca16a7f1b9f3a76c93059605d0609bd39e7d6069d46391", +"file": "Total-Anxiety-15-1_3eb503e54bdb.npy" +}, +{ +"hash": "45a54dad9c6af7ff5a1753fbef1f32d943d7189505f6f72fcc9705dbe38f8b93", +"file": "Total-Anxiety-15-1_45a54dad9c6a.npy" +}, +{ +"hash": "7240d226463fcb1e3138f56b4d01a5770a36e654ab9d0fa5699defa8ca56465e", +"file": "Total-Anxiety-15-1_7240d226463f.npy" +}, +{ +"hash": "6c36a10d139e3854253d1c6f9574d4b5e008421d5b0656c3a7c5f6b31a0f3e0e", +"file": "Total-Anxiety-15-1_6c36a10d139e.npy" +}, +{ +"hash": "4a65f1e73c6359997b16516148fb2ceab2101569e3b3cf982216d97da56c4c0a", +"file": "Total-Anxiety-15-1_4a65f1e73c63.npy" +}, +{ +"hash": "375c990377304a48f1dc458bd9707d55f249b5ea8ed2a46988bfd6133d193253", +"file": "Total-Anxiety-15-1_375c99037730.npy" +}, +{ +"hash": "002331177535ca000868ed94b419e174b4dda89e194811a5679e9506e5f12f29", +"file": "Total-Anxiety-15-1_002331177535.npy" +}, +{ +"hash": "a046c39451087f9e693987c77bd130b04a70af3e41ad63dea015efa056396da9", +"file": "Total-Anxiety-15-1_a046c3945108.npy" +}, +{ +"hash": "aa1db463e5859d1dc0433a2ba358b5f5665392efb4280c95ad67fea5a8bd2a90", +"file": "Total-Anxiety-15-1_aa1db463e585.npy" +}, +{ +"hash": "d84247c48724d8a172f602dacf46ccd706972d5e6c93e6226b2ac8070bb27688", +"file": "Total-Anxiety-15-1_d84247c48724.npy" +}, +{ +"hash": "9695850b0d49a90a8d8524948392f618ef2f2152005edb76145981486ca3b713", +"file": "Total-Anxiety-15-1_9695850b0d49.npy" +}, +{ +"hash": "35a75367346c7061c97b41b9aac77016bea1c238f45972fd9a639522b51882c2", +"file": "Total-Anxiety-15-1_35a75367346c.npy" +}, +{ +"hash": "7f62afe4161e72c32348a5ffef9b223f70594f82d2c9bb3b2e39a3ab3d118e7a", +"file": "Total-Anxiety-15-1_7f62afe4161e.npy" +}, +{ +"hash": "fc6072094d5b94660ebf0ffc5fa39f575a1b571a62bd181a4197e36c68870764", +"file": "Total-Anxiety-15-1_fc6072094d5b.npy" +}, +{ +"hash": "b7150038b92e2326df90badfb446424a343fce777b88cc48322d211d2f7e15f3", +"file": "Total-Anxiety-15-1_b7150038b92e.npy" +} +] \ No newline at end of file diff --git a/embeddings/scales/texts.npy b/embeddings/Pipeline/scales/texts.npy similarity index 100% rename from embeddings/scales/texts.npy rename to embeddings/Pipeline/scales/texts.npy diff --git a/embeddings/Pipeline/search_similarity.py b/embeddings/Pipeline/search_similarity.py new file mode 100644 index 00000000..6744a241 --- /dev/null +++ b/embeddings/Pipeline/search_similarity.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +"""Semantic similarity search over stored POEM embeddings (CLI). + +Thin entry layer: the reusable building blocks — config, similarity metrics, the +corpus loader, the embedding client, and the vector store — live in +``poem_core`` and are re-exported here so the historical import surface keeps +working unchanged: + + from search_similarity import METRICS, SECTIONS, embed_query, load_embeddings + from search_similarity import cosine_similarity, dot_product, ... + +Usage: + # Interactive mode + python search_similarity.py + + # Single query from the command line + python search_similarity.py "instruments that measure anxiety in children" + + # Control number of results returned per metric + python search_similarity.py "caregiver therapy attendance" --top-k 10 +""" +from __future__ import annotations + +import os as _os +import sys as _sys + +_EMB_ROOT = _os.path.dirname(_os.path.dirname(_os.path.abspath(__file__))) +if _EMB_ROOT not in _sys.path: + _sys.path.insert(0, _EMB_ROOT) + +import argparse # noqa: E402 + +import numpy as np # noqa: E402 + +from poem_core import config # noqa: E402 +from poem_core.metrics import ( # noqa: E402,F401 (re-exported for callers/tests) + METRICS, + cosine_similarity, + dot_product, + euclidean_distance, + manhattan_distance, +) +from poem_core.entities import extract_entity_name # noqa: E402,F401 +from poem_core.embedding_client import embed_query # noqa: E402 +from poem_core.corpus import ( # noqa: E402,F401 + SECTIONS, + discover_sections, + load_embeddings, +) +from poem_core.vector_store import get_store # noqa: E402 + +DEFAULT_TOP_K = 5 +EMBEDDINGS_DIR = config.EMBEDDINGS_DIR + + +# --------------------------------------------------------------------------- +# Display results +# --------------------------------------------------------------------------- + +def print_results( + metric_name: str, + scores: np.ndarray, + texts: np.ndarray, + sections: np.ndarray, + top_k: int, +): + top_indices = np.argsort(scores)[::-1][:top_k] + print(f"\n{'='*70}") + print(f" {metric_name} — Top {top_k} results") + print(f"{'='*70}") + for rank, idx in enumerate(top_indices, start=1): + score = scores[idx] + section = sections[idx] + text_preview = texts[idx].replace("\n", " ") + if len(text_preview) > 120: + text_preview = text_preview[:117] + "..." + print(f" #{rank:2d} [{section:12s}] score={score:+.4f}") + print(f" {text_preview}") + print() + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +def run_search(query: str, top_k: int, store): + """Embed the query once and print top-k results for every metric. + + ``store`` is a vector-store backend (numpy or external Milvus). Building it + once (in ``main``) keeps the external backend from rebuilding per query and + is what lets interactive mode stay responsive. + """ + print(f'\nQuery: "{query}"') + print("Embedding query...") + query_vec = embed_query(query) + + for metric_name in METRICS: + scores, txt, sec = store.top_candidates(query_vec, metric_name, None, k=top_k) + print_results(metric_name, scores, txt, sec, top_k) + + +def main(): + parser = argparse.ArgumentParser(description="Search POEM embeddings with multiple similarity metrics.") + parser.add_argument("query", nargs="?", default=None, help="Query sentence (omit for interactive mode)") + parser.add_argument("--top-k", type=int, default=DEFAULT_TOP_K, help=f"Number of results per metric (default: {DEFAULT_TOP_K})") + parser.add_argument("--section", choices=SECTIONS, default=None, + help="Restrict search to a single section (instruments, scales, or collections)") + args = parser.parse_args() + + print("Loading embeddings...") + filter_sections = [args.section] if args.section else None + embeddings, texts, sections = load_embeddings(filter_sections) + print(f"Total paragraphs loaded: {len(texts)}") + + store = get_store(embeddings, texts, sections) + + if args.query: + run_search(args.query, args.top_k, store) + else: + print("\nInteractive mode — type a sentence and press Enter. Type 'quit' to exit.\n") + while True: + try: + query = input("Query> ").strip() + except (EOFError, KeyboardInterrupt): + print("\nExiting.") + break + if not query: + continue + if query.lower() in ("quit", "exit", "q"): + break + run_search(query, args.top_k, store) + + +if __name__ == "__main__": + main() + + +''' +python embeddings/Pipeline/search_similarity.py +fear of public speaking social phobia subscale +''' \ No newline at end of file diff --git a/embeddings/Pipeline/templates.txt b/embeddings/Pipeline/templates.txt new file mode 100644 index 00000000..67955235 --- /dev/null +++ b/embeddings/Pipeline/templates.txt @@ -0,0 +1,8005 @@ +=== INSTRUMENTS === + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Becoming easily annoyed or irritable + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Being so restless that it is hard to sit still + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Feeling afraid, as if something awful might happen + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Feeling nervous, anxious, or on edge + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Not being able to stop or control worrying + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Trouble relaxing + - has attribute: Adult + +GAD-7. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Worrying too much about different things + - has attribute: Adult + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I actively participate during appointments with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am able to attend appointments even when there are other important things going on in my life. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am on time for appointments with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe my child’s therapist knows how to help other children and families who are like mine. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe the work I do with my child’s therapist will help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe therapy is necessary to solve my child’s problems. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I enjoy practicing new things with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel comfortable asking my child’s therapist questions or raising concerns about therapy. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I am part of a team with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I can tell my child’s therapist anything. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I follow my child’s therapist’s recommendations. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I help choose my child’s treatment goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I like meeting with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I show up for appointments with my child’s therapist or else cancel them at least a day ahead of time. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I tell my child’s therapist about things that get in the way of me coming to counseling. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think my child’s therapist can help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I understand my role in my child’s therapy. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I skip an appointment with my child’s therapist, I might fall behind. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I try a new skill and it doesn’t go well, I make sure to try again. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: It’s OK if family or friends know we meet with a therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I’ve never had a bad experience with therapy for my child in the past. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s therapist is sensitive to my culture and values. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s therapist measures if my child is getting better. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s therapist respects my opinions. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s therapist shows us how to do a skill and then helps us try it out. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s therapy is convenient for me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The effort I put into therapy will pay off for me and my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The goals of my child’s therapy are clear. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The therapy we receive is right for us. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The work I do with my child’s therapist fits our goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Therapy requires a manageable amount of work. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: There is a clear purpose to each therapy session. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Things do not get in the way of me attending appointments with my child’s therapist. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: What we are doing in my child’s therapy makes sense to me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I learn something new in my child’s therapy, I try to use it right away at home. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Counseling requires a manageable amount of work. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I actively participate during appointments with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am able to attend appointments even when there are other important things going on in my life. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am on time for appointments with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe counseling is necessary to solve my child’s problems. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe my child’s counselor knows how to help other children and families who are like mine. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe the work I do with my child’s counselor will help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I enjoy practicing new things with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel comfortable asking my child’s counselor questions or raising concerns about counseling. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I am part of a team with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I can tell my child’s counselor anything. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I follow my child’s counselor’s recommendations. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I help choose my child’s treatment goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I like meeting with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I show up for appointments with my child’s counselor or else cancel them at least a day ahead of time. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I tell my child’s counselor about things that get in the way of me coming to counseling. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think my child’s counselor can help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I understand my role in my child’s counseling. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I skip an appointment with my child’s counselor, I might fall behind. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I try a new skill and it doesn’t go well, I make sure to try again. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: It’s OK if family or friends know we meet with a counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I’ve never had a bad experience with counseling for my child in the past. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s counseling is convenient for me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s counselor is sensitive to my culture and values. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s counselor measures if my child is getting better. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s counselor respects my opinions. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s counselor shows us how to do a skill and then helps us try it out. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The counseling we receive is right for us. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The effort I put into counseling will pay off for me and my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The goals of my child’s counseling are clear. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The work I do with my child’s counselor fits our goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: There is a clear purpose to each counseling session. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Things do not get in the way of me attending appointments with my child’s counselor. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: What we are doing in my child’s counseling makes sense to me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I learn something new in my child’s counseling, I try to use it right away at home. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Early intervention services require a manageable amount of work. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I actively participate during sessions with my child’s provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am able to attend sessions even when there are other important things going on in my life. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am on time for appointments with my child’s early intervention provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe early intervention services are necessary to support my child’s development. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe my child’s provider knows how to help other children and families who are like mine. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe the work I do with my child’s provider will help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I enjoy practicing new things with my child’s provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel comfortable asking my child’s provider questions or raising concerns about services. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I am part of a team with my child’s provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I can tell my child’s provider anything. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I follow my child’s provider’s recommendations. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I help choose my child’s service goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I like meeting with my child’s provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I show up for appointments with my child’s provider or else cancel them at least a day ahead of time. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I tell my child’s provider about things that get in the way of me coming to sessions. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think my child’s provider can help my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I understand my role in my child’s early intervention services. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I skip an appointment with my child’s early intervention provider, I might fall behind. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I try a new skill and it doesn’t go well, I make sure to try again. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: It’s OK if family or friends know we meet with an early intervention provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I’ve never had a bad experience with services for my child in the past. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s early intervention services are convenient for me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s provider is sensitive to my culture and values. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s provider measures if my child is progressing. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s provider shows us how to do a skill and then helps us try it out. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s providers respects my opinions. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The early intervention services we receive are right for us. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The effort I put into early intervention services will pay off for me and my child. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The goals of my child’s early intervention services are clear. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The work I do with my child’s early intervention provider fits our goals. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: There is a clear purpose to each session. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Things do not get in the way of me attending sessions with my child’s provider. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: What we are doing in my child’s early intervention services makes sense to me. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-EN-3. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I learn something new in my child’s early intervention sessions, I try to use it right away at home. + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-ES-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Attendance (7.1) + - has attribute: Caregiver + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + +MTT-35-CG-ES-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +MTT-35-CG-NO. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I actively participate during appointments with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am able to attend appointments even when there are other important things going on in my life. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am on time for appointments with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe my therapist knows how to help other people who are like me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe the work I do with my therapist will help me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe therapy is necessary to solve my problems. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I enjoy practicing new things with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel comfortable asking my therapist questions or raising concerns about counseling. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I am part of a team with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I can tell my therapist anything. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I follow my therapist's suggestions. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I help decide what we work on together. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I know what we are working on in therapy. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I like meeting with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I make sure I get to my appointments with my therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I tell my therapist about things that get in the way of me coming to therapy. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think my therapist can help me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I understand what I am supposed to do in therapy. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I skip a counseling appointment, I might fall behind. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I try a new skill and it doesn’t go well, I make sure to try again. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: It’s OK if family or friends know I meet with a therapist. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I’ve never had a bad experience with therapy in the past. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My therapist measures if I am getting better. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My therapist respects my opinions. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My therapist shows me how to do a skill and then helps me try it out. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My therapist understands my culture and values. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The effort I put into therapy will pay off for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The therapy I receive is right for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The work I do with my therapist fits with my goals. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Therapy is convenient for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Therapy requires a manageable amount of work. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: There is a clear purpose to each therapy session. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Things do not get in the way of me attending appointments. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: What we are doing in therapy makes sense to me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I learn something new in therapy, I try to use it right away at home or at school. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Counseling is convenient for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Counseling requires a manageable amount of work. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I actively participate during appointments with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am able to attend appointments even when there are other important things going on in my life. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am on time for appointments with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe counseling is necessary to solve my problems. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe my counselor knows how to help other people who are like me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I believe the work I do with my counselor will help me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I enjoy practicing new things with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel comfortable asking my counselor questions or raising concerns about counseling. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I am part of a team with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I can tell my counselor anything. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I follow my counselor’s suggestions. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I help decide what we work on together. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I know what we are working on in counseling. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I like meeting with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I make sure I get to my appointments with my counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I tell my counselor about things that get in the way of me coming to counseling. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think my counselor can help me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I understand what I am supposed to do in counseling. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I skip a counseling appointment, I might fall behind. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: If I try a new skill and it doesn’t go well, I make sure to try again. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: It’s OK if family or friends know I meet with a counselor. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I’ve never had a bad experience with counseling in the past. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My counselor measures if I am getting better. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My counselor respects my opinions. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My counselor shows me how to do a skill and then helps me try it out. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My counselor understands my culture and values. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The counseling I receive is right for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The effort I put into counseling will pay off for me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: The work I do with my counselor fits with my goals. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: There is a clear purpose to each counseling session. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Things do not get in the way of me attending appointments. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: What we are doing in counseling makes sense to me. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-EN-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I learn something new in counseling, I try to use it right away at home or at school. + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-ES-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Attendance (7.1) + - has attribute: Clarity (7.1) + - has attribute: Expectancy (7.1) + - has attribute: Homework (7.1) + - has attribute: Relationship (7.1) + - has attribute: Youth + +MTT-35-Y-ES-2. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +MTT-35-Y-NO. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Feeling bad about yourself--or that you are a failure or have let yourself down or your family down + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Feeling down, depressed, or hopeless + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Feeling tired or having little energy + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Little interest or pleasure in doing things + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Moving or speaking so slowly that other people could hae noticed. Or the opposite--being so fidgety or restless that you have been moving around a lot more than usual + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Poor appetite or overeating + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Thoughts that you would be better off dead, or of hurting yourself + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Trouble concentrating on things, such as reading the newspaper or watching television + - has attribute: Adult + - has attribute: Depression (9.1) + +PHQ-9-A-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Trouble falling or staying asleep, or sleeping too much + - has attribute: Adult + - has attribute: Depression (9.1) + +RCADS-25-CG-AR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-BN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-CH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-DA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-DE. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child cannot think clearly + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid of being alone at home + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid that he/she will make a fool of him/herself in front of people + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels like he/she doesn’t want to move + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels restless + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels sad or empty + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared to sleep on his/her own + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels worthless + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has no energy for things + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has problems with his/her appetite + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things in just the right way to stop bad things from happening + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things over and over again (like washing hands, cleaning, or putting things in a certain order) + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble sleeping + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is tired a lot + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly becomes dizzy or faint when there is no reason for this + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly starts to tremble or shake when there is no reason for this + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child thinks about death + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that bad things will happen to him/her + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that he/she will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something awful will happen to someone in the family + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries what other people think of him/her + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when he/she thinks he/she has done poorly at something + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun for my child anymore + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child cannot think clearly + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid of being alone at home + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid that they will make a fool of themself in front of people + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels like they don't want to move + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels restless + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels sad or empty + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared to sleep on their own + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels worthless + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has no energy for things + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has problems with their appetite + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things in just the right way to stop bad things from happening + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things over and over again (like washing hands, cleaning, or putting things in a certain order) + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble sleeping + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is tired a lot + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly becomes dizzy or faint when there is no reason for this + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly starts to tremble or shake when there is no reason for this + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child thinks about death + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something awful will happen to someone in the family + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something bad will happen to them + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that they will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries what other people think of them + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when they think they have done poorly at something + - has attribute: Caregiver + +RCADS-25-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun for my child anymore + - has attribute: Caregiver + +RCADS-25-CG-ES. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-ET. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-FA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-FI. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-FR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-FR-CA-1. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-FR-FR-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-HI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-CG-HU. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-IS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-IT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-JA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-KO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-LT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-MN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-MR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-MS. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-NL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-NO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-NY. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-PA. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-PL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-PT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-SL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-SR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-CG-SV. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-TR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-UR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-VI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-ZH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + +RCADS-25-CG-ZH-HANT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-CG-ZU. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-25-Y-AR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-BN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-CH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-DA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-DE. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am tired a lot + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I cannot think clearly + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel afraid that I will make a fool of myself in front of people + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I don’t want to move + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel restless + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel sad or empty + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel scared if I have to sleep on my own + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel worthless + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have no energy for things + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have problems with my appetite + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to do some things in just the right way to stop bad things from happening + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to do some things over and over again (like washing my hands, cleaning or putting things in a certain order) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have trouble sleeping + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I suddenly become dizzy or faint when there is no reason for this + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I suddenly start to tremble or shake when there is no reason for this + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think about death + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that I will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that something awful will happen to someone in my family + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that something bad will happen to me + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry what other people think of me + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry when I think I have done poorly at something + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I would feel afraid of being on my own at home + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun anymore + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-ES. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-ET. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-FA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-FI. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-FR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-FR-CA-1. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-FR-CA-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-FR-FR-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-FR-FR-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-HI-1. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-HI-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-HU. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-IS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-IT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-JA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-KO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-LT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-MN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-MR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-MS. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-NL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-NO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-NY-1. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-NY-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-PA. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-PL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-PT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-PT-BR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-SL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-SR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-SV. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-TR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-UR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-VI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-ZH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Total Anxiety (15.1) + - has attribute: Total Anxiety and Depression (25.1) + - has attribute: Youth + +RCADS-25-Y-ZH-HANT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-25-Y-ZU. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I AM AFRAID OF BEING IN CROWDED PLACES (LIKE SHOPPING CENTERS, BUSY PLAYGROUNDS, BUS STATIONS, BUSY STREETS, MARKET PLACES)…… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I AM TIRED A LOT… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I BECOME DIZZY OR FAINT WITHOUT A REASON… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I CANNOT THINK VERY WELL… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL AFRAID THAT I WILL SHAME MYSELF IN FRONT OF PEOPLE… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL AS IF I CAN’T BREATHE WITHOUT A REASON… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL I HAVE NO MEANING… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL LIKE I DON’T WANT TO MOVE… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL REALLY SCARED WITHOUT A REASON… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL RESTLESS OR NOT AT PEACE… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL SAD … + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL SCARED IF I HAVE TO SLEEP ALONE… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL SCARED WHEN I HAVE TO TAKE AN EXAM… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I FEEL WORRIED WHEN I THINK SOMEONE IS ANGRY WITH ME… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I HAVE NO ENERGY FOR ANYTHING… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I HAVE PROBLEMS WITH MY APPETITE FOR FOOD… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I HAVE TROUBLE IN SLEEPING… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I START TO TREMBLE OR SHAKE WITHOUT A REASON… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I THINK ABOUT DEATH… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY ABOUT BEING AWAY FROM MY PARENTS… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY ABOUT MAKING MISTAKES… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY ABOUT WHAT IS GOING TO HAPPEN… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY I MIGHT LOOK FOOLISH… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY THAT BAD THINGS WILL HAPPEN TO ME… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY THAT I WILL GET A SCARED FEELING WHEN THERE IS NOTHING TO BE AFRAID OF… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY THAT I WILL NOT DO WELL IN MY SCHOOL WORK… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY THAT SOMETHING BAD WILL HAPPEN TO ME… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY THAT SOMETHING BAD WILL HAPPEN TO SOMEONE IN MY FAMILY… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY WHAT OTHER PEOPLE THINK OF ME… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WORRY WHEN I THINK I HAVE DONE SOMETHING POORLY… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WOULD FEEL AFRAID OF BEING ALONE AT HOME… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I WOULD FEEL SCARED IF I HAD TO STAY AWAY FROM HOME THE WHOLE NIGHT… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: MY HEART STARTS TO BEAT TOO QUICKLY WITHOUT A REASON… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: NOTHING IS MUCH FUN ANYMORE… + - has attribute: Youth + +RCADS-35-Y-EN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: WHEN I HAVE A PROBLEM, I FEEL SHAKY OR TREMBLE… + - has attribute: Youth + +RCADS-35-Y-SW. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-CG-AR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-BN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-CH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-DA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-DE. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: All of a sudden my child will feel really scared for no reason at all + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child can't seem to get bad or silly thoughts out of his/her head + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child cannot think clearly + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid if he/she has to talk in front of the class + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid of being alone at home + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid that he/she will make a fool of him/herself in front of people + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels like he/she doesn’t want to move + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels restless + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels sad or empty + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared to sleep on his/her own + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared when taking a test + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels worthless + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has no energy for things + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has problems with his/her appetite + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things in just the right way to stop bad things from happening + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things over and over again (like washing hands, cleaning, or putting things in a certain order) + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to keep checking that he/she has done things right (like the switch is off, or the door is locked) + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble going to school in the mornings because of feeling nervous or afraid + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble sleeping + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is bothered by bad or silly thoughts or pictures in his/her mind + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is tired a lot + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly becomes dizzy or faint when there is no reason for this + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly feels as if he/she can't breathe when there is no reason for this + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly starts to tremble or shake when there is no reason for this + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child thinks about death + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about being away from me + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about doing badly at school work + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about looking foolish + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about making mistakes + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about things + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about what is going to happen + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that bad things will happen to him/her + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that he/she will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something awful will happen to someone in the family + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something bad will happen to him/her + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries what other people think of him/her + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when he/she thinks he/she has done poorly at something + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when he/she thinks someone is angry with him/her + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when in bed at night + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child would feel scared if he/she had to stay away from home overnight + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s heart suddenly starts to beat too quickly for no reason + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun for my child anymore + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, he/she feels shaky + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, he/she gets a funny feeling in his/her stomach + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, his/her heart beats really fast + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: All of a sudden my child will feel really scared for no reason at all + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child can't seem to get bad or silly thoughts out of their head. + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child cannot think clearly + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid if they have to talk in front of the class + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid of being alone at home + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels afraid that they will make a fool of themself in front of people + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels like they don't want to move + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels restless + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels sad or empty + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared to sleep on their own + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels scared when taking a test + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child feels worthless + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has no energy for things + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has problems with their appetite + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things in just the right way to stop bad things from happening + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to do some things over and over again (like washing hands, cleaning, or putting things in a certain order) + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to keep checking that they have done things right (like the switch is off, or the door is locked) + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble going to school in the mornings because of feeling nervous or afraid + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child has trouble sleeping + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is bothered by bad or silly thoughts or pictures in their mind + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child is tired a lot + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly becomes dizzy or faint when there is no reason for this + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly feels as if they can't breathe when there is no reason for this + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child suddenly starts to tremble or shake when there is no reason for this + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child thinks about death + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about being away from me + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about doing badly at school work + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about looking foolish + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about making mistakes + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about things + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries about what is going to happen + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that bad things will happen to them + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something awful will happen to someone in the family + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that something bad will happen to them + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries that they will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries what other people think of them + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when in bed at night + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when they think someone is angry with them + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child worries when they think they have done poorly at something + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child would feel scared if they had to stay away from home overnight + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My child’s heart suddenly starts to beat too quickly for no reason + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun for my child anymore + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, their heart beats really fast + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, they feel shaky + - has attribute: Caregiver + +RCADS-47-CG-EN-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When my child has a problem, they get a funny feeling in their stomach + - has attribute: Caregiver + +RCADS-47-CG-ES. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-ET. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-FA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-FI. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-FR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-FR-1. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-FR-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-FR-3. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-FR-CA-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-HI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-CG-HU. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-IS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-IT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-JA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-JA-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-JA-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-KO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-LT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-MN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-MR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-MS. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-NL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-NO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-NO-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-NO-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-NY. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-PA. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-PL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-PT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-SL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-SR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-SV. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-SV-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-SV-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-TR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-UR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-VI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-ZH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + +RCADS-47-CG-ZH-HANT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-CG-ZU. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Caregiver + +RCADS-47-Y-AR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-BN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-CH-HANS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-DA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-DE. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: All of a sudden I feel really scared for no reason at all + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am afraid of being in crowded places (like shopping centers, the movies, buses, busy playgrounds) + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I am tired a lot + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I can't seem to get bad or silly thoughts out of my head + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I cannot think clearly + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel afraid if I have to talk in front of my class + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel afraid that I will make a fool of myself in front of people + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel like I don’t want to move + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel restless + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel sad or empty + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel scared if I have to sleep on my own + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel scared when I have to take a test + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel worried when I think someone is angry with me + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I feel worthless + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I get bothered by bad or silly thoughts or pictures in my mind + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have no energy for things + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have problems with my appetite + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to do some things in just the right way to stop bad things from happening + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to do some things over and over again (like washing my hands, cleaning or putting things in a certain order) + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to keep checking that I have done things right (like the switch is off, or the door is locked) + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have to think of special thoughts (like numbers or words) to stop bad things from happening + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have trouble going to school in the mornings because I feel nervous or afraid + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I have trouble sleeping + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I suddenly become dizzy or faint when there is no reason for this + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I suddenly feel as if I can't breathe when there is no reason for this + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I suddenly start to tremble or shake when there is no reason for this + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I think about death + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry I might look foolish + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry about being away from my parents + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry about making mistakes + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry about things + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry about what is going to happen + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that I will do badly at my school work + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that I will suddenly get a scared feeling when there is nothing to be afraid of + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that bad things will happen to me + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that something awful will happen to someone in my family + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry that something bad will happen to me + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry what other people think of me + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry when I go to bed at night + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I worry when I think I have done poorly at something + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I would feel afraid of being on my own at home + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: I would feel scared if I had to stay away from home overnight + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: My heart suddenly starts to beat too quickly for no reason + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: Nothing is much fun anymore + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I have a problem, I feel shaky + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I have a problem, I get a funny feeling in my stomach + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-EN. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has member: When I have a problem, my heart beats really fast + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-ES. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-ET. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-FA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-FI. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-FR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-FR-FR-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-FR-FR-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-HI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-HU. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-IS. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-IT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-JA. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-JA-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-JA-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-KO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-LT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-MN. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-MR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-MS. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-NL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-NO. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-NO-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-NO-2. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-NY. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-PA. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-PL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-PT. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-PT-BR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-SL. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-SR. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-SV. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-TR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-UR. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-VI. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-ZH-HANS-1. Attributes include: + - instance of: NamedIndividual + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Generalized Anxiety Disorder (6.1) + - has attribute: Major Depressive Disorder (10.1) + - has attribute: Obsessive Compulsive Disorder (6.1) + - has attribute: Panic Disorder (9.1) + - has attribute: Separation Anxiety Disorder (7.1) + - has attribute: Social Phobia (9.1) + - has attribute: Total Anxiety (37.1) + - has attribute: Total Anxiety and Depression (47.1) + - has attribute: Youth + +RCADS-47-Y-ZH-HANT. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + +RCADS-47-Y-ZU. Attributes include: + - instance of: Questionnaire + - instance of: psychometric questionnaire + - has attribute: Youth + + +=== SCALES === + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of looking foolish in front of people + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid to talk in front of class + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worried when someone angry + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to take a test + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about mistakes + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries might look foolish + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries what others think + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries when does poorly at things + - has attribute (notation): SP + +Social Phobia (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will do badly at school work + - has attribute (notation): SP + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of being in crowded places + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of looking foolish in front of people + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Cannot concentrate or think clearly + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being alone at home + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels like doesn't want to move + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore, loss of pleasure or interest + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels restless + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels sad or empty + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels tired a lot or low energy + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worthless or like a failure + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has no energy for things + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has problems with appetite + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things just right to stop bad events + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things over and over again + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to think special thoughts to stop bad events + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has trouble sleeping + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep alone + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly becomes dizzy or faint for no reason + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly trembles or shakes for no reason + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thinks about death + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tired a lot + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something awful will happen to family + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something bad will happen to self + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries what others think + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries when does poorly at things + - has attribute (notation): AnxDep25 + +Total Anxiety and Depression (25.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will suddenly get scared for no reason + - has attribute (notation): AnxDep25 + +Total Depression (5.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has attribute (notation): Dep5 + +Total Anxiety (20.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has attribute (notation): Anx20 + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Can tell counselor anything + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor respects opinions + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor understands culture and values + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feel comfortable asking questions or raising concerns + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels like part of a team + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Helps decide what to work on + - has attribute (notation): R + +Relationship (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Likes meeting with counselor + - has attribute (notation): R + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counseling is necessary to solve problems + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor can help me + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor knows how to help people like me + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Effort will pay off + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Never had a bad experience in past + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: OK if family or friends know + - has attribute (notation): E + +Expectancy (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Work with counselor will help me + - has attribute (notation): E + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Able to attend even when other important things + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counseling is convenient + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: If I skip I will fall behind + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Make sure I get to appoinments + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: On time for appointments + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tell things that get in the way + - has attribute (notation): A + +Attendance (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Things do not get in the way of me attending + - has attribute (notation): A + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Clear purpose to each session + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counseling is right + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor measures progress + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Knows what working on + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Understands what supposed to do + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: What are doing makes sense + - has attribute (notation): C + +Clarity (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Work fits with goals + - has attribute (notation): C + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Actively participates + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counseling requires managable work + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Counselor shows me how + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Enjoys practicing new things + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Follows counselor's suggestions + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: If skill does not go well tries again + - has attribute (notation): H + +Homework (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tries to use new things right away + - has attribute (notation): H + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feeling bad about yourself, feeling like a failure + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feeling down, depressed, hopeless + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feeling either restless or fidgety + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore, loss of pleasure or interest + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels tired a lot or low energy + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has problems with appetite + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Little interest or pleasure in doing things + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Sleep disturbance--too much or too little + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thoughts of self harm or being better off dead + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tired a lot + - has attribute (notation): PHQ-9-Dep + +Depression (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Trouble concentrating + - has attribute (notation): PHQ-9-Dep + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Heart suddenly beats too quickly for no reason + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly becomes dizzy or faint for no reason + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly feels really scared for no reason + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly has trouble breathing for no reason + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly trembles or shakes for no reason + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, feels shaky + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, heart beats really fast + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, stomach feels funny + - has attribute (notation): PD + +Panic Disorder (9.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will suddenly get scared for no reason + - has attribute (notation): PD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thinks about death + - has attribute (notation): GAD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about things + - has attribute (notation): GAD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about what will happen + - has attribute (notation): GAD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries bad things will happen to self + - has attribute (notation): GAD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something awful will happen to family + - has attribute (notation): GAD + +Generalized Anxiety Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something bad will happen to self + - has attribute (notation): GAD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Cannot concentrate or think clearly + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels like doesn't want to move + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore, loss of pleasure or interest + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels restless + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels sad or empty + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels tired a lot or low energy + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worthless or like a failure + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has no energy for things + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has problems with appetite + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has trouble sleeping + - has attribute (notation): MDD + +Major Depressive Disorder (10.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tired a lot + - has attribute (notation): MDD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of being in crowded places + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being alone at home + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being away from parents + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep alone + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep away from home + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Trouble going to school + - has attribute (notation): SAD + +Separation Anxiety Disorder (7.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries in bed at night + - has attribute (notation): SAD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Bothered by bad or silly thoughts or images + - has attribute (notation): OCD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Can't get bad or silly thoughts out of head + - has attribute (notation): OCD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things just right to stop bad events + - has attribute (notation): OCD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things over and over again + - has attribute (notation): OCD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to think special thoughts to stop bad events + - has attribute (notation): OCD + +Obsessive Compulsive Disorder (6.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Keeps checking if things done right + - has attribute (notation): OCD + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of being in crowded places + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of looking foolish in front of people + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid to talk in front of class + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Bothered by bad or silly thoughts or images + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Can't get bad or silly thoughts out of head + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being alone at home + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being away from parents + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worried when someone angry + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things just right to stop bad events + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things over and over again + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to think special thoughts to stop bad events + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Heart suddenly beats too quickly for no reason + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Keeps checking if things done right + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep alone + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep away from home + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to take a test + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly becomes dizzy or faint for no reason + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly feels really scared for no reason + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly has trouble breathing for no reason + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly trembles or shakes for no reason + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thinks about death + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Trouble going to school + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, feels shaky + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, heart beats really fast + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, stomach feels funny + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about mistakes + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about things + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about what will happen + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries bad things will happen to self + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries in bed at night + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries might look foolish + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something awful will happen to family + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something bad will happen to self + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries what others think + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries when does poorly at things + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will do badly at school work + - has attribute (notation): ANX + +Total Anxiety (37.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will suddenly get scared for no reason + - has attribute (notation): ANX + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of being in crowded places + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of looking foolish in front of people + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid to talk in front of class + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Bothered by bad or silly thoughts or images + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Can't get bad or silly thoughts out of head + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Cannot concentrate or think clearly + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being alone at home + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being away from parents + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels like doesn't want to move + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels nothing is much fun anymore, loss of pleasure or interest + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels restless + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels sad or empty + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels tired a lot or low energy + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worried when someone angry + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Feels worthless or like a failure + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has no energy for things + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has problems with appetite + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things just right to stop bad events + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things over and over again + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to think special thoughts to stop bad events + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has trouble sleeping + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Heart suddenly beats too quickly for no reason + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Keeps checking if things done right + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep alone + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep away from home + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to take a test + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly becomes dizzy or faint for no reason + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly feels really scared for no reason + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly has trouble breathing for no reason + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly trembles or shakes for no reason + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thinks about death + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Tired a lot + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Trouble going to school + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, feels shaky + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, heart beats really fast + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: When has a problem, stomach feels funny + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about mistakes + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about things + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries about what will happen + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries bad things will happen to self + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries in bed at night + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries might look foolish + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something awful will happen to family + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something bad will happen to self + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries what others think + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries when does poorly at things + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will do badly at school work + - has attribute (notation): ANXDEP + +Total Anxiety and Depression (47.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will suddenly get scared for no reason + - has attribute (notation): ANXDEP + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of being in crowded places + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Afraid of looking foolish in front of people + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Fears being alone at home + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things just right to stop bad events + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to do things over and over again + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Has to think special thoughts to stop bad events + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Scared to sleep alone + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly becomes dizzy or faint for no reason + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Suddenly trembles or shakes for no reason + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Thinks about death + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something awful will happen to family + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries something bad will happen to self + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries what others think + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries when does poorly at things + - has attribute (notation): Anx15 + +Total Anxiety (15.1). Attributes include: + - instance of: NamedIndividual + - instance of: questionnaire scale + - has member: Worries will suddenly get scared for no reason + - has attribute (notation): Anx15 + + +=== COLLECTIONS === + +1. Attributes include: + - instance of: Instrument Collection + - has member count: 111 + - has instrument family: RCADS-25 (53), RCADS-47 (58) + - has informant: caregiver, youth + - has language count: 28 + - has language: Arabic, Brazilian Portuguese, Canadian French, Chinese (Simplified), Chinese (Simplified), Danish, Dutch, English, Estonian, European French, Finnish, French, German, Greek, Hungarian, Icelandic, Japanese, Korean, Lithuanian, Norwegian, Persian, Polish, Portuguese, Slovenian, Spanish, Swedish, Turkish, Urdu + - has member: RCADS-25-CG-AR + - has member: RCADS-25-CG-CH-HANS + - has member: RCADS-25-CG-DA + - has member: RCADS-25-CG-DE + - has member: RCADS-25-CG-EL + - has member: RCADS-25-CG-EN + - has member: RCADS-25-CG-ES + - has member: RCADS-25-CG-ET + - has member: RCADS-25-CG-FA + - has member: RCADS-25-CG-FI + - has member: RCADS-25-CG-FR + - has member: RCADS-25-CG-FR-FR-1 + - has member: RCADS-25-CG-HU + - has member: RCADS-25-CG-IS + - has member: RCADS-25-CG-JA + - has member: RCADS-25-CG-KO + - has member: RCADS-25-CG-LT + - has member: RCADS-25-CG-NL + - has member: RCADS-25-CG-NO + - has member: RCADS-25-CG-PL + - has member: RCADS-25-CG-PT + - has member: RCADS-25-CG-SL + - has member: RCADS-25-CG-SV + - has member: RCADS-25-CG-TR + - has member: RCADS-25-CG-UR + - has member: RCADS-25-CG-ZH-HANS + - has member: RCADS-25-Y-AR + - has member: RCADS-25-Y-CH-HANS + - has member: RCADS-25-Y-DA + - has member: RCADS-25-Y-DE + - has member: RCADS-25-Y-EL + - has member: RCADS-25-Y-EN + - has member: RCADS-25-Y-ES + - has member: RCADS-25-Y-ET + - has member: RCADS-25-Y-FA + - has member: RCADS-25-Y-FI + - has member: RCADS-25-Y-FR + - has member: RCADS-25-Y-FR-FR-1 + - has member: RCADS-25-Y-HU + - has member: RCADS-25-Y-IS + - has member: RCADS-25-Y-JA + - has member: RCADS-25-Y-KO + - has member: RCADS-25-Y-LT + - has member: RCADS-25-Y-NL + - has member: RCADS-25-Y-NO + - has member: RCADS-25-Y-PL + - has member: RCADS-25-Y-PT + - has member: RCADS-25-Y-PT-BR + - has member: RCADS-25-Y-SL + - has member: RCADS-25-Y-SV + - has member: RCADS-25-Y-TR + - has member: RCADS-25-Y-UR + - has member: RCADS-25-Y-ZH-HANS + - has member: RCADS-47-CG-AR + - has member: RCADS-47-CG-CH-HANS + - has member: RCADS-47-CG-DA + - has member: RCADS-47-CG-DE + - has member: RCADS-47-CG-EL + - has member: RCADS-47-CG-EN + - has member: RCADS-47-CG-ES + - has member: RCADS-47-CG-ET + - has member: RCADS-47-CG-FA + - has member: RCADS-47-CG-FI + - has member: RCADS-47-CG-FR + - has member: RCADS-47-CG-FR-CA-1 + - has member: RCADS-47-CG-HU + - has member: RCADS-47-CG-IS + - has member: RCADS-47-CG-JA + - has member: RCADS-47-CG-JA-1 + - has member: RCADS-47-CG-KO + - has member: RCADS-47-CG-LT + - has member: RCADS-47-CG-NL + - has member: RCADS-47-CG-NO + - has member: RCADS-47-CG-NO-1 + - has member: RCADS-47-CG-PL + - has member: RCADS-47-CG-PT + - has member: RCADS-47-CG-SL + - has member: RCADS-47-CG-SV + - has member: RCADS-47-CG-SV-1 + - has member: RCADS-47-CG-TR + - has member: RCADS-47-CG-UR + - has member: RCADS-47-CG-ZH-HANS + - has member: RCADS-47-Y-AR + - has member: RCADS-47-Y-CH-HANS + - has member: RCADS-47-Y-DA + - has member: RCADS-47-Y-DE + - has member: RCADS-47-Y-EL + - has member: RCADS-47-Y-EN + - has member: RCADS-47-Y-ES + - has member: RCADS-47-Y-ET + - has member: RCADS-47-Y-FA + - has member: RCADS-47-Y-FI + - has member: RCADS-47-Y-FR + - has member: RCADS-47-Y-FR-FR-1 + - has member: RCADS-47-Y-HU + - has member: RCADS-47-Y-IS + - has member: RCADS-47-Y-JA + - has member: RCADS-47-Y-JA-1 + - has member: RCADS-47-Y-KO + - has member: RCADS-47-Y-LT + - has member: RCADS-47-Y-NL + - has member: RCADS-47-Y-NO + - has member: RCADS-47-Y-NO-1 + - has member: RCADS-47-Y-PL + - has member: RCADS-47-Y-PT + - has member: RCADS-47-Y-PT-BR + - has member: RCADS-47-Y-SL + - has member: RCADS-47-Y-SV + - has member: RCADS-47-Y-TR + - has member: RCADS-47-Y-UR + - has member: RCADS-47-Y-ZH-HANS-1 + +2. Attributes include: + - instance of: Instrument Collection + - has member count: 0 + +3. Attributes include: + - instance of: Instrument Collection + - has member count: 9 + - has instrument family: MTT-35 (9) + - has informant: caregiver, youth + - has language count: 2 + - has language: English, Spanish + - has member: MTT-35-CG-EN-1 + - has member: MTT-35-CG-EN-2 + - has member: MTT-35-CG-EN-3 + - has member: MTT-35-CG-ES-1 + - has member: MTT-35-CG-ES-2 + - has member: MTT-35-Y-EN-1 + - has member: MTT-35-Y-EN-2 + - has member: MTT-35-Y-ES-1 + - has member: MTT-35-Y-ES-2 + +4. Attributes include: + - instance of: Instrument Collection + - has member count: 1 + - has instrument family: PHQ-9 (1) + - has informant: adult + - has language count: 1 + - has language: English + - has member: PHQ-9-A-EN + +RCADS. Attributes include: + - instance of: Instrument Collection + - instance of: NamedIndividual + - instance of: instrument Collection + - has member count: 178 + - has instrument family: RCADS-25 (84), RCADS-35 (2), RCADS-47 (92) + - has informant: caregiver, youth + - has language count: 41 + - has language: Arabic, Bengali, Brazilian Portuguese, Canadian French, Chichewa, Chinese (Simplified), Chinese (Simplified), Chinese (Traditional), Danish, Dutch, English, Estonian, European French, Finnish, French, German, Greek, Hindi, Hungarian, Icelandic, Italian, Japanese, Korean, Lithuanian, Malay, Marathi, Mongolian, Norwegian, Persian, Polish, Portuguese, Punjabi, Serbian, Slovenian, Spanish, Swahili, Swedish, Turkish, Urdu, Vietnamese, Zulu + - has member: RCADS-25-CG-AR + - has member: RCADS-25-CG-BN + - has member: RCADS-25-CG-CH-HANS + - has member: RCADS-25-CG-DA + - has member: RCADS-25-CG-DE + - has member: RCADS-25-CG-EL + - has member: RCADS-25-CG-EN + - has member: RCADS-25-CG-EN-2 + - has member: RCADS-25-CG-ES + - has member: RCADS-25-CG-ET + - has member: RCADS-25-CG-FA + - has member: RCADS-25-CG-FI + - has member: RCADS-25-CG-FR + - has member: RCADS-25-CG-FR-CA-1 + - has member: RCADS-25-CG-FR-FR-1 + - has member: RCADS-25-CG-HI + - has member: RCADS-25-CG-HU + - has member: RCADS-25-CG-IS + - has member: RCADS-25-CG-IT + - has member: RCADS-25-CG-JA + - has member: RCADS-25-CG-KO + - has member: RCADS-25-CG-LT + - has member: RCADS-25-CG-MN + - has member: RCADS-25-CG-MR + - has member: RCADS-25-CG-MS + - has member: RCADS-25-CG-NL + - has member: RCADS-25-CG-NO + - has member: RCADS-25-CG-NY + - has member: RCADS-25-CG-PA + - has member: RCADS-25-CG-PL + - has member: RCADS-25-CG-PT + - has member: RCADS-25-CG-SL + - has member: RCADS-25-CG-SR + - has member: RCADS-25-CG-SV + - has member: RCADS-25-CG-TR + - has member: RCADS-25-CG-UR + - has member: RCADS-25-CG-VI + - has member: RCADS-25-CG-ZH-HANS + - has member: RCADS-25-CG-ZH-HANT + - has member: RCADS-25-CG-ZU + - has member: RCADS-25-Y-AR + - has member: RCADS-25-Y-BN + - has member: RCADS-25-Y-CH-HANS + - has member: RCADS-25-Y-DA + - has member: RCADS-25-Y-DE + - has member: RCADS-25-Y-EL + - has member: RCADS-25-Y-EN + - has member: RCADS-25-Y-ES + - has member: RCADS-25-Y-ET + - has member: RCADS-25-Y-FA + - has member: RCADS-25-Y-FI + - has member: RCADS-25-Y-FR + - has member: RCADS-25-Y-FR-CA-1 + - has member: RCADS-25-Y-FR-CA-2 + - has member: RCADS-25-Y-FR-FR-1 + - has member: RCADS-25-Y-FR-FR-2 + - has member: RCADS-25-Y-HI-1 + - has member: RCADS-25-Y-HI-2 + - has member: RCADS-25-Y-HU + - has member: RCADS-25-Y-IS + - has member: RCADS-25-Y-IT + - has member: RCADS-25-Y-JA + - has member: RCADS-25-Y-KO + - has member: RCADS-25-Y-LT + - has member: RCADS-25-Y-MN + - has member: RCADS-25-Y-MR + - has member: RCADS-25-Y-MS + - has member: RCADS-25-Y-NL + - has member: RCADS-25-Y-NO + - has member: RCADS-25-Y-NY-1 + - has member: RCADS-25-Y-NY-2 + - has member: RCADS-25-Y-PA + - has member: RCADS-25-Y-PL + - has member: RCADS-25-Y-PT + - has member: RCADS-25-Y-PT-BR + - has member: RCADS-25-Y-SL + - has member: RCADS-25-Y-SR + - has member: RCADS-25-Y-SV + - has member: RCADS-25-Y-TR + - has member: RCADS-25-Y-UR + - has member: RCADS-25-Y-VI + - has member: RCADS-25-Y-ZH-HANS + - has member: RCADS-25-Y-ZH-HANT + - has member: RCADS-25-Y-ZU + - has member: RCADS-35-Y-EN + - has member: RCADS-35-Y-SW + - has member: RCADS-47-CG-AR + - has member: RCADS-47-CG-BN + - has member: RCADS-47-CG-CH-HANS + - has member: RCADS-47-CG-DA + - has member: RCADS-47-CG-DE + - has member: RCADS-47-CG-EL + - has member: RCADS-47-CG-EN + - has member: RCADS-47-CG-EN-2 + - has member: RCADS-47-CG-ES + - has member: RCADS-47-CG-ET + - has member: RCADS-47-CG-FA + - has member: RCADS-47-CG-FI + - has member: RCADS-47-CG-FR + - has member: RCADS-47-CG-FR-1 + - has member: RCADS-47-CG-FR-2 + - has member: RCADS-47-CG-FR-3 + - has member: RCADS-47-CG-FR-CA-1 + - has member: RCADS-47-CG-HI + - has member: RCADS-47-CG-HU + - has member: RCADS-47-CG-IS + - has member: RCADS-47-CG-IT + - has member: RCADS-47-CG-JA + - has member: RCADS-47-CG-JA-1 + - has member: RCADS-47-CG-JA-2 + - has member: RCADS-47-CG-KO + - has member: RCADS-47-CG-LT + - has member: RCADS-47-CG-MN + - has member: RCADS-47-CG-MR + - has member: RCADS-47-CG-MS + - has member: RCADS-47-CG-NL + - has member: RCADS-47-CG-NO + - has member: RCADS-47-CG-NO-1 + - has member: RCADS-47-CG-NO-2 + - has member: RCADS-47-CG-NY + - has member: RCADS-47-CG-PA + - has member: RCADS-47-CG-PL + - has member: RCADS-47-CG-PT + - has member: RCADS-47-CG-SL + - has member: RCADS-47-CG-SR + - has member: RCADS-47-CG-SV + - has member: RCADS-47-CG-SV-1 + - has member: RCADS-47-CG-SV-2 + - has member: RCADS-47-CG-TR + - has member: RCADS-47-CG-UR + - has member: RCADS-47-CG-VI + - has member: RCADS-47-CG-ZH-HANS + - has member: RCADS-47-CG-ZH-HANT + - has member: RCADS-47-CG-ZU + - has member: RCADS-47-Y-AR + - has member: RCADS-47-Y-BN + - has member: RCADS-47-Y-CH-HANS + - has member: RCADS-47-Y-DA + - has member: RCADS-47-Y-DE + - has member: RCADS-47-Y-EL + - has member: RCADS-47-Y-EN + - has member: RCADS-47-Y-ES + - has member: RCADS-47-Y-ET + - has member: RCADS-47-Y-FA + - has member: RCADS-47-Y-FI + - has member: RCADS-47-Y-FR + - has member: RCADS-47-Y-FR-FR-1 + - has member: RCADS-47-Y-FR-FR-2 + - has member: RCADS-47-Y-HI + - has member: RCADS-47-Y-HU + - has member: RCADS-47-Y-IS + - has member: RCADS-47-Y-IT + - has member: RCADS-47-Y-JA + - has member: RCADS-47-Y-JA-1 + - has member: RCADS-47-Y-JA-2 + - has member: RCADS-47-Y-KO + - has member: RCADS-47-Y-LT + - has member: RCADS-47-Y-MN + - has member: RCADS-47-Y-MR + - has member: RCADS-47-Y-MS + - has member: RCADS-47-Y-NL + - has member: RCADS-47-Y-NO + - has member: RCADS-47-Y-NO-1 + - has member: RCADS-47-Y-NO-2 + - has member: RCADS-47-Y-NY + - has member: RCADS-47-Y-PA + - has member: RCADS-47-Y-PL + - has member: RCADS-47-Y-PT + - has member: RCADS-47-Y-PT-BR + - has member: RCADS-47-Y-SL + - has member: RCADS-47-Y-SR + - has member: RCADS-47-Y-SV + - has member: RCADS-47-Y-TR + - has member: RCADS-47-Y-UR + - has member: RCADS-47-Y-VI + - has member: RCADS-47-Y-ZH-HANS-1 + - has member: RCADS-47-Y-ZH-HANT + - has member: RCADS-47-Y-ZU + +PSWQ-C. Attributes include: + - instance of: Instrument Collection + - instance of: NamedIndividual + - instance of: instrument Collection + - has member count: 0 + +MTT. Attributes include: + - instance of: Instrument Collection + - instance of: NamedIndividual + - instance of: instrument Collection + - has member count: 11 + - has instrument family: MTT-35 (11) + - has informant: caregiver, youth + - has language count: 3 + - has language: English, Norwegian, Spanish + - has member: MTT-35-CG-EN-1 + - has member: MTT-35-CG-EN-2 + - has member: MTT-35-CG-EN-3 + - has member: MTT-35-CG-ES-1 + - has member: MTT-35-CG-ES-2 + - has member: MTT-35-CG-NO + - has member: MTT-35-Y-EN-1 + - has member: MTT-35-Y-EN-2 + - has member: MTT-35-Y-ES-1 + - has member: MTT-35-Y-ES-2 + - has member: MTT-35-Y-NO + +PHQ. Attributes include: + - instance of: Instrument Collection + - instance of: NamedIndividual + - instance of: instrument Collection + - has member count: 1 + - has instrument family: PHQ-9 (1) + - has informant: adult + - has language count: 1 + - has language: English + - has member: PHQ-9-A-EN + +GAD. Attributes include: + - instance of: Instrument Collection + - has member count: 1 + - has member with unrecognized code: 1 + - has member: GAD-7 \ No newline at end of file diff --git a/embeddings/templates_official.txt b/embeddings/Pipeline/templates_official.txt similarity index 89% rename from embeddings/templates_official.txt rename to embeddings/Pipeline/templates_official.txt index cdee89ec..0123b601 100644 --- a/embeddings/templates_official.txt +++ b/embeddings/Pipeline/templates_official.txt @@ -7167,1636 +7167,381 @@ Total Anxiety (15.1). Attributes include: 1. Attributes include: - instance of: Instrument Collection + - has member count: 111 + - has instrument family: RCADS-25 (53), RCADS-47 (58) + - has informant: caregiver, youth + - has language count: 28 + - has language: Arabic, Brazilian Portuguese, Canadian French, Chinese (Simplified), Chinese (Simplified), Danish, Dutch, English, Estonian, European French, Finnish, French, German, Greek, Hungarian, Icelandic, Japanese, Korean, Lithuanian, Norwegian, Persian, Polish, Portuguese, Slovenian, Spanish, Swedish, Turkish, Urdu - has member: RCADS-25-CG-AR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-CH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-DA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-DE - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-EL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-EN - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-ES - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-ET - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-FA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-FI - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-FR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-FR-FR-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-HU - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-IS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-JA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-KO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-LT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-NL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-NO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-PL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-PT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-SL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-SV - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-TR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-UR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-CG-ZH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-AR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-CH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-DA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-DE - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-EL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-EN - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-ES - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-ET - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-FA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-FI - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-FR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-FR-FR-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-HU - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-IS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-JA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-KO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-LT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-NL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-NO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-PL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-PT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-PT-BR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-SL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-SV - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-TR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-UR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-25-Y-ZH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-AR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-CH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-DA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-DE - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-EL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-EN - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-ES - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-ET - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-FA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-FI - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-FR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-FR-CA-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-HU - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-IS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-JA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-JA-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-KO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-LT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-NL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-NO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-NO-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-PL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-PT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-SL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-SV - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-SV-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-TR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-UR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-CG-ZH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-AR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-CH-HANS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-DA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-DE - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-EL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-EN - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-ES - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-ET - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-FA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-FI - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-FR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-FR-FR-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-HU - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-IS - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-JA - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-JA-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-KO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-LT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-NL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-NO - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-NO-1 - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-PL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-PT - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-PT-BR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-SL - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-SV - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-TR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-UR - -1. Attributes include: - - instance of: Instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 2. Attributes include: - instance of: Instrument Collection + - has member count: 0 3. Attributes include: - instance of: Instrument Collection + - has member count: 9 + - has instrument family: MTT-35 (9) + - has informant: caregiver, youth + - has language count: 2 + - has language: English, Spanish - has member: MTT-35-CG-EN-1 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-CG-EN-2 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-CG-EN-3 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-CG-ES-1 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-CG-ES-2 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-Y-EN-1 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-Y-EN-2 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-Y-ES-1 - -3. Attributes include: - - instance of: Instrument Collection - has member: MTT-35-Y-ES-2 4. Attributes include: - instance of: Instrument Collection + - has member count: 1 + - has instrument family: PHQ-9 (1) + - has informant: adult + - has language count: 1 + - has language: English - has member: PHQ-9-A-EN RCADS. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: instrument Collection + - has member count: 178 + - has instrument family: RCADS-25 (84), RCADS-35 (2), RCADS-47 (92) + - has informant: caregiver, youth + - has language count: 41 + - has language: Arabic, Bengali, Brazilian Portuguese, Canadian French, Chichewa, Chinese (Simplified), Chinese (Simplified), Chinese (Traditional), Danish, Dutch, English, Estonian, European French, Finnish, French, German, Greek, Hindi, Hungarian, Icelandic, Italian, Japanese, Korean, Lithuanian, Malay, Marathi, Mongolian, Norwegian, Persian, Polish, Portuguese, Punjabi, Serbian, Slovenian, Spanish, Swahili, Swedish, Turkish, Urdu, Vietnamese, Zulu - has member: RCADS-25-CG-AR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-BN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-CH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-DA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-DE - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-EL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-EN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-EN-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-ES - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-ET - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-FA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-FI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-FR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-FR-CA-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-FR-FR-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-HI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-HU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-IS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-IT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-JA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-KO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-LT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-MN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-MR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-MS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-NL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-NO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-NY - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-PA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-PL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-PT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-SL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-SR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-SV - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-TR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-UR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-VI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-ZH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-ZH-HANT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-CG-ZU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-AR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-BN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-CH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-DA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-DE - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-EL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-EN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-ES - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-ET - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FR-CA-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FR-CA-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FR-FR-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-FR-FR-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-HI-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-HI-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-HU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-IS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-IT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-JA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-KO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-LT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-MN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-MR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-MS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-NL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-NO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-NY-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-NY-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-PA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-PL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-PT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-PT-BR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-SL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-SR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-SV - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-TR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-UR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-VI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-ZH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-ZH-HANT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-25-Y-ZU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-35-Y-EN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-35-Y-SW - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-AR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-BN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-CH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-DA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-DE - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-EL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-EN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-EN-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-ES - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-ET - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FR-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FR-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FR-3 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-FR-CA-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-HI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-HU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-IS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-IT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-JA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-JA-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-JA-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-KO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-LT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-MN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-MR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-MS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-NL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-NO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-NO-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-NO-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-NY - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-PA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-PL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-PT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-SL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-SR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-SV - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-SV-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-SV-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-TR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-UR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-VI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-ZH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-ZH-HANT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-CG-ZU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-AR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - - has member: RCADS-47-Y-BN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection + - has member: RCADS-47-Y-BN - has member: RCADS-47-Y-CH-HANS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-DA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-DE - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-EL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-EN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-ES - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-ET - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-FA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-FI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-FR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-FR-FR-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-FR-FR-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-HI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-HU - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-IS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-IT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-JA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-JA-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-JA-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-KO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-LT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-MN - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-MR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-MS - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-NL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-NO - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-NO-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-NO-2 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-NY - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-PA - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-PL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-PT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-PT-BR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-SL - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-SR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-SV - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-TR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-UR - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-VI - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-ZH-HANS-1 - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-ZH-HANT - -RCADS. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: RCADS-47-Y-ZU PSWQ-C. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: instrument Collection + - has member count: 0 MTT. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: instrument Collection + - has member count: 11 + - has instrument family: MTT-35 (11) + - has informant: caregiver, youth + - has language count: 3 + - has language: English, Norwegian, Spanish - has member: MTT-35-CG-EN-1 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-CG-EN-2 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-CG-EN-3 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-CG-ES-1 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-CG-ES-2 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-CG-NO - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-Y-EN-1 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-Y-EN-2 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-Y-ES-1 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-Y-ES-2 - -MTT. Attributes include: - - instance of: Instrument Collection - - instance of: NamedIndividual - - instance of: instrument Collection - has member: MTT-35-Y-NO PHQ. Attributes include: - instance of: Instrument Collection - instance of: NamedIndividual - instance of: instrument Collection + - has member count: 1 + - has instrument family: PHQ-9 (1) + - has informant: adult + - has language count: 1 + - has language: English - has member: PHQ-9-A-EN GAD. Attributes include: - instance of: Instrument Collection + - has member count: 1 + - has member with unrecognized code: 1 - has member: GAD-7 \ No newline at end of file diff --git a/embeddings/test_results.txt b/embeddings/Pipeline/test_results.txt similarity index 100% rename from embeddings/test_results.txt rename to embeddings/Pipeline/test_results.txt diff --git a/embeddings/test_search_similarity.py b/embeddings/Pipeline/test_search_similarity.py similarity index 100% rename from embeddings/test_search_similarity.py rename to embeddings/Pipeline/test_search_similarity.py diff --git a/embeddings/Pipeline/vector_store.py b/embeddings/Pipeline/vector_store.py new file mode 100644 index 00000000..e267be54 --- /dev/null +++ b/embeddings/Pipeline/vector_store.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +"""Backward-compatible shim — the vector store now lives in ``poem_core``. + +Kept so existing imports (``from vector_store import get_store``) keep resolving. +All logic — ``NumpyVectorStore``, the external-Milvus backend, and ``get_store`` +— is implemented once in ``poem_core.vector_store``. +""" +from __future__ import annotations + +import os as _os +import sys as _sys + +_EMB_ROOT = _os.path.dirname(_os.path.dirname(_os.path.abspath(__file__))) +if _EMB_ROOT not in _sys.path: + _sys.path.insert(0, _EMB_ROOT) + +from poem_core.vector_store import ( # noqa: F401,E402 + NumpyVectorStore, + MilvusVectorStore, + get_store, + _METRIC_TO_MILVUS, +) diff --git a/embeddings/ROADMAP.md b/embeddings/ROADMAP.md new file mode 100644 index 00000000..4fa06f3a --- /dev/null +++ b/embeddings/ROADMAP.md @@ -0,0 +1,100 @@ +# POEM LLM Framework — Roadmap + +Quick reference: see `embeddings/manuals/DOCS_SUMMARY.md` for a concise quick-start and dev notes. + +How to build the conversational **POEM assistant** on top of the search engine that +already exists. The retrieval half is done; the "framework" is the **agent loop** +that puts an LLM in front of it. + +## Where we are (retrieval half — done) + +- **Engine:** `poem_core` — `qwen3-embedding` (4096-dim) vectors, a pluggable vector + store (numpy / **Milvus**, exact FLAT), and RDF graph enrichment (`graph_lookup`). +- **Live vector DB:** Milvus verified end-to-end, local Standalone or Zilliz Cloud — + see [docker/MILVUS.md](docker/MILVUS.md); re-check anytime with + [docker/check_milvus.py](docker/check_milvus.py). +- **Three serving surfaces over the same engine:** + CLI ([Pipeline/search_similarity.py](Pipeline/search_similarity.py)) · + MCP tools `search`/`get_statements` ([MCP/mcp_server.py](MCP/mcp_server.py)) · + REST API + Swagger ([API/api_server.py](API/api_server.py)). +- **LLM entry points:** an LM Studio host ([MCP/LM_STUDIO.md](MCP/LM_STUDIO.md)) and a + starter terminal agent ([agent/chat_agent.py](agent/chat_agent.py)). + +## The loop we're building + +``` +user msg ─► chat model (tool-calling, OpenAI-compatible) + ─► search(query, top_k, section) ─► ranked entities (JSON) + ─► get_statements(id) on the best hit ─► graph relationships (JSON) + ─► grounded answer citing entity ids ─► [RCADS-25-CG-EN] … +``` +RAG where **retrieval is a tool call** the model chooses — not context stuffing. + +## Phases + +### Phase 1 — Prove the loop *(scaffolded)* +Fastest, zero code: **LM Studio** as the MCP host ([MCP/LM_STUDIO.md](MCP/LM_STUDIO.md)). +Confirm a tool-calling model (your `qwen2.5:7b`) calls `search` → `get_statements` +and grounds the answer; watch the tool-call cards for params/JSON. + +### Phase 2 — A dedicated agent *(starter shipped)* +[agent/chat_agent.py](agent/chat_agent.py) — a minimal loop: OpenAI SDK → a local +model (LM Studio `:1234` by default), tools = `search`/`get_statements` executed +against the REST API. Run: +``` +# terminal 1: the search API +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\API\api_server.py +# terminal 2: the agent +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\agent\chat_agent.py +``` +Next on this file: streaming output, multi-turn memory limits, richer citations, +automatic section routing, retry/observability around tool calls. + +### Phase 3 — RAG quality +- **System prompt:** ground every answer in tool results; cite ids; expand with + `get_statements`; say "not found" on empty results; no clinical/diagnostic advice + beyond the catalogue. (Baseline prompt lives in `chat_agent.py`.) +- **Retrieval tuning:** `top_k`, `section` filters, metric (cosine default); + consider a rerank or hybrid keyword+vector step. +- **Eval harness:** extend [Pipeline/evaluate_search.py](Pipeline/evaluate_search.py) + with a `question → expected instrument/scale` set; track retrieval hit-rate as you + tune prompts/params. + +### Phase 4 — Serve it +- Add a **`/chat` endpoint** to [API/api_server.py](API/api_server.py) that runs the + agent loop and streams tokens (SSE) — reuses the already-loaded store/graph, no new + process. +- A thin web chat UI (or LM Studio for internal use); add auth + request logging. +- **Done in part:** the MCP server itself can now run as a network-reachable, + containerized service (`MCP_TRANSPORT=http` + [MCP/Dockerfile](MCP/Dockerfile) + + [docker/mcp-compose.yml](docker/mcp-compose.yml)) rather than only a + locally-spawned stdio subprocess — see [MCP/MCP.md "Container deployment"](MCP/MCP.md#container-deployment). + Auth/TLS on that transport is still open, folded into Phase 5 below. + +### Phase 5 — Harden +- **Embeddings:** keep `search` on `qwen3-embedding` (4096-dim); pin a reliable serve + (RPI or a local qwen3-embedding) with failover. +- **Milvus:** rotate the Zilliz `db_admin` password → a scoped API key; size the + cluster. The reuse-guard fix means no per-startup rebuilds. Optionally add a + `generate → Milvus` ingestion path (today `.npy` is canonical, rebuilt into Milvus). +- **Observability:** log tool calls, latency, and retrieval quality. + +## Framework decision + +| Option | What | When | +|---|---|---| +| **MCP host** (LM Studio / Claude Desktop) | zero code, UI-bound | internal demos | +| **Custom Python agent** *(recommended)* | `chat_agent.py` grown up: OpenAI SDK → local model, tools → REST API | a real product | +| LangChain / LlamaIndex / Haystack | framework wrappers around the same tools | fast prototype, heavier deps | + +## The one hard constraint + +The **chat model** and the **embedding model** are independent. Swap chat models +freely (any tool-caller — `qwen2.5:7b`, Llama-3.1-Instruct, …). The **embedding +model must stay `qwen3-embedding` (4096-dim)** or `search` breaks — unless you +regenerate the whole corpus with a new model (`generate_embeddings.py`). + +## Test as you go + +Every layer has a concrete check in **[TESTING.md](TESTING.md)** — suites, CLI, the +Milvus backend, the MCP server, the REST API, and this agent. diff --git a/embeddings/TESTING.md b/embeddings/TESTING.md new file mode 100644 index 00000000..47129834 --- /dev/null +++ b/embeddings/TESTING.md @@ -0,0 +1,210 @@ +# Testing the POEM Embeddings Stack — active runbook + +Quick reference: see `embeddings/manuals/DOCS_SUMMARY.md` for a compact quick-start and troubleshooting cheatsheet. + +Concrete commands to **actively test every layer**: automated suites, the CLI, the +vector backend (numpy *and* local Milvus), the MCP server, and the REST API. +Windows/PowerShell shown; adapt paths as needed. + +## Environments & knobs + +| Interpreter | Python | Has | Use for | +|---|---|---|---| +| `tutorial_env` (`python`) | 3.8 | numpy, pymilvus 2.4 | CLI, Milvus checks | +| `MCP/.venv-mcp` | 3.12 | fastmcp, fastapi, uvicorn, pymilvus 3.0, rdflib, openai | MCP server, REST API, pytest | + +Key env vars (all optional; sensible defaults): + +```powershell +$env:VECTOR_BACKEND = "numpy" # or "milvus" +$env:EMBED_BASE_URL = "http://idea-llm-01.idea.rpi.edu:11435/v1" # needs RPI VPN +$env:EMBED_MODEL = "qwen3-embedding" # must stay 4096-dim +# Local Milvus: +$env:MILVUS_URI = "http://localhost:19530" +$env:MILVUS_TOKEN = "" +``` + +--- + +## 0. Embedding endpoint reachable? (needs RPI VPN) + +```powershell +python embeddings/Pipeline/sample_embeddings.py +# -> "Text 0 embedding length: 4096" for the first few templates +``` +`httpx.ConnectTimeout` → you're off the RPI network; the tools that embed a +**query** (`/search`, CLI search, MCP `search`) won't work until you're on VPN or +point `EMBED_*` at a local `qwen3-embedding`. + +## 1. Automated tests (offline, numpy — no network) + +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pytest ` + embeddings\MCP\test_mcp.py embeddings\Pipeline\test_search_similarity.py -q +# expect: all passed (network-only cases are skipped) +``` +The suites pin `VECTOR_BACKEND=numpy` via `conftest.py`, so they need no server. + +### Intensive edge-case suites + +Complementing the suite above with deliberately adversarial cases — Docker +not running, nonexistent/malformed entity ids, argument edge cases, and the +container-deployment failure paths: + +| File | Covers | +|---|---| +| `poem_core/test_docker_preflight.py` | Every branch of the "Docker isn't running" self-heal state machine (daemon down, stack down, never-becomes-healthy, every OS branch, `MILVUS_SKIP_ENSURE`) — fully mocked, never touches real Docker. | +| `poem_core/test_vector_store.py` | `get_store()`'s Milvus-unreachable → numpy fallback, and the local-vs-remote `MILVUS_URI` gating of the Docker self-heal. | +| `MCP/test_mcp_intensive.py` | A wide matrix of nonexistent/malformed ids into `get_statements`; `search` argument edge cases; `MCP_TRANSPORT` resolution; the `/health` route; the 0-triples and generic-exception startup guards. | +| `agent/test_lmstudio_preflight.py` | The chat agent's own "chat server isn't running" self-heal (mirrors `test_docker_preflight.py` for LM Studio). | +| `agent/test_chat_agent.py` | The tool-call loop (including the 6-round cap on a looping model), `repl()`'s error handling, both `call_tool` transports (including a real spawned-server nonexistent-id check), and `main()`'s dispatch. | + +```powershell +# Fast subset (~30s) -- excludes the two tests that spawn a real mcp_server.py +# subprocess (each redoes the full corpus + graph load): +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pytest ` + embeddings\poem_core embeddings\MCP embeddings\agent -m "not slow" -q + +# Full suite, including the slow real-subprocess integration tests (~10-15 min +# depending on machine load -- run this before pushing, not on every save): +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pytest ` + embeddings\poem_core embeddings\MCP embeddings\agent -q +``` + +## 2. CLI search (needs embedding endpoint) + +```powershell +python embeddings/Pipeline/search_similarity.py "instruments that measure anxiety in children" +python embeddings/Pipeline/search_similarity.py --section instruments --top-k 5 "caregiver depression report" +``` +Prints top-k per metric. `VECTOR_BACKEND=numpy` uses the in-process store; set it to +`milvus` to route through Milvus (results are identical — FLAT is exact). + +## 3. Vector backend — numpy default & local Milvus + +- **numpy** (zero setup): it's the default when no Milvus is reachable, and forced by + `VECTOR_BACKEND=numpy`. +- **Local Milvus** — one command verifies connection, collections, exact parity vs + numpy, and reuse: + +```powershell +$env:VECTOR_BACKEND="milvus" +$env:MILVUS_URI="http://localhost:19530" +$env:MILVUS_TOKEN="" +python embeddings/docker/check_milvus.py +# -> backend selected: MilvusVectorStore ; parity match=True ×3 ; +# count(*)=778 ×3 ; reuse OK ; RESULT: PASS +``` +`FAIL: fell back to numpy` means the server was unreachable. **Before** reaching +for a raw `docker compose up -d`, make sure Docker itself is actually running — +`docker compose up -d` just errors out ("cannot connect to the Docker daemon") +if Docker Desktop isn't started yet. The one-liner that checks *and* self-heals +(launches Docker Desktop if needed, brings up the stack, waits for health) is: +```powershell +python embeddings/docker/ensure_docker.py +``` +This is the same check `check_milvus.py`/`vector_store.get_store()` already run +automatically for any local `MILVUS_URI` — running it by hand just lets you see +the result before running something else. Only fall back to the manual command +below if you specifically want the stack up without touching anything else: +`docker compose -f embeddings/docker/milvus-compose.yml up -d`. + +## 4. MCP server (the LLM tool surface) + +```powershell +# a) No-protocol sanity check (search needs VPN; get_statements is offline) +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py RCADS-25-CG-EN + +# b) Interactive web inspector (call tools by hand, see params + JSON) +embeddings\MCP\.venv-mcp\Scripts\fastmcp.exe dev inspector embeddings\MCP\mcp_server.py +# open the printed http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=... URL + +# c) From a local LLM that CALLS the tools -> see MCP/LM_STUDIO.md +``` +On startup the server logs `Vector backend: NumpyVectorStore|MilvusVectorStore` — +that's how you confirm which backend it picked. + +## 5. REST API (HTTP + Swagger) + +```powershell +# Run it +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\API\api_server.py +# Web UI: open http://localhost:8000/docs ("Try it out" on each endpoint) + +# Or by curl: +curl http://localhost:8000/health +curl http://localhost:8000/statements/RCADS-25-CG-EN # offline +curl "http://localhost:8000/search?query=anxiety%20in%20children&top_k=3" # needs embedding +``` +Full reference + an offline `TestClient` smoke test are in [API/API.md](API/API.md). + +--- + +## One-shot smoke sequence + +```powershell +# 1. offline suites +embeddings\MCP\.venv-mcp\Scripts\python.exe -m pytest embeddings\MCP\test_mcp.py -q +# 2. graph lookup offline +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\MCP\try_search.py RCADS-25-CG-EN +# 3. milvus backend (if configured) +python embeddings\docker\check_milvus.py +# 4. REST API health (in another shell after starting api_server.py) +curl http://localhost:8000/health +``` + +## End-to-end acceptance test (whole process) + +Proves the *entire* chain in one ordered, gated sequence (stop at first failure): +a question → embedding → vector DB → dedup + graph enrichment → serving surfaces → +a grounded LLM answer. Three gates are automated by one harness; two are manual. + +**1. Point the whole stack at the target once** (local Milvus shown): +```powershell +$env:VECTOR_BACKEND="milvus" +$env:MILVUS_URI="http://localhost:19530" +$env:MILVUS_TOKEN="" +``` + +**2. Run the automated gates (1, 2, 4):** +```powershell +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\e2e_check.py +# exits 0 iff all hard gates pass; then prints the manual steps for Gates 3 & 5. +``` + +| Gate | Proves | How | Auto? | +|---|---|---|---| +| 1 | core logic intact | pytest suites (offline, numpy) | ✅ | +| 2 | live backend exact & synced | `check_milvus.py` → MilvusVectorStore, parity ×3, count 778 ×3, reuse | ✅ | +| 3 | real query embeds → vector DB → results | `search_similarity.py ""` (needs embedding endpoint) | manual | +| 4 | serving surfaces use the same backend | REST `/health` backend, `/statements`, `/search` | ✅ | +| 5 | grounded LLM answer (the top) | `api_server` + `chat_agent`: ask a question → cited answer | manual | + +**3. Manual gates (need the embedding endpoint / Ollama):** +```powershell +# Gate 3 +embeddings\MCP\.venv-mcp\Scripts\python.exe ` + embeddings\Pipeline\search_similarity.py "instruments that measure anxiety in children" +# Gate 5 (two terminals) +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\API\api_server.py # A +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\agent\chat_agent.py # B +# ask: "Which instruments measure anxiety in children? Describe the top one." +# PASS if it calls search -> get_statements and cites entity ids. +``` + +**Pass = whole process green:** Gates 1–5 pass, **no `[vector_store] Milvus backend +unavailable`** warning (that = a silent numpy fallback, usually the CA bundle), and the +agent's answer cites ids that `search` returned. If `/search` returns **503**, you're +off the embedding endpoint (get on RPI VPN, or point `EMBED_*` at a local +`qwen3-embedding`) — Gates 3 & 5 can't complete until that's reachable. + +## Troubleshooting + +| Symptom | Cause → fix | +|---|---| +| `httpx.ConnectTimeout` / `/search` 503 | Embedding endpoint unreachable → RPI VPN, or point `EMBED_*` at a local `qwen3-embedding`. | +| `check_milvus.py` prints `fell back to numpy` | Server down / wrong URI / missing local Docker container → check each; the stderr warning names the exception. | +| Dimension / shape error in search | Query embedded by a non-4096 model → use `qwen3-embedding`, or regenerate the corpus. | +| LM Studio model never calls the tool | Use a tool-calling model; enable `poem-search`; approve tool calls ([MCP/LM_STUDIO.md](MCP/LM_STUDIO.md)). | +| `fastmcp dev … mcp_server.py` "Unknown command" | FastMCP 3.x → use `fastmcp dev inspector ` ([MCP.md §3](MCP/MCP.md)). | diff --git a/embeddings/agent/AGENT.md b/embeddings/agent/AGENT.md new file mode 100644 index 00000000..4d0f70fe --- /dev/null +++ b/embeddings/agent/AGENT.md @@ -0,0 +1,223 @@ +# POEM Chat Agent (`chat_agent.py`) + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a single-page quick-start and common commands. + +A minimal terminal chatbot that puts a **local, tool-calling chat model** in front +of the POEM search tools. The model decides when to call `search` / +`get_statements`; the agent executes those calls and feeds the JSON back, so every +answer is grounded in the ontology and cites entity ids (e.g. `[RCADS-25-CG-EN]`). + +> **TL;DR** — one terminal: +> ```powershell +> embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\agent\chat_agent.py +> ``` +> Preconditions: a tool-calling chat server is up (LM Studio on `:1234` by default, +> or Ollama on `:11434` — see [§3](#3-managing-which-chat-model-you-use)), and — +> for the `search` tool only — the embedding endpoint is reachable (RPI VPN, or a +> local `qwen3-embedding`). `get_statements` works fully offline. + +--- + +## 1. Architecture + +``` +you --> chat model (OpenAI-compatible: Ollama / LM Studio / vLLM) + --tool calls--> MCP client --stdio--> ../MCP/mcp_server.py + --> grounded answer with [entity-id] citations +``` + +Two separate LLM roles are involved — don't conflate them: + +| Role | What it does | Which model | Where it's configured | +|---|---|---|---| +| **Chat model** | Conversation + decides tool calls | **Your choice** — any tool-calling model (Qwen2.5-7B, Llama-3.1-8B, …) | `CHAT_BASE_URL` / `CHAT_MODEL` (this agent) | +| **Embedding model** | Embeds the `search` query | **Fixed:** `qwen3-embedding` (4096-dim) — must match the stored corpus | `EMBED_BASE_URL` / `EMBED_MODEL` (the MCP server it spawns) | + +The chat model is fully swappable ([§3](#3-managing-which-chat-model-you-use)). +The embedding model is **not** — the corpus vectors were built with +`qwen3-embedding`, so queries must be embedded by the same model or `search` +errors/returns nonsense (see [../MCP/LM_STUDIO.md](../MCP/LM_STUDIO.md) "the +embedding-model must match"). + +## 2. Running it + +Use a Python ≥ 3.10 env with the deps installed. Both MCP venvs already have +everything: + +```powershell +# Dev venv (on the machine that created it): +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\agent\chat_agent.py + +# Per-device venv (created by MCP/setup_lmstudio.ps1 on any machine): +%LOCALAPPDATA%\POEM\mcp-venv\Scripts\python.exe embeddings\agent\chat_agent.py +``` + +Fresh env instead: `pip install -r embeddings/agent/requirements-agent.txt` +(`openai`, `fastmcp`, `httpx`) — see [requirements-agent.txt](./requirements-agent.txt). +The default (MCP) transport also spawns `../MCP/mcp_server.py`, whose deps are +`requirements-mcp.txt` (covered automatically by the venvs above). + +On start (MCP mode) the agent spawns the MCP server as a subprocess — the corpus +(~778 vectors) and RDF graph load, which takes a moment — then discovers the tool +list from the server (`list_tools`), so schemas can never drift from the +implementation. Then chat at the `you>` prompt; tool calls are echoed to stderr as +`· search({...})`. Type `exit` or Ctrl-C to quit. Each user turn allows at most +**6 tool-call rounds** before the agent stops a looping model. + +## 3. Managing which chat model you use + +The agent talks to **any OpenAI-compatible chat server** via three env vars: + +| Env var | Default | Meaning | +|---|---|---| +| `CHAT_BASE_URL` | `http://localhost:1234/v1` | The chat server (LM Studio default; Ollama is `:11434/v1`) | +| `CHAT_MODEL` | `google/gemma-4-e4b` | Model name **as the server knows it** | +| `CHAT_API_KEY` | `lm-studio` | Ignored by local servers; set for a real cloud endpoint | + +**The model must support tool/function calling** — that's how it invokes `search` +/ `get_statements`. Good local picks: *Qwen2.5-7B-Instruct*, *Llama-3.1-8B-Instruct* +(the current default, `gemma-4-e4b`, is what happened to be downloaded locally; +swap in a verified tool-caller if it doesn't reliably invoke tools). A +non-tool-calling model will just answer from its own head, ungrounded. + +Switching is just env vars — no code changes: + +```powershell +# LM Studio (default) — start its server (Developer tab) and pick a loaded model: +$env:CHAT_MODEL = "qwen2.5-7b-instruct" # the id LM Studio shows for the loaded model + +# Ollama as the chat server: +$env:CHAT_BASE_URL = "http://localhost:11434/v1" +$env:CHAT_MODEL = "qwen2.5:7b" # or llama3.1:8b, etc. (see `ollama list`) + +# vLLM / any other OpenAI-compatible server: +$env:CHAT_BASE_URL = "http://:/v1" +$env:CHAT_MODEL = "" + +# then run the agent as usual +embeddings\MCP\.venv-mcp\Scripts\python.exe embeddings\agent\chat_agent.py +``` + +The agent prints `Chat model: @ ` at startup so you can confirm what +it's actually using. If the model name doesn't match one the server has +loaded/pulled, the first turn fails with a chat error naming `CHAT_BASE_URL`. + +### 3a. Self-healing on startup + +For the default LM Studio backend, `main()` calls +[`lmstudio_preflight.ensure_lmstudio_ready()`](./lmstudio_preflight.py) before +opening the tool loop — you don't have to remember to open LM Studio, start its +server, and load the model yourself every time: + +1. Checks `/models`; if unreachable, tries `lms server start`. +2. If that fails (the LM Studio *application* isn't running at all — `lms + server start` alone can't wake a fully-closed app), launches LM Studio and + retries `lms server start` until it comes up. +3. Checks `CHAT_MODEL` is loaded; if not, `lms load `. + +This mirrors [`poem_core/docker_preflight.py`](../poem_core/docker_preflight.py)'s +role for Milvus. It only ever acts on a **local** `CHAT_BASE_URL` +(localhost/127.0.0.1) — pointing at Ollama, vLLM, or a remote server never +triggers a local LM Studio launch. `CHAT_SKIP_ENSURE=1` disables it entirely; +`LM_STUDIO_EXE` / `LMS_CLI_EXE` override the app / `lms` CLI paths if they're +not in the standard locations. + +## 4. How it utilizes LM Studio + +LM Studio can play **three different parts** in this stack — pick per role: + +### 4a. LM Studio as the agent's *chat* backend + +Run LM Studio purely as a local OpenAI-compatible server that `chat_agent.py` +talks to: + +1. In LM Studio, download a **tool-calling** chat model (Discover tab) and load it. +2. Start the local server (Developer tab — default `http://localhost:1234/v1`). +3. Point the agent at it (see [§3](#3-managing-which-chat-model-you-use)): + `CHAT_BASE_URL=http://localhost:1234/v1`, `CHAT_MODEL=`. + +Here the agent still owns the tool loop and spawns the MCP server itself; LM +Studio only generates the chat turns. + +### 4b. LM Studio as the *MCP host* (replaces this agent) + +LM Studio ≥ 0.3.17 is itself an MCP host: it runs the chat model **and** calls the +POEM tools directly, with expandable tool-call cards showing parameters + JSON. In +that setup you don't run `chat_agent.py` at all — register the server with the +one-command setup: + +```powershell +powershell -ExecutionPolicy Bypass -File O:\POEM\embeddings\MCP\setup_lmstudio.ps1 +``` +(`O:\POEM` is this team's mapped share; adjust for wherever your own checkout lives.) + +Full walkthrough: [../MCP/LM_STUDIO.md](../MCP/LM_STUDIO.md). Rule of thumb: +LM Studio-as-host for interactive/inspection use; `chat_agent.py` when you want a +scriptable terminal loop or a base to grow the Phase 3 assistant from +([../ROADMAP.md](../ROADMAP.md)). + +### 4c. LM Studio as the *embedding* provider (for `search`) + +Independent of the chat model, the spawned MCP server needs a `qwen3-embedding` +endpoint to embed queries. Default is the RPI server (VPN required). To go fully +local, load a **`qwen3-embedding`** GGUF in LM Studio and point the MCP server at +it before starting the agent: + +```powershell +$env:EMBED_BASE_URL = "http://localhost:1234/v1" +$env:EMBED_MODEL = "qwen3-embedding" +``` + +⚠️ Only `qwen3-embedding` (4096-dim) works — a different embedder (e.g. +`nomic-embed-text`, 768-dim) mismatches the stored corpus unless you regenerate +all embeddings with it (`generate_embeddings.py`). + +## 5. Tool transports (`POEM_TOOLS`) + +| Mode | How tools run | When to use | +|---|---|---| +| `mcp` *(default)* | Agent spawns `../MCP/mcp_server.py` over stdio; tool schemas discovered live | One terminal, no extra process — the normal path | +| `rest` | Calls the FastAPI service (`../API/api_server.py`) over HTTP | The REST API is already running / shared | + +```powershell +# rest mode: start the API first, then +$env:POEM_TOOLS = "rest" +$env:POEM_API_URL = "http://localhost:8000" # default +``` + +## 6. Full configuration reference + +| Env var | Default | Purpose | +|---|---|---| +| `CHAT_BASE_URL` | `http://localhost:1234/v1` | OpenAI-compatible chat server (LM Studio / Ollama / vLLM) | +| `CHAT_MODEL` | `google/gemma-4-e4b` | Tool-calling chat model name | +| `CHAT_API_KEY` | `lm-studio` | API key (ignored by local servers) | +| `CHAT_SKIP_ENSURE` | unset | Set to skip the LM Studio self-heal preflight (§3a) entirely | +| `LM_STUDIO_EXE` / `LMS_CLI_EXE` | standard install paths | Override where the preflight looks for the app / `lms` CLI | +| `POEM_TOOLS` | `mcp` | Tool transport: `mcp` or `rest` | +| `POEM_MCP_PYTHON` | this interpreter | Python used to spawn the MCP server (mcp mode) | +| `POEM_MCP_SERVER` | `../MCP/mcp_server.py` | Path to the MCP server script (mcp mode) | +| `POEM_API_URL` | `http://localhost:8000` | REST API base URL (rest mode) | +| `EMBED_BASE_URL` / `EMBED_MODEL` | RPI / `qwen3-embedding` | Inherited by the spawned MCP server — where `search` queries get embedded | +| `VECTOR_BACKEND` | `milvus` (auto-falls back to numpy) | Inherited by the spawned MCP server — see [../docker/MILVUS.md](../docker/MILVUS.md) | + +## 7. Troubleshooting + +| Symptom | Fix | +|---|---| +| `!! chat error ... Is the chat server up at ?` | For the LM Studio default this should self-heal (§3a) — if it still fails, `lms server status` / check `LM_STUDIO_EXE`; for Ollama, start it manually; check `CHAT_MODEL` matches a loaded/pulled model. | +| Model answers but never calls tools | Use a **tool-calling** model (§3); phrase the question so it needs the catalogue. | +| `search` returns an error / nonsense | Embedding endpoint down or wrong model — `EMBED_MODEL` must be `qwen3-embedding` (4096-dim); RPI endpoint needs VPN (§4c). | +| `get_statements` works but `search` doesn't | Expected offline — `get_statements` is a pure graph lookup; `search` needs the embedding endpoint. | +| `!! MCP server script not found` | Set `POEM_MCP_SERVER` to the real path of `mcp_server.py`. | +| `ModuleNotFoundError: fastmcp` (or on server spawn) | Run the agent with an MCP venv (§2), or set `POEM_MCP_PYTHON` to one. | +| `(stopped after too many tool-call rounds)` | The model looped; ask again more specifically or use a stronger chat model. | +| rest mode: `POEM REST API not reachable` | Start `embeddings/API/api_server.py` first, or unset `POEM_TOOLS` to use MCP mode. | + +## 8. Related docs + +- [../MCP/MCP.md](../MCP/MCP.md) — the MCP server the agent spawns (tools, schemas). +- [../MCP/LM_STUDIO.md](../MCP/LM_STUDIO.md) — LM Studio as MCP host + embedding caveat. +- [../API/API.md](../API/API.md) — the REST surface used by `POEM_TOOLS=rest`. +- [../ROADMAP.md](../ROADMAP.md) — how this Phase 2 agent grows into the full assistant. +- [../TESTING.md](../TESTING.md) — gate 5: manual grounded-answer check via this agent; automated coverage lives in [test_chat_agent.py](./test_chat_agent.py) (tool-call loop, `repl()` error handling, both transports, `main()` dispatch) and [test_lmstudio_preflight.py](./test_lmstudio_preflight.py) (the self-heal in §3a) — see [TESTING.md "Intensive edge-case suites"](../TESTING.md#intensive-edge-case-suites). diff --git a/embeddings/agent/chat_agent.py b/embeddings/agent/chat_agent.py new file mode 100644 index 00000000..d39ea06f --- /dev/null +++ b/embeddings/agent/chat_agent.py @@ -0,0 +1,270 @@ +#!/usr/bin/env python3 +"""Terminal chat agent for grounded POEM answers (Phase 2). + +A minimal LLM agent loop that puts a local, tool-calling chat model in front of +the POEM search tools. The model decides when to call ``search`` / +``get_statements``; this agent executes those calls and feeds the JSON back, so +every answer is grounded in the ontology and cites entity ids. + +Tool transport (POEM_TOOLS env var): + +* ``mcp`` (default) -- the agent spawns ``../MCP/mcp_server.py`` as a subprocess + and talks MCP over stdio, exactly like LM Studio or any other MCP host. The + tool list and parameter schemas are discovered from the server at startup + (``list_tools``), so they can never drift from the implementation. One + terminal, no separate API process; the corpus + graph load on agent start. + + you --> chat model (OpenAI-compatible: Ollama / LM Studio / vLLM) + --tool calls--> MCP client --stdio--> mcp_server.py + --> grounded answer with [entity-id] citations + +* ``rest`` -- the previous behavior: call the POEM REST API + (``embeddings/API/api_server.py``, run it separately) over HTTP. + +Run (one terminal, MCP mode): + o:\\POEM\\embeddings\\agent\\chat_agent.py + # e.g. the per-device venv created by MCP/setup_lmstudio.ps1: + # %LOCALAPPDATA%\\POEM\\mcp-venv\\Scripts\\python.exe + # or the dev venv on the machine that built it: MCP/.venv-mcp + +Preconditions: none to remember for the LM Studio default -- ``main()`` calls +``lmstudio_preflight.ensure_lmstudio_ready()`` first, which launches LM Studio +and loads CHAT_MODEL if either isn't already up (set CHAT_SKIP_ENSURE=1 to skip). +A non-default/remote CHAT_BASE_URL (e.g. Ollama) is untouched by this. The +``search`` tool additionally needs the embedding endpoint (RPI VPN, or a local +qwen3-embedding). ``get_statements`` works fully offline. + +Config (env vars): + CHAT_BASE_URL default http://localhost:1234/v1 (or Ollama :11434/v1, vLLM, ...) + CHAT_MODEL default google/gemma-4-e4b (any tool-calling model) + CHAT_API_KEY default "lm-studio" (ignored by local servers) + CHAT_SKIP_ENSURE set to skip the LM Studio self-heal preflight entirely + POEM_TOOLS default "mcp"; set "rest" for the HTTP API path + POEM_MCP_PYTHON interpreter used to spawn the MCP server (default: this one) + POEM_MCP_SERVER path to mcp_server.py (default: ../MCP/mcp_server.py) + POEM_API_URL default http://localhost:8000 (rest mode only) + +Requires ``openai`` and ``fastmcp`` (``httpx`` for rest mode); all ship with the +MCP venv. +""" +from __future__ import annotations + +import asyncio +import json +import os +import sys + +from openai import AsyncOpenAI + +from lmstudio_preflight import ensure_lmstudio_ready + +CHAT_BASE_URL = os.environ.get("CHAT_BASE_URL", "http://localhost:1234/v1") +CHAT_MODEL = os.environ.get("CHAT_MODEL", "google/gemma-4-e4b") +CHAT_API_KEY = os.environ.get("CHAT_API_KEY", "lm-studio") +POEM_TOOLS = os.environ.get("POEM_TOOLS", "mcp").strip().lower() +POEM_API_URL = os.environ.get("POEM_API_URL", "http://localhost:8000").rstrip("/") + +_HERE = os.path.dirname(os.path.abspath(__file__)) +MCP_SERVER = os.path.abspath( + os.environ.get("POEM_MCP_SERVER", os.path.join(_HERE, "..", "MCP", "mcp_server.py"))) +MCP_PYTHON = os.environ.get("POEM_MCP_PYTHON", sys.executable) + +chat = AsyncOpenAI(base_url=CHAT_BASE_URL, api_key=CHAT_API_KEY) + +SYSTEM = ( + "You are the POEM assistant, an expert on the POEM catalogue of mental-health " + "instruments, scales, and collections. Answer ONLY from tool results — never " + "invent instruments, ids, or facts. Workflow: call `search` to find relevant " + "entities, then `get_statements` on a result's id to read its details. Cite the " + "entity id(s) you used, e.g. [RCADS-25-CG-EN]. If search returns nothing relevant, " + "say so plainly. Do not give clinical or diagnostic advice beyond describing what " + "the catalogue contains." +) + +# Hand-written schemas for rest mode only. In MCP mode the schemas come from the +# server itself (list_tools), so they cannot drift. +REST_TOOLS = [ + {"type": "function", "function": { + "name": "search", + "description": "Semantic search over POEM instruments/scales/collections; returns ranked entities.", + "parameters": {"type": "object", "properties": { + "query": {"type": "string", "description": "Natural-language search text (topic, symptom, item wording)."}, + "top_k": {"type": "integer", "description": "How many unique entities to return (default 5)."}, + "section": {"type": "string", "enum": ["instruments", "scales", "collections"], + "description": "Optional section filter; omit to search all."}, + }, "required": ["query"]}, + }}, + {"type": "function", "function": { + "name": "get_statements", + "description": "Return a POEM entity's relationships from the graph. Pass an id from a search result.", + "parameters": {"type": "object", "properties": { + "entity_id": {"type": "string", "description": "An id from search, e.g. 'RCADS-25-CG-EN' or 'SP'."}, + }, "required": ["entity_id"]}, + }}, +] + + +async def chat_once(messages: list, tools: list, call_tool) -> str: + """One user turn: let the model call tools until it produces a final answer.""" + for _ in range(6): # cap tool-call rounds so a confused model can't loop forever + resp = await chat.chat.completions.create(model=CHAT_MODEL, messages=messages, tools=tools) + msg = resp.choices[0].message + messages.append(msg.model_dump(exclude_none=True)) + if not msg.tool_calls: + return msg.content or "" + for tc in msg.tool_calls: + try: + args = json.loads(tc.function.arguments or "{}") + except json.JSONDecodeError: + args = {} + print(f" · {tc.function.name}({args})", file=sys.stderr) + result = await call_tool(tc.function.name, args) + messages.append({"role": "tool", "tool_call_id": tc.id, "content": result}) + return "(stopped after too many tool-call rounds)" + + +async def repl(tools: list, call_tool) -> None: + print(f"Chat model: {CHAT_MODEL} @ {CHAT_BASE_URL}") + print("Ask about POEM instruments/scales/collections. Type 'exit' or Ctrl-C to quit.\n") + messages: list = [{"role": "system", "content": SYSTEM}] + while True: + try: + user = (await asyncio.to_thread(input, "you> ")).strip() + except (EOFError, KeyboardInterrupt): + print() + break + if user.lower() in {"exit", "quit"}: + break + if not user: + continue + messages.append({"role": "user", "content": user}) + try: + answer = await chat_once(messages, tools, call_tool) + except Exception as e: + print(f"!! chat error ({type(e).__name__}: {e}). Is the chat server up at {CHAT_BASE_URL}?\n") + continue + print(f"\npoem> {answer}\n") + + +# --------------------------------------------------------------------------- +# Transport: MCP (default) -- spawn mcp_server.py over stdio, discover tools. +# +# make_mcp_call_tool is pulled out as its own function (rather than a closure +# defined inline in run_mcp) so tests can construct it against a fake or a +# real-but-directly-driven fastmcp Client without going through the full +# subprocess-spawn + interactive-REPL setup in run_mcp itself (see +# agent/test_chat_agent.py). +# --------------------------------------------------------------------------- +def make_mcp_call_tool(client): + """Build the ``call_tool(name, args) -> str`` callable for MCP transport. + + Never raises: a tool error (e.g. an unknown entity id -- ``ToolError``) or + a transport-level failure is caught and turned into a JSON ``{"error": ...}`` + string, so a bad id from the model degrades to a message it can react to + instead of crashing the turn. + """ + async def call_tool(name: str, args: dict) -> str: + try: + res = await client.call_tool(name, args) + return json.dumps(res.data, default=str)[:6000] + except Exception as e: # ToolError (e.g. bad entity id), transport errors + return json.dumps({"error": f"{type(e).__name__}: {e}"}) + + return call_tool + + +async def run_mcp() -> None: + from fastmcp import Client + from fastmcp.client.transports import StdioTransport + + if not os.path.isfile(MCP_SERVER): + print(f"!! MCP server script not found: {MCP_SERVER} (set POEM_MCP_SERVER)") + return + print(f"Starting POEM MCP server over stdio (corpus + graph load; takes a minute) ...") + print(f" {MCP_PYTHON} {MCP_SERVER}") + client = Client(StdioTransport(command=MCP_PYTHON, args=[MCP_SERVER])) + async with client: + mcp_tools = await client.list_tools() + # MCP tool schemas -> OpenAI function-calling format, verbatim. + tools = [{"type": "function", "function": { + "name": t.name, + "description": t.description or "", + "parameters": t.inputSchema, + }} for t in mcp_tools] + print(f"POEM tools (via MCP): {', '.join(t.name for t in mcp_tools)}") + + await repl(tools, make_mcp_call_tool(client)) + + +# --------------------------------------------------------------------------- +# Transport: REST -- the previous behavior (embeddings/API/api_server.py). +# +# make_rest_call_tool is likewise pulled out so tests can drive it against an +# httpx.AsyncClient wired to httpx.MockTransport (in-process fake HTTP, no +# live api_server.py needed) instead of only via the full run_rest() flow. +# --------------------------------------------------------------------------- +def make_rest_call_tool(http): + """Build the ``call_tool(name, args) -> str`` callable for REST transport. + + Never raises: an HTTP error status (e.g. 404 for an unknown entity id) or + any other request failure is caught and turned into a JSON ``{"error": ...}`` + string, matching make_mcp_call_tool's contract. + """ + import httpx + + async def call_tool(name: str, args: dict) -> str: + try: + if name == "search": + params = {"query": args["query"], "top_k": int(args.get("top_k", 5) or 5)} + if args.get("section"): + params["section"] = args["section"] + r = await http.get("/search", params=params) + elif name == "get_statements": + r = await http.get(f"/statements/{args['entity_id']}") + else: + return json.dumps({"error": f"unknown tool {name}"}) + r.raise_for_status() + return json.dumps(r.json())[:6000] + except httpx.HTTPStatusError as e: + return json.dumps({"error": f"HTTP {e.response.status_code}: {e.response.text[:200]}"}) + except Exception as e: + return json.dumps({"error": f"{type(e).__name__}: {e}"}) + + return call_tool + + +async def run_rest() -> None: + import httpx + + http = httpx.AsyncClient(base_url=POEM_API_URL, timeout=60) + try: + h = (await http.get("/health")).json() + print(f"POEM API: {POEM_API_URL} (backend={h.get('vector_backend')}, " + f"{h.get('num_vectors')} vectors, embed={h.get('embed_model')})") + except Exception as e: + print(f"!! POEM REST API not reachable at {POEM_API_URL} ({type(e).__name__}). " + f"Start it first:\n embeddings/API/api_server.py\n" + f" (or unset POEM_TOOLS to use the MCP transport instead)") + return + + try: + await repl(REST_TOOLS, make_rest_call_tool(http)) + finally: + await http.aclose() + + +def main() -> None: + ensure_lmstudio_ready(CHAT_BASE_URL, CHAT_MODEL) + if POEM_TOOLS == "rest": + asyncio.run(run_rest()) + else: + asyncio.run(run_mcp()) + + +if __name__ == "__main__": + main() + +r''' +o:\POEM\embeddings\MCP\.venv-mcp\Scripts\python.exe o:\POEM\embeddings\agent\chat_agent.py +Which caregiver-report instrument covers depression in children, and what kinds of things does it ask about? +''' \ No newline at end of file diff --git a/embeddings/agent/lmstudio_preflight.py b/embeddings/agent/lmstudio_preflight.py new file mode 100644 index 00000000..218a9354 --- /dev/null +++ b/embeddings/agent/lmstudio_preflight.py @@ -0,0 +1,173 @@ +"""Self-healing preflight for a local LM Studio chat server. + +Mirrors ``poem_core/docker_preflight.py``'s role for Milvus, but for +``chat_agent.py``'s default chat backend (LM Studio, ``CHAT_BASE_URL``): + + 1. Confirm the server answers ``/models``; if not, try + ``lms server start``. If *that* fails (the LM Studio application itself + isn't running -- ``lms server start`` alone cannot wake a fully-closed + app, confirmed empirically: it times out after ~30s with "Waking up LM + Studio service..."), launch the LM Studio application and retry + ``lms server start`` until it succeeds. + 2. Confirm ``CHAT_MODEL`` is loaded (present in ``/models``); if not, + ``lms load ``. + +Only ever acts on a *local* base_url (localhost/127.0.0.1) -- a remote +CHAT_BASE_URL never triggers a local launch. Never raises: a ``False`` return +just means "still down," same as the existing chat error message already +handles. Set ``CHAT_SKIP_ENSURE=1`` to disable entirely (mirrors +``MILVUS_SKIP_ENSURE``). +""" +from __future__ import annotations + +import json +import os +import platform +import shutil +import subprocess +import time +import urllib.error +import urllib.request +from urllib.parse import urljoin, urlparse + +_WINDOWS_LM_STUDIO_PATHS = [ + os.path.expandvars(r"%LOCALAPPDATA%\Programs\LM Studio\LM Studio.exe"), +] + + +def is_local_url(url: str) -> bool: + """True if ``url`` points at this machine (the only case we can self-heal).""" + return (urlparse(url).hostname or "") in ("localhost", "127.0.0.1", "::1") + + +def _run(cmd: list[str], timeout: float | None = None) -> subprocess.CompletedProcess: + return subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + + +def _lms_path() -> str | None: + return shutil.which("lms") or os.environ.get("LMS_CLI_EXE") + + +def list_models(base_url: str, timeout: float = 5) -> list[str] | None: + """Model ids currently loaded, or None if the server isn't reachable.""" + url = urljoin(base_url.rstrip("/") + "/", "models") + try: + with urllib.request.urlopen(url, timeout=timeout) as resp: + data = json.loads(resp.read()) + return [m["id"] for m in data.get("data", [])] + except (urllib.error.URLError, OSError, ValueError): + return None + + +def server_alive(base_url: str, timeout: float = 5) -> bool: + return list_models(base_url, timeout=timeout) is not None + + +def _find_lm_studio_windows() -> str | None: + override = os.environ.get("LM_STUDIO_EXE") + if override and os.path.isfile(override): + return override + for path in _WINDOWS_LM_STUDIO_PATHS: + if os.path.isfile(path): + return path + return None + + +def start_lm_studio_app(log=print) -> bool: + """Best-effort launch of the LM Studio application. True iff a launch was attempted.""" + system = platform.system() + if system == "Windows": + exe = _find_lm_studio_windows() + if not exe: + log("[lmstudio_preflight] LM Studio.exe not found in the standard install path " + "(set LM_STUDIO_EXE to override). Start it manually.") + return False + log(f"[lmstudio_preflight] Launching {exe} ...") + subprocess.Popen([exe], close_fds=True) + return True + if system == "Darwin": + log("[lmstudio_preflight] Launching LM Studio ...") + subprocess.Popen(["open", "-a", "LM Studio"], close_fds=True) + return True + log(f"[lmstudio_preflight] Unrecognized platform '{system}'; start LM Studio manually.") + return False + + +def _try_server_start(lms: str, timeout: float) -> bool: + try: + return _run([lms, "server", "start"], timeout=timeout).returncode == 0 + except (subprocess.TimeoutExpired, OSError): + return False + + +def ensure_server_running(base_url: str, timeout: float = 150, log=print) -> bool: + """Get the LM Studio server answering at base_url, launching the app if needed.""" + if server_alive(base_url): + return True + + lms = _lms_path() + if not lms: + log("[lmstudio_preflight] `lms` CLI not found on PATH (set LMS_CLI_EXE to override). " + "Start LM Studio's server manually.") + return False + + deadline = time.monotonic() + timeout + log("[lmstudio_preflight] LM Studio server unreachable; trying `lms server start` ...") + # Cheap first: works instantly if the app is already open, just with the server off. + if _try_server_start(lms, timeout=30) and server_alive(base_url): + return True + + # The app itself likely isn't running -- `lms server start` alone cannot wake a + # fully-closed app (it times out after ~30s). Launch it and keep retrying. + if not start_lm_studio_app(log=log): + return False + log("[lmstudio_preflight] Waiting for the LM Studio application to initialize ...") + while time.monotonic() < deadline: + if _try_server_start(lms, timeout=30) and server_alive(base_url): + return True + time.sleep(5) + log(f"[lmstudio_preflight] LM Studio server did not come up within {timeout:.0f}s.") + return False + + +def ensure_model_loaded(base_url: str, model: str, timeout: float = 150, log=print) -> bool: + lms = _lms_path() + models = list_models(base_url) + if models is None: + return False + if model in models: + return True + if not lms: + log(f"[lmstudio_preflight] Model '{model}' not loaded and `lms` CLI not found; " + f"load it manually in LM Studio.") + return False + log(f"[lmstudio_preflight] Loading model '{model}' ...") + try: + result = _run([lms, "load", model], timeout=timeout) + except (subprocess.TimeoutExpired, OSError) as e: + log(f"[lmstudio_preflight] `lms load {model}` failed to run: {e}") + return False + if result.returncode != 0: + log(f"[lmstudio_preflight] `lms load {model}` failed:\n{result.stderr}") + return False + return True + + +def ensure_lmstudio_ready(base_url: str, model: str, timeout: float = 150, quiet: bool = False) -> bool: + """Make sure a local LM Studio server is up with ``model`` loaded. + + Returns True once ready, False if it gave up (never raises). Skips + everything (returns True) if CHAT_SKIP_ENSURE is set, or if base_url + isn't local (a remote chat server is someone else's problem to keep up). + """ + if os.environ.get("CHAT_SKIP_ENSURE") or not is_local_url(base_url): + return True + + log = (lambda *_: None) if quiet else print + + if not ensure_server_running(base_url, timeout=timeout, log=log): + return False + if not ensure_model_loaded(base_url, model, timeout=timeout, log=log): + return False + log(f"[lmstudio_preflight] LM Studio is up with '{model}' loaded.") + return True diff --git a/embeddings/agent/requirements-agent.txt b/embeddings/agent/requirements-agent.txt new file mode 100644 index 00000000..db9762d9 --- /dev/null +++ b/embeddings/agent/requirements-agent.txt @@ -0,0 +1,16 @@ +# POEM chat agent (Phase 2) — dependencies. +# +# All three ship with the MCP venvs (MCP/.venv-mcp, or the per-device venv that +# MCP/setup_lmstudio.ps1 creates at %LOCALAPPDATA%\POEM\mcp-venv), so no install +# is needed there. For a fresh env: +# /python.exe -m pip install -r embeddings/agent/requirements-agent.txt +# Behind an SSL-intercepting network, add: +# --trusted-host pypi.org --trusted-host files.pythonhosted.org +# +# Note: the default (MCP) transport also spawns ../MCP/mcp_server.py, whose own +# deps are requirements-mcp.txt — covered automatically when you run the agent +# with one of the MCP venvs above. + +openai>=1.0.0 # OpenAI-compatible chat client (works with Ollama / LM Studio / vLLM) +fastmcp>=3.0.0 # MCP client: spawns mcp_server.py over stdio (default transport) +httpx>=0.24.0 # rest mode only: calls the POEM REST API (/search, /statements) diff --git a/embeddings/agent/test_chat_agent.py b/embeddings/agent/test_chat_agent.py new file mode 100644 index 00000000..a5de74ff --- /dev/null +++ b/embeddings/agent/test_chat_agent.py @@ -0,0 +1,434 @@ +#!/usr/bin/env python3 +"""Intensive tests for agent/chat_agent.py: + + * chat_once()'s tool-call loop, including the 6-round cap for a looping + model, malformed tool-call arguments, and a tool call that comes back as + an error (the "nonexistent id" shape a real MCP/REST call produces). + * repl()'s error handling: a chat-server failure must not crash the loop. + * make_mcp_call_tool / make_rest_call_tool in isolation (fake transports), + plus one real end-to-end check: a genuine mcp_server.py subprocess + (numpy backend, offline-safe) asked for a nonexistent entity id, driven + through the exact same call_tool the real agent uses. + * main()'s POEM_TOOLS dispatch. + +Async code is driven via asyncio.run() inside plain `def test_...` functions +rather than `async def test_...`, so this suite has no dependency on +pytest-asyncio/anyio's pytest plugin being configured -- it runs under plain +pytest everywhere the rest of this project's suites do. + +Run with the MCP venv interpreter: + embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + embeddings\\agent\\test_chat_agent.py -v +""" +from __future__ import annotations + +import asyncio +import json +import os +import sys +from unittest.mock import AsyncMock + +import pytest + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +import chat_agent # noqa: E402 + +_MCP_SERVER_PATH = os.path.abspath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "MCP", "mcp_server.py") +) + + +# --------------------------------------------------------------------------- +# Fakes mimicking just enough of the OpenAI SDK's response shape for +# chat_once() to operate on (message.tool_calls, message.content, +# message.model_dump()). +# --------------------------------------------------------------------------- + +class FakeFunction: + def __init__(self, name: str, arguments: str): + self.name = name + self.arguments = arguments + + +class FakeToolCall: + def __init__(self, id: str, name: str, arguments: str): + self.id = id + self.function = FakeFunction(name, arguments) + + +class FakeMessage: + def __init__(self, content: str | None = None, tool_calls: list | None = None): + self.content = content + self.tool_calls = tool_calls or [] + + def model_dump(self, exclude_none: bool = True) -> dict: + d: dict = {"role": "assistant"} + if self.content is not None: + d["content"] = self.content + if self.tool_calls: + d["tool_calls"] = [ + {"id": tc.id, "type": "function", + "function": {"name": tc.function.name, "arguments": tc.function.arguments}} + for tc in self.tool_calls + ] + return d + + +class FakeChoice: + def __init__(self, message: FakeMessage): + self.message = message + + +class FakeResponse: + def __init__(self, message: FakeMessage): + self.choices = [FakeChoice(message)] + + +def _patch_create(monkeypatch, *responses: FakeResponse) -> AsyncMock: + create = AsyncMock(side_effect=list(responses)) + monkeypatch.setattr(chat_agent.chat.chat.completions, "create", create) + return create + + +# --------------------------------------------------------------------------- +# chat_once +# --------------------------------------------------------------------------- + +def test_chat_once_returns_immediately_with_no_tool_calls(monkeypatch): + _patch_create(monkeypatch, FakeResponse(FakeMessage(content="Hello there."))) + + async def call_tool(name, args): + raise AssertionError("call_tool should not be invoked when the model doesn't call a tool") + + messages = [{"role": "system", "content": "sys"}] + result = asyncio.run(chat_agent.chat_once(messages, tools=[], call_tool=call_tool)) + assert result == "Hello there." + + +def test_chat_once_calls_tool_then_answers(monkeypatch): + tool_msg = FakeMessage(tool_calls=[FakeToolCall("tc1", "get_statements", '{"entity_id": "RCADS-25-CG-EN"}')]) + final_msg = FakeMessage(content="It measures depression. [RCADS-25-CG-EN]") + _patch_create(monkeypatch, FakeResponse(tool_msg), FakeResponse(final_msg)) + + seen = [] + + async def call_tool(name, args): + seen.append((name, args)) + return json.dumps({"ok": True}) + + messages = [{"role": "system", "content": "sys"}] + result = asyncio.run(chat_agent.chat_once(messages, tools=[], call_tool=call_tool)) + assert result == "It measures depression. [RCADS-25-CG-EN]" + assert seen == [("get_statements", {"entity_id": "RCADS-25-CG-EN"})] + assert any(m.get("role") == "tool" for m in messages) + + +def test_chat_once_malformed_tool_arguments_default_to_empty_dict(monkeypatch): + tool_msg = FakeMessage(tool_calls=[FakeToolCall("tc1", "search", "{not valid json")]) + final_msg = FakeMessage(content="done") + _patch_create(monkeypatch, FakeResponse(tool_msg), FakeResponse(final_msg)) + + seen_args = {} + + async def call_tool(name, args): + seen_args.update(args) + return "{}" + + asyncio.run(chat_agent.chat_once([{"role": "system", "content": "s"}], [], call_tool)) + assert seen_args == {} + + +def test_chat_once_continues_gracefully_after_a_tool_error(monkeypatch): + """The nonexistent-id shape: call_tool returns a JSON error string (as + make_mcp_call_tool / make_rest_call_tool both do -- they never raise) and + the model gets a normal turn to react to it.""" + tool_msg = FakeMessage(tool_calls=[FakeToolCall("tc1", "get_statements", '{"entity_id":"NO-SUCH-ID"}')]) + final_msg = FakeMessage(content="I couldn't find an instrument with that id.") + _patch_create(monkeypatch, FakeResponse(tool_msg), FakeResponse(final_msg)) + + async def call_tool(name, args): + return json.dumps({"error": "ValueError: No entity found for id 'NO-SUCH-ID'"}) + + result = asyncio.run(chat_agent.chat_once([{"role": "system", "content": "s"}], [], call_tool)) + assert result == "I couldn't find an instrument with that id." + + +def test_chat_once_stops_after_six_rounds_for_a_looping_model(monkeypatch): + looping_msg = FakeMessage(tool_calls=[FakeToolCall("tc", "search", '{"query":"x"}')]) + create = AsyncMock(return_value=FakeResponse(looping_msg)) # never produces a final answer + monkeypatch.setattr(chat_agent.chat.chat.completions, "create", create) + + calls = {"n": 0} + + async def call_tool(name, args): + calls["n"] += 1 + return "{}" + + result = asyncio.run(chat_agent.chat_once([{"role": "system", "content": "s"}], [], call_tool)) + assert result == "(stopped after too many tool-call rounds)" + assert create.call_count == 6 + assert calls["n"] == 6 + + +# --------------------------------------------------------------------------- +# repl -- error handling around chat_once and the input loop. +# --------------------------------------------------------------------------- + +async def _fake_to_thread(func, *args, **kwargs): + """Runs func synchronously in-place -- avoids real thread scheduling so + input() can be scripted deterministically.""" + return func(*args, **kwargs) + + +def test_repl_processes_a_turn_then_exits(monkeypatch, capsys): + monkeypatch.setattr(chat_agent.asyncio, "to_thread", _fake_to_thread) + inputs = iter(["hello", "exit"]) + monkeypatch.setattr("builtins.input", lambda prompt="": next(inputs)) + + async def fake_chat_once(messages, tools, call_tool): + return "hi there" + + monkeypatch.setattr(chat_agent, "chat_once", fake_chat_once) + asyncio.run(chat_agent.repl(tools=[], call_tool=None)) + assert "hi there" in capsys.readouterr().out + + +def test_repl_survives_a_chat_error_without_crashing(monkeypatch, capsys): + monkeypatch.setattr(chat_agent.asyncio, "to_thread", _fake_to_thread) + inputs = iter(["hello", "exit"]) + monkeypatch.setattr("builtins.input", lambda prompt="": next(inputs)) + + async def raising_chat_once(messages, tools, call_tool): + raise ConnectionError("chat server down") + + monkeypatch.setattr(chat_agent, "chat_once", raising_chat_once) + asyncio.run(chat_agent.repl(tools=[], call_tool=None)) # must not raise + out = capsys.readouterr().out + assert "chat error" in out + + +def test_repl_breaks_cleanly_on_eof(monkeypatch): + monkeypatch.setattr(chat_agent.asyncio, "to_thread", _fake_to_thread) + + def raise_eof(prompt=""): + raise EOFError() + + monkeypatch.setattr("builtins.input", raise_eof) + asyncio.run(chat_agent.repl(tools=[], call_tool=None)) # must return, not raise + + +def test_repl_skips_blank_input_without_calling_chat_once(monkeypatch, capsys): + monkeypatch.setattr(chat_agent.asyncio, "to_thread", _fake_to_thread) + inputs = iter(["", " ", "exit"]) + monkeypatch.setattr("builtins.input", lambda prompt="": next(inputs)) + + async def fake_chat_once(messages, tools, call_tool): + raise AssertionError("chat_once should not run for blank input") + + monkeypatch.setattr(chat_agent, "chat_once", fake_chat_once) + asyncio.run(chat_agent.repl(tools=[], call_tool=None)) + + +# --------------------------------------------------------------------------- +# make_mcp_call_tool -- fake MCP client (no real subprocess). +# --------------------------------------------------------------------------- + +class FakeToolResult: + def __init__(self, data): + self.data = data + + +class FakeMcpClient: + def __init__(self, response=None, exception=None): + self.response = response + self.exception = exception + self.calls = [] + + async def call_tool(self, name, args): + self.calls.append((name, args)) + if self.exception is not None: + raise self.exception + return FakeToolResult(self.response) + + +def test_make_mcp_call_tool_returns_json_of_tool_data(): + client = FakeMcpClient(response=[{"property": "label", "value": "GAD-7", "value_id": None}]) + call_tool = chat_agent.make_mcp_call_tool(client) + result = asyncio.run(call_tool("get_statements", {"entity_id": "GAD-7"})) + assert json.loads(result) == [{"property": "label", "value": "GAD-7", "value_id": None}] + assert client.calls == [("get_statements", {"entity_id": "GAD-7"})] + + +def test_make_mcp_call_tool_nonexistent_id_becomes_error_json_not_a_raise(): + client = FakeMcpClient(exception=ValueError("No entity found for id 'NOPE'")) + call_tool = chat_agent.make_mcp_call_tool(client) + result = asyncio.run(call_tool("get_statements", {"entity_id": "NOPE"})) + parsed = json.loads(result) + assert "error" in parsed and "NOPE" in parsed["error"] + + +@pytest.mark.slow +def test_make_mcp_call_tool_real_server_nonexistent_id(monkeypatch): + """End-to-end proof: a genuine mcp_server.py subprocess (numpy backend, + offline-safe -- no VPN needed), driven through the exact call_tool + closure run_mcp() uses, turns a real nonexistent-id ValueError from the + server into a JSON error string instead of raising through the agent. + Spawns a real subprocess (full corpus + graph load) -- see TESTING.md + "Fast vs. full test runs" to skip this in a quick dev loop.""" + monkeypatch.setenv("VECTOR_BACKEND", "numpy") + + async def _drive(): + from fastmcp import Client + from fastmcp.client.transports import StdioTransport + + client = Client(StdioTransport(command=sys.executable, args=[_MCP_SERVER_PATH])) + async with client: + call_tool = chat_agent.make_mcp_call_tool(client) + return await call_tool("get_statements", {"entity_id": "TOTALLY-NOT-A-REAL-POEM-ID"}) + + result = asyncio.run(_drive()) + parsed = json.loads(result) + assert "error" in parsed + assert "TOTALLY-NOT-A-REAL-POEM-ID" in parsed["error"] + + +# --------------------------------------------------------------------------- +# make_rest_call_tool -- fake HTTP via httpx.MockTransport (no live +# api_server.py needed). +# --------------------------------------------------------------------------- + +def _rest_call_tool_against(handler): + import httpx + + http = httpx.AsyncClient(base_url="http://testserver", transport=httpx.MockTransport(handler)) + return chat_agent.make_rest_call_tool(http), http + + +def test_make_rest_call_tool_search_success(): + import httpx + + def handler(request: httpx.Request) -> httpx.Response: + assert request.url.path == "/search" + return httpx.Response(200, json=[{"id": "GAD-7", "label": "GAD-7"}]) + + call_tool, http = _rest_call_tool_against(handler) + + async def _run(): + async with http: + return await call_tool("search", {"query": "anxiety", "top_k": 3}) + + result = asyncio.run(_run()) + assert json.loads(result) == [{"id": "GAD-7", "label": "GAD-7"}] + + +def test_make_rest_call_tool_nonexistent_id_404_becomes_error_json(): + import httpx + + def handler(request: httpx.Request) -> httpx.Response: + assert request.url.path == "/statements/NO-SUCH-ID" + return httpx.Response(404, text="No entity found for id 'NO-SUCH-ID'") + + call_tool, http = _rest_call_tool_against(handler) + + async def _run(): + async with http: + return await call_tool("get_statements", {"entity_id": "NO-SUCH-ID"}) + + result = asyncio.run(_run()) + parsed = json.loads(result) + assert "error" in parsed + assert "404" in parsed["error"] + + +def test_make_rest_call_tool_unknown_tool_name(): + def handler(request): + raise AssertionError("no HTTP call should be made for an unknown tool") + + call_tool, http = _rest_call_tool_against(handler) + + async def _run(): + async with http: + return await call_tool("not_a_real_tool", {}) + + result = asyncio.run(_run()) + assert json.loads(result) == {"error": "unknown tool not_a_real_tool"} + + +def test_make_rest_call_tool_connection_failure_becomes_error_json(): + import httpx + + def handler(request): + raise httpx.ConnectError("connection refused") + + call_tool, http = _rest_call_tool_against(handler) + + async def _run(): + async with http: + return await call_tool("get_statements", {"entity_id": "RCADS-25-CG-EN"}) + + result = asyncio.run(_run()) + parsed = json.loads(result) + assert "error" in parsed + assert "ConnectError" in parsed["error"] + + +# --------------------------------------------------------------------------- +# main() -- POEM_TOOLS dispatch. +# --------------------------------------------------------------------------- + +def test_main_dispatches_to_mcp_by_default(monkeypatch): + monkeypatch.setattr(chat_agent, "ensure_lmstudio_ready", lambda *a, **kw: True) + monkeypatch.setattr(chat_agent, "POEM_TOOLS", "mcp") + calls = {"mcp": 0, "rest": 0} + + async def fake_run_mcp(): + calls["mcp"] += 1 + + async def fake_run_rest(): + calls["rest"] += 1 + + monkeypatch.setattr(chat_agent, "run_mcp", fake_run_mcp) + monkeypatch.setattr(chat_agent, "run_rest", fake_run_rest) + chat_agent.main() + assert calls == {"mcp": 1, "rest": 0} + + +def test_main_dispatches_to_rest_when_configured(monkeypatch): + monkeypatch.setattr(chat_agent, "ensure_lmstudio_ready", lambda *a, **kw: True) + monkeypatch.setattr(chat_agent, "POEM_TOOLS", "rest") + calls = {"mcp": 0, "rest": 0} + + async def fake_run_mcp(): + calls["mcp"] += 1 + + async def fake_run_rest(): + calls["rest"] += 1 + + monkeypatch.setattr(chat_agent, "run_mcp", fake_run_mcp) + monkeypatch.setattr(chat_agent, "run_rest", fake_run_rest) + chat_agent.main() + assert calls == {"mcp": 0, "rest": 1} + + +def test_main_calls_lmstudio_preflight_with_configured_model(monkeypatch): + seen = {} + + def fake_ensure(base_url, model, *a, **kw): + seen["base_url"] = base_url + seen["model"] = model + return True + + monkeypatch.setattr(chat_agent, "ensure_lmstudio_ready", fake_ensure) + monkeypatch.setattr(chat_agent, "POEM_TOOLS", "mcp") + + async def fake_run_mcp(): + pass + + monkeypatch.setattr(chat_agent, "run_mcp", fake_run_mcp) + chat_agent.main() + assert seen == {"base_url": chat_agent.CHAT_BASE_URL, "model": chat_agent.CHAT_MODEL} + + +if __name__ == "__main__": + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/agent/test_lmstudio_preflight.py b/embeddings/agent/test_lmstudio_preflight.py new file mode 100644 index 00000000..a03b6b68 --- /dev/null +++ b/embeddings/agent/test_lmstudio_preflight.py @@ -0,0 +1,364 @@ +#!/usr/bin/env python3 +"""Intensive tests for agent/lmstudio_preflight.py -- the chat agent's +self-heal logic for "the chat server (LM Studio) isn't running", mirroring +poem_core/test_docker_preflight.py's coverage of the analogous Milvus/Docker +case. + +Fully OFFLINE and fast: every subprocess/network call is mocked, so this +never actually launches LM Studio, runs the `lms` CLI, or hits a real HTTP +endpoint. + +Run with the MCP venv interpreter: + embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + embeddings\\agent\\test_lmstudio_preflight.py -v +""" +from __future__ import annotations + +import json +import os +import subprocess +import sys + +import pytest + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +import lmstudio_preflight as lsp # noqa: E402 + + +def cp(returncode: int = 0, stdout: str = "", stderr: str = "") -> subprocess.CompletedProcess: + return subprocess.CompletedProcess(args=[], returncode=returncode, stdout=stdout, stderr=stderr) + + +class Scripted: + """Replays one result per call, in order. See poem_core/test_docker_preflight.py.""" + + def __init__(self, *script): + self.script = list(script) + self.calls: list[tuple] = [] + + def __call__(self, *args, **kwargs): + self.calls.append((args, kwargs)) + if not self.script: + raise AssertionError(f"Scripted exhausted after {len(self.calls)} calls") + item = self.script.pop(0) + if isinstance(item, BaseException): + raise item + return item + + @property + def call_count(self) -> int: + return len(self.calls) + + +@pytest.fixture(autouse=True) +def _no_real_sleep(monkeypatch): + monkeypatch.setattr(lsp.time, "sleep", lambda s: None) + + +class _FakeHttpResponse: + def __init__(self, payload: dict): + self._body = json.dumps(payload).encode() + + def __enter__(self): + return self + + def __exit__(self, *exc): + return False + + def read(self): + return self._body + + +# --------------------------------------------------------------------------- +# is_local_url +# --------------------------------------------------------------------------- + +@pytest.mark.parametrize("url,expected", [ + ("http://localhost:1234/v1", True), + ("http://127.0.0.1:1234/v1", True), + ("http://[::1]:1234/v1", True), + ("http://localhost:11434/v1", True), # Ollama's default port, still local + ("http://my-lm-studio-box.local:1234/v1", False), + ("https://api.openai.com/v1", False), + ("", False), +]) +def test_is_local_url(url, expected): + assert lsp.is_local_url(url) is expected + + +# --------------------------------------------------------------------------- +# list_models / server_alive +# --------------------------------------------------------------------------- + +def test_list_models_parses_ids(monkeypatch): + monkeypatch.setattr( + lsp.urllib.request, "urlopen", + Scripted(_FakeHttpResponse({"data": [{"id": "qwen2.5-7b-instruct"}, {"id": "gemma-4"}]})), + ) + assert lsp.list_models("http://localhost:1234/v1") == ["qwen2.5-7b-instruct", "gemma-4"] + + +def test_list_models_none_when_unreachable(monkeypatch): + monkeypatch.setattr( + lsp.urllib.request, "urlopen", + lambda url, timeout=5: (_ for _ in ()).throw(lsp.urllib.error.URLError("refused")), + ) + assert lsp.list_models("http://localhost:1234/v1") is None + + +def test_list_models_none_on_malformed_json(monkeypatch): + class BadJson: + def __enter__(self): + return self + + def __exit__(self, *exc): + return False + + def read(self): + return b"not json" + + monkeypatch.setattr(lsp.urllib.request, "urlopen", Scripted(BadJson())) + assert lsp.list_models("http://localhost:1234/v1") is None + + +def test_server_alive_true_and_false(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["m"]) + assert lsp.server_alive("http://localhost:1234/v1") is True + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: None) + assert lsp.server_alive("http://localhost:1234/v1") is False + + +# --------------------------------------------------------------------------- +# _lms_path +# --------------------------------------------------------------------------- + +def test_lms_path_prefers_path_lookup(monkeypatch): + monkeypatch.setattr(lsp.shutil, "which", lambda name: r"C:\tools\lms.exe") + monkeypatch.delenv("LMS_CLI_EXE", raising=False) + assert lsp._lms_path() == r"C:\tools\lms.exe" + + +def test_lms_path_falls_back_to_env_override(monkeypatch): + monkeypatch.setattr(lsp.shutil, "which", lambda name: None) + monkeypatch.setenv("LMS_CLI_EXE", r"D:\custom\lms.exe") + assert lsp._lms_path() == r"D:\custom\lms.exe" + + +def test_lms_path_none_when_not_found(monkeypatch): + monkeypatch.setattr(lsp.shutil, "which", lambda name: None) + monkeypatch.delenv("LMS_CLI_EXE", raising=False) + assert lsp._lms_path() is None + + +# --------------------------------------------------------------------------- +# start_lm_studio_app -- every platform branch, including the "Linux has no +# handler" gap (unlike docker_preflight, which does support Linux). +# --------------------------------------------------------------------------- + +def test_start_lm_studio_windows_env_override(monkeypatch, tmp_path): + fake_exe = tmp_path / "LM Studio.exe" + fake_exe.write_text("not real") + monkeypatch.setattr(lsp.platform, "system", lambda: "Windows") + monkeypatch.setenv("LM_STUDIO_EXE", str(fake_exe)) + popen = Scripted(None) + monkeypatch.setattr(lsp.subprocess, "Popen", popen) + assert lsp.start_lm_studio_app(log=lambda *_: None) is True + assert popen.calls[0][0] == ([str(fake_exe)],) + + +def test_start_lm_studio_windows_not_found(monkeypatch): + monkeypatch.setattr(lsp.platform, "system", lambda: "Windows") + monkeypatch.delenv("LM_STUDIO_EXE", raising=False) + monkeypatch.setattr(lsp.os.path, "isfile", lambda p: False) + popen = Scripted() + monkeypatch.setattr(lsp.subprocess, "Popen", popen) + assert lsp.start_lm_studio_app(log=lambda *_: None) is False + assert popen.call_count == 0 + + +def test_start_lm_studio_macos(monkeypatch): + monkeypatch.setattr(lsp.platform, "system", lambda: "Darwin") + popen = Scripted(None) + monkeypatch.setattr(lsp.subprocess, "Popen", popen) + assert lsp.start_lm_studio_app(log=lambda *_: None) is True + assert popen.calls[0][0] == (["open", "-a", "LM Studio"],) + + +def test_start_lm_studio_linux_is_unsupported(monkeypatch): + """LM Studio has no Linux service-manager equivalent to `systemctl start + docker` -- Linux falls through to the same "unrecognized platform" path + as a genuinely unknown OS. Documenting this real gap with a test.""" + monkeypatch.setattr(lsp.platform, "system", lambda: "Linux") + popen = Scripted() + monkeypatch.setattr(lsp.subprocess, "Popen", popen) + assert lsp.start_lm_studio_app(log=lambda *_: None) is False + assert popen.call_count == 0 + + +# --------------------------------------------------------------------------- +# ensure_server_running +# --------------------------------------------------------------------------- + +BASE_URL = "http://localhost:1234/v1" + + +def test_ensure_server_running_already_alive(monkeypatch): + monkeypatch.setattr(lsp, "server_alive", lambda base_url, timeout=5: True) + lms_path = Scripted() + monkeypatch.setattr(lsp, "_lms_path", lms_path) + assert lsp.ensure_server_running(BASE_URL, log=lambda *_: None) is True + assert lms_path.call_count == 0 + + +def test_ensure_server_running_no_lms_cli(monkeypatch): + monkeypatch.setattr(lsp, "server_alive", lambda base_url, timeout=5: False) + monkeypatch.setattr(lsp, "_lms_path", lambda: None) + assert lsp.ensure_server_running(BASE_URL, log=lambda *_: None) is False + + +def test_ensure_server_running_cheap_start_succeeds(monkeypatch): + """The app is already open, just with the server off -- `lms server + start` alone should be enough, no app launch needed.""" + alive_calls = {"n": 0} + + def fake_alive(base_url, timeout=5): + alive_calls["n"] += 1 + return alive_calls["n"] >= 2 # false the first time, true after `lms server start` + + monkeypatch.setattr(lsp, "server_alive", fake_alive) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_try_server_start", lambda lms, timeout: True) + start_app = Scripted() + monkeypatch.setattr(lsp, "start_lm_studio_app", start_app) + assert lsp.ensure_server_running(BASE_URL, log=lambda *_: None) is True + assert start_app.call_count == 0 + + +def test_ensure_server_running_app_launch_fails(monkeypatch): + monkeypatch.setattr(lsp, "server_alive", lambda base_url, timeout=5: False) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_try_server_start", lambda lms, timeout: False) + monkeypatch.setattr(lsp, "start_lm_studio_app", lambda log=print: False) + assert lsp.ensure_server_running(BASE_URL, log=lambda *_: None) is False + + +def test_ensure_server_running_comes_up_after_app_launch_and_retries(monkeypatch): + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "start_lm_studio_app", lambda log=print: True) + + state = {"tries": 0} + + def fake_try_start(lms, timeout): + state["tries"] += 1 + return state["tries"] >= 3 # first cheap attempt + 2 retries after launch + + monkeypatch.setattr(lsp, "_try_server_start", fake_try_start) + monkeypatch.setattr(lsp, "server_alive", lambda base_url, timeout=5: state["tries"] >= 3) + assert lsp.ensure_server_running(BASE_URL, timeout=100, log=lambda *_: None) is True + assert state["tries"] == 3 + + +def test_ensure_server_running_never_comes_up(monkeypatch): + monkeypatch.setattr(lsp, "server_alive", lambda base_url, timeout=5: False) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_try_server_start", lambda lms, timeout: False) + monkeypatch.setattr(lsp, "start_lm_studio_app", lambda log=print: True) + assert lsp.ensure_server_running(BASE_URL, timeout=0.05, log=lambda *_: None) is False + + +# --------------------------------------------------------------------------- +# ensure_model_loaded +# --------------------------------------------------------------------------- + +def test_ensure_model_loaded_server_unreachable(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: None) + assert lsp.ensure_model_loaded(BASE_URL, "qwen2.5-7b-instruct", log=lambda *_: None) is False + + +def test_ensure_model_loaded_already_loaded(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["qwen2.5-7b-instruct"]) + # NOTE: the real ensure_model_loaded calls _lms_path() unconditionally up + # front (before checking whether the model is already loaded), so it's + # still invoked once here even though its result goes unused on this path. + lms_path = Scripted("lms") + monkeypatch.setattr(lsp, "_lms_path", lms_path) + run = Scripted() + monkeypatch.setattr(lsp, "_run", run) + assert lsp.ensure_model_loaded(BASE_URL, "qwen2.5-7b-instruct", log=lambda *_: None) is True + assert lms_path.call_count == 1 + assert run.call_count == 0 # but `lms load` itself must not run + + +def test_ensure_model_loaded_no_lms_cli(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["some-other-model"]) + monkeypatch.setattr(lsp, "_lms_path", lambda: None) + assert lsp.ensure_model_loaded(BASE_URL, "qwen2.5-7b-instruct", log=lambda *_: None) is False + + +def test_ensure_model_loaded_lms_load_succeeds(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["some-other-model"]) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_run", Scripted(cp(returncode=0))) + assert lsp.ensure_model_loaded(BASE_URL, "qwen2.5-7b-instruct", log=lambda *_: None) is True + + +def test_ensure_model_loaded_lms_load_fails(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["some-other-model"]) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_run", Scripted(cp(returncode=1, stderr="model not found"))) + assert lsp.ensure_model_loaded(BASE_URL, "nonexistent-model", log=lambda *_: None) is False + + +def test_ensure_model_loaded_lms_load_times_out(monkeypatch): + monkeypatch.setattr(lsp, "list_models", lambda base_url, timeout=5: ["some-other-model"]) + monkeypatch.setattr(lsp, "_lms_path", lambda: "lms") + monkeypatch.setattr(lsp, "_run", Scripted(subprocess.TimeoutExpired(cmd="lms load x", timeout=150))) + assert lsp.ensure_model_loaded(BASE_URL, "slow-model", log=lambda *_: None) is False + + +# --------------------------------------------------------------------------- +# ensure_lmstudio_ready -- the top-level orchestration. +# --------------------------------------------------------------------------- + +def test_ensure_lmstudio_ready_skip_env(monkeypatch): + monkeypatch.setenv("CHAT_SKIP_ENSURE", "1") + ensure_running = Scripted() + monkeypatch.setattr(lsp, "ensure_server_running", ensure_running) + assert lsp.ensure_lmstudio_ready(BASE_URL, "some-model", quiet=True) is True + assert ensure_running.call_count == 0 + + +def test_ensure_lmstudio_ready_skips_for_remote_url(monkeypatch): + monkeypatch.delenv("CHAT_SKIP_ENSURE", raising=False) + ensure_running = Scripted() + monkeypatch.setattr(lsp, "ensure_server_running", ensure_running) + assert lsp.ensure_lmstudio_ready("https://api.some-cloud-llm.example/v1", "gpt-x", quiet=True) is True + assert ensure_running.call_count == 0 + + +def test_ensure_lmstudio_ready_happy_path(monkeypatch): + monkeypatch.delenv("CHAT_SKIP_ENSURE", raising=False) + monkeypatch.setattr(lsp, "ensure_server_running", lambda base_url, timeout=150, log=print: True) + monkeypatch.setattr(lsp, "ensure_model_loaded", lambda base_url, model, timeout=150, log=print: True) + assert lsp.ensure_lmstudio_ready(BASE_URL, "qwen2.5-7b-instruct", quiet=True) is True + + +def test_ensure_lmstudio_ready_server_never_comes_up(monkeypatch): + monkeypatch.delenv("CHAT_SKIP_ENSURE", raising=False) + monkeypatch.setattr(lsp, "ensure_server_running", lambda base_url, timeout=150, log=print: False) + ensure_model = Scripted() + monkeypatch.setattr(lsp, "ensure_model_loaded", ensure_model) + assert lsp.ensure_lmstudio_ready(BASE_URL, "qwen2.5-7b-instruct", quiet=True) is False + assert ensure_model.call_count == 0 + + +def test_ensure_lmstudio_ready_model_never_loads(monkeypatch): + monkeypatch.delenv("CHAT_SKIP_ENSURE", raising=False) + monkeypatch.setattr(lsp, "ensure_server_running", lambda base_url, timeout=150, log=print: True) + monkeypatch.setattr(lsp, "ensure_model_loaded", lambda base_url, model, timeout=150, log=print: False) + assert lsp.ensure_lmstudio_ready(BASE_URL, "does-not-exist", quiet=True) is False + + +if __name__ == "__main__": + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/check_doc_pointers.py b/embeddings/check_doc_pointers.py new file mode 100644 index 00000000..eeae0854 --- /dev/null +++ b/embeddings/check_doc_pointers.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +"""Check every markdown file under embeddings/ for a *working* manual quick-reference. + +Beyond the original substring check (does the text mention +"manuals/DOCS_SUMMARY.md" at all?), this also resolves whatever relative path +was actually written -- "./manuals/...", "../manuals/...", "../../manuals/...", +etc. -- against the file's own directory, and confirms it lands on the real +DOCS_SUMMARY.md. A doc two directories deep that copy-pasted a one-directory-deep +relative path (wrong depth) now fails instead of silently passing, since a +plain substring match can't tell "this text mentions the right filename" apart +from "this text's actual link resolves to the right file". +""" +import os +import re +from pathlib import Path +from typing import List, NamedTuple, Optional + +ROOT = Path(__file__).resolve().parent +TARGET = (ROOT / "manuals" / "DOCS_SUMMARY.md").resolve() + +# Matches a relative reference ending in manuals/DOCS_SUMMARY.md, capturing +# whatever leading ./ or ../ (repeated) prefix was used, e.g.: +# manuals/DOCS_SUMMARY.md +# ./manuals/DOCS_SUMMARY.md +# ../manuals/DOCS_SUMMARY.md +# ../../manuals/DOCS_SUMMARY.md +REFERENCE_RE = re.compile(r"(?:\.{1,2}/)*manuals/DOCS_SUMMARY\.md") + +# .venv-mcp is excluded via the dot-prefix check below (its own directory name +# starts with "."); no separate entry is needed for it. +EXCLUDE_DIRS = {"manuals", "venv", ".venv"} +EXCLUDE_FILES = {"README.md", "DOCS_SUMMARY.md", "FINAL_REPORT.md"} + + +class Problem(NamedTuple): + path: Path + reason: str + + +def is_excluded_path(rel: Path) -> bool: + for part in rel.parts: + if part.startswith("."): + return True + if part.lower().startswith("venv") or part.lower().endswith("venv"): + return True + if part in EXCLUDE_DIRS: + return True + return False + + +def find_reference_problem(doc_path: Path, text: str) -> Optional[str]: + """None if a reference is present AND resolves to the real manual; else a reason.""" + found_any = False + for m in REFERENCE_RE.finditer(text): + found_any = True + written = m.group(0) + resolved = (doc_path.parent / written).resolve() + if resolved == TARGET: + return None + # Wrong depth/location: text says the right filename but the path as + # written doesn't actually reach embeddings/manuals/DOCS_SUMMARY.md. + if found_any: + return "reference present but does not resolve to embeddings/manuals/DOCS_SUMMARY.md (wrong relative depth?)" + return "no reference to manuals/DOCS_SUMMARY.md found" + + +def find_problems(root: Path) -> List[Problem]: + problems = [] + for path in sorted(root.rglob("*.md")): + rel = path.relative_to(root) + if is_excluded_path(rel): + continue + if path.name in EXCLUDE_FILES: + continue + try: + text = path.read_text(encoding="utf-8") + except UnicodeDecodeError: + problems.append(Problem(rel, "not valid UTF-8")) + continue + reason = find_reference_problem(path, text) + if reason: + problems.append(Problem(rel, reason)) + return problems + + +def main() -> int: + problems = find_problems(ROOT) + if not problems: + print("OK: all embeddings markdown files have a working manual quick-reference.") + return 0 + + print("WARNING: the following markdown files have a problem with their " + "quick-reference to embeddings/manuals/DOCS_SUMMARY.md:") + for problem in problems: + print(f" - {problem.path}: {problem.reason}") + print() + print("Run this script after adding or moving markdown files under embeddings/.") + return 1 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/embeddings/collections/paragraph_0.npy b/embeddings/collections/paragraph_0.npy deleted file mode 100644 index 03406e72..00000000 Binary files a/embeddings/collections/paragraph_0.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_1.npy b/embeddings/collections/paragraph_1.npy deleted file mode 100644 index f834c290..00000000 Binary files a/embeddings/collections/paragraph_1.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_10.npy b/embeddings/collections/paragraph_10.npy deleted file mode 100644 index 2103a4c9..00000000 Binary files a/embeddings/collections/paragraph_10.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_100.npy b/embeddings/collections/paragraph_100.npy deleted file mode 100644 index 595b4662..00000000 Binary files a/embeddings/collections/paragraph_100.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_101.npy b/embeddings/collections/paragraph_101.npy deleted file mode 100644 index f4f0c50b..00000000 Binary files a/embeddings/collections/paragraph_101.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_102.npy b/embeddings/collections/paragraph_102.npy deleted file mode 100644 index 6a0f536b..00000000 Binary files a/embeddings/collections/paragraph_102.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_103.npy b/embeddings/collections/paragraph_103.npy deleted file mode 100644 index 5058aade..00000000 Binary files a/embeddings/collections/paragraph_103.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_104.npy b/embeddings/collections/paragraph_104.npy deleted file mode 100644 index fc356be6..00000000 Binary files a/embeddings/collections/paragraph_104.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_105.npy b/embeddings/collections/paragraph_105.npy deleted file mode 100644 index 67ba8cac..00000000 Binary files a/embeddings/collections/paragraph_105.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_106.npy b/embeddings/collections/paragraph_106.npy deleted file mode 100644 index 8296dd1e..00000000 Binary files a/embeddings/collections/paragraph_106.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_107.npy b/embeddings/collections/paragraph_107.npy deleted file mode 100644 index 43bf76f1..00000000 Binary files a/embeddings/collections/paragraph_107.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_108.npy b/embeddings/collections/paragraph_108.npy deleted file mode 100644 index e44e6fb4..00000000 Binary files a/embeddings/collections/paragraph_108.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_109.npy b/embeddings/collections/paragraph_109.npy deleted file mode 100644 index 8126213d..00000000 Binary files a/embeddings/collections/paragraph_109.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_11.npy b/embeddings/collections/paragraph_11.npy deleted file mode 100644 index 6b412538..00000000 Binary files a/embeddings/collections/paragraph_11.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_110.npy b/embeddings/collections/paragraph_110.npy deleted file mode 100644 index 5945929f..00000000 Binary files a/embeddings/collections/paragraph_110.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_111.npy b/embeddings/collections/paragraph_111.npy deleted file mode 100644 index 3c420d32..00000000 Binary files a/embeddings/collections/paragraph_111.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_112.npy b/embeddings/collections/paragraph_112.npy deleted file mode 100644 index 39d75fa8..00000000 Binary files a/embeddings/collections/paragraph_112.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_113.npy b/embeddings/collections/paragraph_113.npy deleted file mode 100644 index 9fc50e56..00000000 Binary files a/embeddings/collections/paragraph_113.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_114.npy b/embeddings/collections/paragraph_114.npy deleted file mode 100644 index 215a5ce2..00000000 Binary files a/embeddings/collections/paragraph_114.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_115.npy b/embeddings/collections/paragraph_115.npy deleted file mode 100644 index fba0cc7c..00000000 Binary files a/embeddings/collections/paragraph_115.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_116.npy b/embeddings/collections/paragraph_116.npy deleted file mode 100644 index 4522f5a2..00000000 Binary files a/embeddings/collections/paragraph_116.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_117.npy b/embeddings/collections/paragraph_117.npy deleted file mode 100644 index 9a700344..00000000 Binary files a/embeddings/collections/paragraph_117.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_118.npy b/embeddings/collections/paragraph_118.npy deleted file mode 100644 index e2dc75aa..00000000 Binary files a/embeddings/collections/paragraph_118.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_119.npy b/embeddings/collections/paragraph_119.npy deleted file mode 100644 index 0b2fbaf8..00000000 Binary files a/embeddings/collections/paragraph_119.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_12.npy b/embeddings/collections/paragraph_12.npy deleted file mode 100644 index d65337e2..00000000 Binary files a/embeddings/collections/paragraph_12.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_120.npy b/embeddings/collections/paragraph_120.npy deleted file mode 100644 index d03ea329..00000000 Binary files a/embeddings/collections/paragraph_120.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_121.npy b/embeddings/collections/paragraph_121.npy deleted file mode 100644 index f9e1b472..00000000 Binary files a/embeddings/collections/paragraph_121.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_122.npy b/embeddings/collections/paragraph_122.npy deleted file mode 100644 index 71f062aa..00000000 Binary files a/embeddings/collections/paragraph_122.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_123.npy b/embeddings/collections/paragraph_123.npy deleted file mode 100644 index 786dee08..00000000 Binary files a/embeddings/collections/paragraph_123.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_124.npy b/embeddings/collections/paragraph_124.npy deleted file mode 100644 index e48e21cd..00000000 Binary files a/embeddings/collections/paragraph_124.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_125.npy b/embeddings/collections/paragraph_125.npy deleted file mode 100644 index a126ae66..00000000 Binary files a/embeddings/collections/paragraph_125.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_126.npy b/embeddings/collections/paragraph_126.npy deleted file mode 100644 index f4a4092e..00000000 Binary files a/embeddings/collections/paragraph_126.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_127.npy b/embeddings/collections/paragraph_127.npy deleted file mode 100644 index 0067b131..00000000 Binary files a/embeddings/collections/paragraph_127.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_128.npy b/embeddings/collections/paragraph_128.npy deleted file mode 100644 index 7ad84185..00000000 Binary files a/embeddings/collections/paragraph_128.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_129.npy b/embeddings/collections/paragraph_129.npy deleted file mode 100644 index 2222eece..00000000 Binary files a/embeddings/collections/paragraph_129.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_13.npy b/embeddings/collections/paragraph_13.npy deleted file mode 100644 index 9c125f7e..00000000 Binary files a/embeddings/collections/paragraph_13.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_130.npy b/embeddings/collections/paragraph_130.npy deleted file mode 100644 index 1c439a5d..00000000 Binary files a/embeddings/collections/paragraph_130.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_131.npy b/embeddings/collections/paragraph_131.npy deleted file mode 100644 index 9c4e5788..00000000 Binary files a/embeddings/collections/paragraph_131.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_132.npy b/embeddings/collections/paragraph_132.npy deleted file mode 100644 index ae5161f1..00000000 Binary files a/embeddings/collections/paragraph_132.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_133.npy b/embeddings/collections/paragraph_133.npy deleted file mode 100644 index bd4eb91c..00000000 Binary files a/embeddings/collections/paragraph_133.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_134.npy b/embeddings/collections/paragraph_134.npy deleted file mode 100644 index 3df35df6..00000000 Binary files a/embeddings/collections/paragraph_134.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_135.npy b/embeddings/collections/paragraph_135.npy deleted file mode 100644 index cd38893f..00000000 Binary files a/embeddings/collections/paragraph_135.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_136.npy b/embeddings/collections/paragraph_136.npy deleted file mode 100644 index 62c86399..00000000 Binary files a/embeddings/collections/paragraph_136.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_137.npy b/embeddings/collections/paragraph_137.npy deleted file mode 100644 index a184f427..00000000 Binary files a/embeddings/collections/paragraph_137.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_138.npy b/embeddings/collections/paragraph_138.npy deleted file mode 100644 index b93c67c1..00000000 Binary files a/embeddings/collections/paragraph_138.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_139.npy b/embeddings/collections/paragraph_139.npy deleted file mode 100644 index 5dec1b19..00000000 Binary files a/embeddings/collections/paragraph_139.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_14.npy b/embeddings/collections/paragraph_14.npy deleted file mode 100644 index 3b2172b5..00000000 Binary files a/embeddings/collections/paragraph_14.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_140.npy b/embeddings/collections/paragraph_140.npy deleted file mode 100644 index 8bda435d..00000000 Binary files a/embeddings/collections/paragraph_140.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_141.npy b/embeddings/collections/paragraph_141.npy deleted file mode 100644 index 0e0dba9c..00000000 Binary files a/embeddings/collections/paragraph_141.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_142.npy b/embeddings/collections/paragraph_142.npy deleted file mode 100644 index 83526224..00000000 Binary files a/embeddings/collections/paragraph_142.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_143.npy b/embeddings/collections/paragraph_143.npy deleted file mode 100644 index 35642eeb..00000000 Binary files a/embeddings/collections/paragraph_143.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_144.npy b/embeddings/collections/paragraph_144.npy deleted file mode 100644 index d3a84253..00000000 Binary files a/embeddings/collections/paragraph_144.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_145.npy b/embeddings/collections/paragraph_145.npy deleted file mode 100644 index 43e873d3..00000000 Binary files a/embeddings/collections/paragraph_145.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_146.npy b/embeddings/collections/paragraph_146.npy deleted file mode 100644 index ef017e08..00000000 Binary files a/embeddings/collections/paragraph_146.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_147.npy b/embeddings/collections/paragraph_147.npy deleted file mode 100644 index 3bcda24a..00000000 Binary files a/embeddings/collections/paragraph_147.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_148.npy b/embeddings/collections/paragraph_148.npy deleted file mode 100644 index b378e68b..00000000 Binary files a/embeddings/collections/paragraph_148.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_149.npy b/embeddings/collections/paragraph_149.npy deleted file mode 100644 index 011d5367..00000000 Binary files a/embeddings/collections/paragraph_149.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_15.npy b/embeddings/collections/paragraph_15.npy deleted file mode 100644 index 2d172b54..00000000 Binary files a/embeddings/collections/paragraph_15.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_150.npy b/embeddings/collections/paragraph_150.npy deleted file mode 100644 index ee776197..00000000 Binary files a/embeddings/collections/paragraph_150.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_151.npy b/embeddings/collections/paragraph_151.npy deleted file mode 100644 index 485eaa45..00000000 Binary files a/embeddings/collections/paragraph_151.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_152.npy b/embeddings/collections/paragraph_152.npy deleted file mode 100644 index d3c0eaf9..00000000 Binary files a/embeddings/collections/paragraph_152.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_153.npy b/embeddings/collections/paragraph_153.npy deleted file mode 100644 index c1a94dcf..00000000 Binary files a/embeddings/collections/paragraph_153.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_154.npy b/embeddings/collections/paragraph_154.npy deleted file mode 100644 index 543b477d..00000000 Binary files a/embeddings/collections/paragraph_154.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_155.npy b/embeddings/collections/paragraph_155.npy deleted file mode 100644 index 6c1b977c..00000000 Binary files a/embeddings/collections/paragraph_155.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_156.npy b/embeddings/collections/paragraph_156.npy deleted file mode 100644 index f0e74887..00000000 Binary files a/embeddings/collections/paragraph_156.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_157.npy b/embeddings/collections/paragraph_157.npy deleted file mode 100644 index 0ead4a30..00000000 Binary files a/embeddings/collections/paragraph_157.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_158.npy b/embeddings/collections/paragraph_158.npy deleted file mode 100644 index 66b529e3..00000000 Binary files a/embeddings/collections/paragraph_158.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_159.npy b/embeddings/collections/paragraph_159.npy deleted file mode 100644 index 60e3b5ec..00000000 Binary files a/embeddings/collections/paragraph_159.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_16.npy b/embeddings/collections/paragraph_16.npy deleted file mode 100644 index 6b33e3d5..00000000 Binary files a/embeddings/collections/paragraph_16.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_160.npy b/embeddings/collections/paragraph_160.npy deleted file mode 100644 index 9d170556..00000000 Binary files a/embeddings/collections/paragraph_160.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_161.npy b/embeddings/collections/paragraph_161.npy deleted file mode 100644 index bfe77450..00000000 Binary files a/embeddings/collections/paragraph_161.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_162.npy b/embeddings/collections/paragraph_162.npy deleted file mode 100644 index c2bc2903..00000000 Binary files a/embeddings/collections/paragraph_162.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_163.npy b/embeddings/collections/paragraph_163.npy deleted file mode 100644 index 403b6f17..00000000 Binary files a/embeddings/collections/paragraph_163.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_164.npy b/embeddings/collections/paragraph_164.npy deleted file mode 100644 index 087631a1..00000000 Binary files a/embeddings/collections/paragraph_164.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_165.npy b/embeddings/collections/paragraph_165.npy deleted file mode 100644 index dc4d664f..00000000 Binary files a/embeddings/collections/paragraph_165.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_166.npy b/embeddings/collections/paragraph_166.npy deleted file mode 100644 index 414ecb32..00000000 Binary files a/embeddings/collections/paragraph_166.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_167.npy b/embeddings/collections/paragraph_167.npy deleted file mode 100644 index 87f99832..00000000 Binary files a/embeddings/collections/paragraph_167.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_168.npy b/embeddings/collections/paragraph_168.npy deleted file mode 100644 index d9a9d815..00000000 Binary files a/embeddings/collections/paragraph_168.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_169.npy b/embeddings/collections/paragraph_169.npy deleted file mode 100644 index c2a415ef..00000000 Binary files a/embeddings/collections/paragraph_169.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_17.npy b/embeddings/collections/paragraph_17.npy deleted file mode 100644 index 9aab0db0..00000000 Binary files a/embeddings/collections/paragraph_17.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_170.npy b/embeddings/collections/paragraph_170.npy deleted file mode 100644 index 9dead431..00000000 Binary files a/embeddings/collections/paragraph_170.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_171.npy b/embeddings/collections/paragraph_171.npy deleted file mode 100644 index 751db176..00000000 Binary files a/embeddings/collections/paragraph_171.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_172.npy b/embeddings/collections/paragraph_172.npy deleted file mode 100644 index 149c7534..00000000 Binary files a/embeddings/collections/paragraph_172.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_173.npy b/embeddings/collections/paragraph_173.npy deleted file mode 100644 index 8a842f4b..00000000 Binary files a/embeddings/collections/paragraph_173.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_174.npy b/embeddings/collections/paragraph_174.npy deleted file mode 100644 index 70fa103b..00000000 Binary files a/embeddings/collections/paragraph_174.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_175.npy b/embeddings/collections/paragraph_175.npy deleted file mode 100644 index d21c66af..00000000 Binary files a/embeddings/collections/paragraph_175.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_176.npy b/embeddings/collections/paragraph_176.npy deleted file mode 100644 index 48dd6607..00000000 Binary files a/embeddings/collections/paragraph_176.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_177.npy b/embeddings/collections/paragraph_177.npy deleted file mode 100644 index 63bfef69..00000000 Binary files a/embeddings/collections/paragraph_177.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_178.npy b/embeddings/collections/paragraph_178.npy deleted file mode 100644 index f6aeb138..00000000 Binary files a/embeddings/collections/paragraph_178.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_179.npy b/embeddings/collections/paragraph_179.npy deleted file mode 100644 index 8ac5cf6b..00000000 Binary files a/embeddings/collections/paragraph_179.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_18.npy b/embeddings/collections/paragraph_18.npy deleted file mode 100644 index f8fc94fe..00000000 Binary files a/embeddings/collections/paragraph_18.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_180.npy b/embeddings/collections/paragraph_180.npy deleted file mode 100644 index ce4a30d3..00000000 Binary files a/embeddings/collections/paragraph_180.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_181.npy b/embeddings/collections/paragraph_181.npy deleted file mode 100644 index 2c64297b..00000000 Binary files a/embeddings/collections/paragraph_181.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_182.npy b/embeddings/collections/paragraph_182.npy deleted file mode 100644 index dc90fa9e..00000000 Binary files a/embeddings/collections/paragraph_182.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_183.npy b/embeddings/collections/paragraph_183.npy deleted file mode 100644 index d9bdcecd..00000000 Binary files a/embeddings/collections/paragraph_183.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_184.npy b/embeddings/collections/paragraph_184.npy deleted file mode 100644 index 3189b88b..00000000 Binary files a/embeddings/collections/paragraph_184.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_185.npy b/embeddings/collections/paragraph_185.npy deleted file mode 100644 index 96e204e2..00000000 Binary files a/embeddings/collections/paragraph_185.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_186.npy b/embeddings/collections/paragraph_186.npy deleted file mode 100644 index e4d64602..00000000 Binary files a/embeddings/collections/paragraph_186.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_187.npy b/embeddings/collections/paragraph_187.npy deleted file mode 100644 index 2d16bf43..00000000 Binary files a/embeddings/collections/paragraph_187.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_188.npy b/embeddings/collections/paragraph_188.npy deleted file mode 100644 index fb5609f6..00000000 Binary files a/embeddings/collections/paragraph_188.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_189.npy b/embeddings/collections/paragraph_189.npy deleted file mode 100644 index 51c923ba..00000000 Binary files a/embeddings/collections/paragraph_189.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_19.npy b/embeddings/collections/paragraph_19.npy deleted file mode 100644 index 525eadc7..00000000 Binary files a/embeddings/collections/paragraph_19.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_190.npy b/embeddings/collections/paragraph_190.npy deleted file mode 100644 index e4b6e4a5..00000000 Binary files a/embeddings/collections/paragraph_190.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_191.npy b/embeddings/collections/paragraph_191.npy deleted file mode 100644 index 671c13d3..00000000 Binary files a/embeddings/collections/paragraph_191.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_192.npy b/embeddings/collections/paragraph_192.npy deleted file mode 100644 index 61d2a340..00000000 Binary files a/embeddings/collections/paragraph_192.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_193.npy b/embeddings/collections/paragraph_193.npy deleted file mode 100644 index 5be5c5d0..00000000 Binary files a/embeddings/collections/paragraph_193.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_194.npy b/embeddings/collections/paragraph_194.npy deleted file mode 100644 index c241661e..00000000 Binary files a/embeddings/collections/paragraph_194.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_195.npy b/embeddings/collections/paragraph_195.npy deleted file mode 100644 index effd6b64..00000000 Binary files a/embeddings/collections/paragraph_195.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_196.npy b/embeddings/collections/paragraph_196.npy deleted file mode 100644 index 8ba0c311..00000000 Binary files a/embeddings/collections/paragraph_196.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_197.npy b/embeddings/collections/paragraph_197.npy deleted file mode 100644 index 9faefb51..00000000 Binary files a/embeddings/collections/paragraph_197.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_198.npy b/embeddings/collections/paragraph_198.npy deleted file mode 100644 index 927c6bde..00000000 Binary files a/embeddings/collections/paragraph_198.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_199.npy b/embeddings/collections/paragraph_199.npy deleted file mode 100644 index 1fa9bf39..00000000 Binary files a/embeddings/collections/paragraph_199.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_2.npy b/embeddings/collections/paragraph_2.npy deleted file mode 100644 index 59947b54..00000000 Binary files a/embeddings/collections/paragraph_2.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_20.npy b/embeddings/collections/paragraph_20.npy deleted file mode 100644 index acb9b149..00000000 Binary files a/embeddings/collections/paragraph_20.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_200.npy b/embeddings/collections/paragraph_200.npy deleted file mode 100644 index c50d7d25..00000000 Binary files a/embeddings/collections/paragraph_200.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_201.npy b/embeddings/collections/paragraph_201.npy deleted file mode 100644 index 02d8c608..00000000 Binary files a/embeddings/collections/paragraph_201.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_202.npy b/embeddings/collections/paragraph_202.npy deleted file mode 100644 index 9d1f0e47..00000000 Binary files a/embeddings/collections/paragraph_202.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_203.npy b/embeddings/collections/paragraph_203.npy deleted file mode 100644 index 8ff963d5..00000000 Binary files a/embeddings/collections/paragraph_203.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_204.npy b/embeddings/collections/paragraph_204.npy deleted file mode 100644 index c0a7951f..00000000 Binary files a/embeddings/collections/paragraph_204.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_205.npy b/embeddings/collections/paragraph_205.npy deleted file mode 100644 index 78d975f3..00000000 Binary files a/embeddings/collections/paragraph_205.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_206.npy b/embeddings/collections/paragraph_206.npy deleted file mode 100644 index 566df746..00000000 Binary files a/embeddings/collections/paragraph_206.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_207.npy b/embeddings/collections/paragraph_207.npy deleted file mode 100644 index 83e6cf2f..00000000 Binary files a/embeddings/collections/paragraph_207.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_208.npy b/embeddings/collections/paragraph_208.npy deleted file mode 100644 index d2c31117..00000000 Binary files a/embeddings/collections/paragraph_208.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_209.npy b/embeddings/collections/paragraph_209.npy deleted file mode 100644 index ef3f832a..00000000 Binary files a/embeddings/collections/paragraph_209.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_21.npy b/embeddings/collections/paragraph_21.npy deleted file mode 100644 index af96f4fa..00000000 Binary files a/embeddings/collections/paragraph_21.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_210.npy b/embeddings/collections/paragraph_210.npy deleted file mode 100644 index 35710241..00000000 Binary files a/embeddings/collections/paragraph_210.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_211.npy b/embeddings/collections/paragraph_211.npy deleted file mode 100644 index 74bb89eb..00000000 Binary files a/embeddings/collections/paragraph_211.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_212.npy b/embeddings/collections/paragraph_212.npy deleted file mode 100644 index ecb0b8e8..00000000 Binary files a/embeddings/collections/paragraph_212.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_213.npy b/embeddings/collections/paragraph_213.npy deleted file mode 100644 index 010e7362..00000000 Binary files a/embeddings/collections/paragraph_213.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_214.npy b/embeddings/collections/paragraph_214.npy deleted file mode 100644 index 20691e96..00000000 Binary files a/embeddings/collections/paragraph_214.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_215.npy b/embeddings/collections/paragraph_215.npy deleted file mode 100644 index 9b4dad1d..00000000 Binary files a/embeddings/collections/paragraph_215.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_216.npy b/embeddings/collections/paragraph_216.npy deleted file mode 100644 index 70472aef..00000000 Binary files a/embeddings/collections/paragraph_216.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_217.npy b/embeddings/collections/paragraph_217.npy deleted file mode 100644 index 7d840109..00000000 Binary files a/embeddings/collections/paragraph_217.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_218.npy b/embeddings/collections/paragraph_218.npy deleted file mode 100644 index adfcbe12..00000000 Binary files a/embeddings/collections/paragraph_218.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_219.npy b/embeddings/collections/paragraph_219.npy deleted file mode 100644 index 0e32611c..00000000 Binary files a/embeddings/collections/paragraph_219.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_22.npy b/embeddings/collections/paragraph_22.npy deleted file mode 100644 index a15173eb..00000000 Binary files a/embeddings/collections/paragraph_22.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_220.npy b/embeddings/collections/paragraph_220.npy deleted file mode 100644 index 1fb49304..00000000 Binary files a/embeddings/collections/paragraph_220.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_221.npy b/embeddings/collections/paragraph_221.npy deleted file mode 100644 index 4af119ad..00000000 Binary files a/embeddings/collections/paragraph_221.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_222.npy b/embeddings/collections/paragraph_222.npy deleted file mode 100644 index b167cc80..00000000 Binary files a/embeddings/collections/paragraph_222.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_223.npy b/embeddings/collections/paragraph_223.npy deleted file mode 100644 index 8b0ffd60..00000000 Binary files a/embeddings/collections/paragraph_223.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_224.npy b/embeddings/collections/paragraph_224.npy deleted file mode 100644 index 985c6ceb..00000000 Binary files a/embeddings/collections/paragraph_224.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_225.npy b/embeddings/collections/paragraph_225.npy deleted file mode 100644 index 92ea946f..00000000 Binary files a/embeddings/collections/paragraph_225.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_226.npy b/embeddings/collections/paragraph_226.npy deleted file mode 100644 index 961841ce..00000000 Binary files a/embeddings/collections/paragraph_226.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_227.npy b/embeddings/collections/paragraph_227.npy deleted file mode 100644 index bfbf5123..00000000 Binary files a/embeddings/collections/paragraph_227.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_228.npy b/embeddings/collections/paragraph_228.npy deleted file mode 100644 index beefd761..00000000 Binary files a/embeddings/collections/paragraph_228.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_229.npy b/embeddings/collections/paragraph_229.npy deleted file mode 100644 index db586187..00000000 Binary files a/embeddings/collections/paragraph_229.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_23.npy b/embeddings/collections/paragraph_23.npy deleted file mode 100644 index c20073f2..00000000 Binary files a/embeddings/collections/paragraph_23.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_230.npy b/embeddings/collections/paragraph_230.npy deleted file mode 100644 index c4ade35b..00000000 Binary files a/embeddings/collections/paragraph_230.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_231.npy b/embeddings/collections/paragraph_231.npy deleted file mode 100644 index a5ec2a1a..00000000 Binary files a/embeddings/collections/paragraph_231.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_232.npy b/embeddings/collections/paragraph_232.npy deleted file mode 100644 index 738383d3..00000000 Binary files a/embeddings/collections/paragraph_232.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_233.npy b/embeddings/collections/paragraph_233.npy deleted file mode 100644 index dd7b76cf..00000000 Binary files a/embeddings/collections/paragraph_233.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_234.npy b/embeddings/collections/paragraph_234.npy deleted file mode 100644 index c904cd8f..00000000 Binary files a/embeddings/collections/paragraph_234.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_235.npy b/embeddings/collections/paragraph_235.npy deleted file mode 100644 index 4deed5bc..00000000 Binary files a/embeddings/collections/paragraph_235.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_236.npy b/embeddings/collections/paragraph_236.npy deleted file mode 100644 index 4a54d505..00000000 Binary files a/embeddings/collections/paragraph_236.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_237.npy b/embeddings/collections/paragraph_237.npy deleted file mode 100644 index 8f560fbd..00000000 Binary files a/embeddings/collections/paragraph_237.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_238.npy b/embeddings/collections/paragraph_238.npy deleted file mode 100644 index 903d90ab..00000000 Binary files a/embeddings/collections/paragraph_238.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_239.npy b/embeddings/collections/paragraph_239.npy deleted file mode 100644 index ebdda4de..00000000 Binary files a/embeddings/collections/paragraph_239.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_24.npy b/embeddings/collections/paragraph_24.npy deleted file mode 100644 index 976624dc..00000000 Binary files a/embeddings/collections/paragraph_24.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_240.npy b/embeddings/collections/paragraph_240.npy deleted file mode 100644 index 7c3dd213..00000000 Binary files a/embeddings/collections/paragraph_240.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_241.npy b/embeddings/collections/paragraph_241.npy deleted file mode 100644 index ff6b1c3b..00000000 Binary files a/embeddings/collections/paragraph_241.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_242.npy b/embeddings/collections/paragraph_242.npy deleted file mode 100644 index 6c0bc0e7..00000000 Binary files a/embeddings/collections/paragraph_242.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_243.npy b/embeddings/collections/paragraph_243.npy deleted file mode 100644 index f0617bac..00000000 Binary files a/embeddings/collections/paragraph_243.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_244.npy b/embeddings/collections/paragraph_244.npy deleted file mode 100644 index ca22291d..00000000 Binary files a/embeddings/collections/paragraph_244.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_245.npy b/embeddings/collections/paragraph_245.npy deleted file mode 100644 index 7dbbc17d..00000000 Binary files a/embeddings/collections/paragraph_245.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_246.npy b/embeddings/collections/paragraph_246.npy deleted file mode 100644 index 035a9c2e..00000000 Binary files a/embeddings/collections/paragraph_246.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_247.npy b/embeddings/collections/paragraph_247.npy deleted file mode 100644 index bad52ef5..00000000 Binary files a/embeddings/collections/paragraph_247.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_248.npy b/embeddings/collections/paragraph_248.npy deleted file mode 100644 index 425dc0a2..00000000 Binary files a/embeddings/collections/paragraph_248.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_249.npy b/embeddings/collections/paragraph_249.npy deleted file mode 100644 index 4441382b..00000000 Binary files a/embeddings/collections/paragraph_249.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_25.npy b/embeddings/collections/paragraph_25.npy deleted file mode 100644 index 7838e5f1..00000000 Binary files a/embeddings/collections/paragraph_25.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_250.npy b/embeddings/collections/paragraph_250.npy deleted file mode 100644 index 50957531..00000000 Binary files a/embeddings/collections/paragraph_250.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_251.npy b/embeddings/collections/paragraph_251.npy deleted file mode 100644 index bb838909..00000000 Binary files a/embeddings/collections/paragraph_251.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_252.npy b/embeddings/collections/paragraph_252.npy deleted file mode 100644 index b5582f8a..00000000 Binary files a/embeddings/collections/paragraph_252.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_253.npy b/embeddings/collections/paragraph_253.npy deleted file mode 100644 index 19da8a80..00000000 Binary files a/embeddings/collections/paragraph_253.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_254.npy b/embeddings/collections/paragraph_254.npy deleted file mode 100644 index ec997cd8..00000000 Binary files a/embeddings/collections/paragraph_254.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_255.npy b/embeddings/collections/paragraph_255.npy deleted file mode 100644 index fd319aab..00000000 Binary files a/embeddings/collections/paragraph_255.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_256.npy b/embeddings/collections/paragraph_256.npy deleted file mode 100644 index c5e45a54..00000000 Binary files a/embeddings/collections/paragraph_256.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_257.npy b/embeddings/collections/paragraph_257.npy deleted file mode 100644 index e5c8ed59..00000000 Binary files a/embeddings/collections/paragraph_257.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_258.npy b/embeddings/collections/paragraph_258.npy deleted file mode 100644 index bf1fe0a2..00000000 Binary files a/embeddings/collections/paragraph_258.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_259.npy b/embeddings/collections/paragraph_259.npy deleted file mode 100644 index dd6e91d8..00000000 Binary files a/embeddings/collections/paragraph_259.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_26.npy b/embeddings/collections/paragraph_26.npy deleted file mode 100644 index cc29ea28..00000000 Binary files a/embeddings/collections/paragraph_26.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_260.npy b/embeddings/collections/paragraph_260.npy deleted file mode 100644 index 0d88829f..00000000 Binary files a/embeddings/collections/paragraph_260.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_261.npy b/embeddings/collections/paragraph_261.npy deleted file mode 100644 index 7659bfb5..00000000 Binary files a/embeddings/collections/paragraph_261.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_262.npy b/embeddings/collections/paragraph_262.npy deleted file mode 100644 index 223443ae..00000000 Binary files a/embeddings/collections/paragraph_262.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_263.npy b/embeddings/collections/paragraph_263.npy deleted file mode 100644 index 99403283..00000000 Binary files a/embeddings/collections/paragraph_263.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_264.npy b/embeddings/collections/paragraph_264.npy deleted file mode 100644 index cea9ca0f..00000000 Binary files a/embeddings/collections/paragraph_264.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_265.npy b/embeddings/collections/paragraph_265.npy deleted file mode 100644 index 998cb399..00000000 Binary files a/embeddings/collections/paragraph_265.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_266.npy b/embeddings/collections/paragraph_266.npy deleted file mode 100644 index dbf3aa4c..00000000 Binary files a/embeddings/collections/paragraph_266.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_267.npy b/embeddings/collections/paragraph_267.npy deleted file mode 100644 index 986c1d7d..00000000 Binary files a/embeddings/collections/paragraph_267.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_268.npy b/embeddings/collections/paragraph_268.npy deleted file mode 100644 index ce46f894..00000000 Binary files a/embeddings/collections/paragraph_268.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_269.npy b/embeddings/collections/paragraph_269.npy deleted file mode 100644 index c5af4b0e..00000000 Binary files a/embeddings/collections/paragraph_269.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_27.npy b/embeddings/collections/paragraph_27.npy deleted file mode 100644 index ecc90dc1..00000000 Binary files a/embeddings/collections/paragraph_27.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_270.npy b/embeddings/collections/paragraph_270.npy deleted file mode 100644 index 05e18de4..00000000 Binary files a/embeddings/collections/paragraph_270.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_271.npy b/embeddings/collections/paragraph_271.npy deleted file mode 100644 index d9952b29..00000000 Binary files a/embeddings/collections/paragraph_271.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_272.npy b/embeddings/collections/paragraph_272.npy deleted file mode 100644 index 1488ec80..00000000 Binary files a/embeddings/collections/paragraph_272.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_273.npy b/embeddings/collections/paragraph_273.npy deleted file mode 100644 index ec992476..00000000 Binary files a/embeddings/collections/paragraph_273.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_274.npy b/embeddings/collections/paragraph_274.npy deleted file mode 100644 index 0e56305a..00000000 Binary files a/embeddings/collections/paragraph_274.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_275.npy b/embeddings/collections/paragraph_275.npy deleted file mode 100644 index a4f1ef4d..00000000 Binary files a/embeddings/collections/paragraph_275.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_276.npy b/embeddings/collections/paragraph_276.npy deleted file mode 100644 index a4481f00..00000000 Binary files a/embeddings/collections/paragraph_276.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_277.npy b/embeddings/collections/paragraph_277.npy deleted file mode 100644 index a2ac4538..00000000 Binary files a/embeddings/collections/paragraph_277.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_278.npy b/embeddings/collections/paragraph_278.npy deleted file mode 100644 index 4d0f706a..00000000 Binary files a/embeddings/collections/paragraph_278.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_279.npy b/embeddings/collections/paragraph_279.npy deleted file mode 100644 index 72414e7f..00000000 Binary files a/embeddings/collections/paragraph_279.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_28.npy b/embeddings/collections/paragraph_28.npy deleted file mode 100644 index e1ee3f77..00000000 Binary files a/embeddings/collections/paragraph_28.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_280.npy b/embeddings/collections/paragraph_280.npy deleted file mode 100644 index 298af1a0..00000000 Binary files a/embeddings/collections/paragraph_280.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_281.npy b/embeddings/collections/paragraph_281.npy deleted file mode 100644 index 221c5cb7..00000000 Binary files a/embeddings/collections/paragraph_281.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_282.npy b/embeddings/collections/paragraph_282.npy deleted file mode 100644 index e9a5ed84..00000000 Binary files a/embeddings/collections/paragraph_282.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_283.npy b/embeddings/collections/paragraph_283.npy deleted file mode 100644 index 37e95d80..00000000 Binary files a/embeddings/collections/paragraph_283.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_284.npy b/embeddings/collections/paragraph_284.npy deleted file mode 100644 index ea1edb64..00000000 Binary files a/embeddings/collections/paragraph_284.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_285.npy b/embeddings/collections/paragraph_285.npy deleted file mode 100644 index a2868230..00000000 Binary files a/embeddings/collections/paragraph_285.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_286.npy b/embeddings/collections/paragraph_286.npy deleted file mode 100644 index 06d21ed2..00000000 Binary files a/embeddings/collections/paragraph_286.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_287.npy b/embeddings/collections/paragraph_287.npy deleted file mode 100644 index d7bd5e78..00000000 Binary files a/embeddings/collections/paragraph_287.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_288.npy b/embeddings/collections/paragraph_288.npy deleted file mode 100644 index a02b38d8..00000000 Binary files a/embeddings/collections/paragraph_288.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_289.npy b/embeddings/collections/paragraph_289.npy deleted file mode 100644 index 1ad88c73..00000000 Binary files a/embeddings/collections/paragraph_289.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_29.npy b/embeddings/collections/paragraph_29.npy deleted file mode 100644 index 6345be8a..00000000 Binary files a/embeddings/collections/paragraph_29.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_290.npy b/embeddings/collections/paragraph_290.npy deleted file mode 100644 index e6538dd5..00000000 Binary files a/embeddings/collections/paragraph_290.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_291.npy b/embeddings/collections/paragraph_291.npy deleted file mode 100644 index 1097a1bf..00000000 Binary files a/embeddings/collections/paragraph_291.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_292.npy b/embeddings/collections/paragraph_292.npy deleted file mode 100644 index 7ebdbcba..00000000 Binary files a/embeddings/collections/paragraph_292.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_293.npy b/embeddings/collections/paragraph_293.npy deleted file mode 100644 index b2c3a79a..00000000 Binary files a/embeddings/collections/paragraph_293.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_294.npy b/embeddings/collections/paragraph_294.npy deleted file mode 100644 index 0aaa84ad..00000000 Binary files a/embeddings/collections/paragraph_294.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_295.npy b/embeddings/collections/paragraph_295.npy deleted file mode 100644 index fd9beef5..00000000 Binary files a/embeddings/collections/paragraph_295.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_296.npy b/embeddings/collections/paragraph_296.npy deleted file mode 100644 index c2239ccd..00000000 Binary files a/embeddings/collections/paragraph_296.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_297.npy b/embeddings/collections/paragraph_297.npy deleted file mode 100644 index 9f50a190..00000000 Binary files a/embeddings/collections/paragraph_297.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_298.npy b/embeddings/collections/paragraph_298.npy deleted file mode 100644 index d3f9ea8d..00000000 Binary files a/embeddings/collections/paragraph_298.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_299.npy b/embeddings/collections/paragraph_299.npy deleted file mode 100644 index 454612c3..00000000 Binary files a/embeddings/collections/paragraph_299.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_3.npy b/embeddings/collections/paragraph_3.npy deleted file mode 100644 index 2aa143b4..00000000 Binary files a/embeddings/collections/paragraph_3.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_30.npy b/embeddings/collections/paragraph_30.npy deleted file mode 100644 index 88a24d55..00000000 Binary files a/embeddings/collections/paragraph_30.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_300.npy b/embeddings/collections/paragraph_300.npy deleted file mode 100644 index 5a92560e..00000000 Binary files a/embeddings/collections/paragraph_300.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_301.npy b/embeddings/collections/paragraph_301.npy deleted file mode 100644 index 2f23e029..00000000 Binary files a/embeddings/collections/paragraph_301.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_302.npy b/embeddings/collections/paragraph_302.npy deleted file mode 100644 index de78a4ff..00000000 Binary files a/embeddings/collections/paragraph_302.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_303.npy b/embeddings/collections/paragraph_303.npy deleted file mode 100644 index 379e7fa6..00000000 Binary files a/embeddings/collections/paragraph_303.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_304.npy b/embeddings/collections/paragraph_304.npy deleted file mode 100644 index 4db957e3..00000000 Binary files a/embeddings/collections/paragraph_304.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_305.npy b/embeddings/collections/paragraph_305.npy deleted file mode 100644 index ee9d604a..00000000 Binary files a/embeddings/collections/paragraph_305.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_306.npy b/embeddings/collections/paragraph_306.npy deleted file mode 100644 index 59b4e8f6..00000000 Binary files a/embeddings/collections/paragraph_306.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_307.npy b/embeddings/collections/paragraph_307.npy deleted file mode 100644 index 052b4378..00000000 Binary files a/embeddings/collections/paragraph_307.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_308.npy b/embeddings/collections/paragraph_308.npy deleted file mode 100644 index 6cbea71d..00000000 Binary files a/embeddings/collections/paragraph_308.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_309.npy b/embeddings/collections/paragraph_309.npy deleted file mode 100644 index a5aaf322..00000000 Binary files a/embeddings/collections/paragraph_309.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_31.npy b/embeddings/collections/paragraph_31.npy deleted file mode 100644 index 9da278e5..00000000 Binary files a/embeddings/collections/paragraph_31.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_310.npy b/embeddings/collections/paragraph_310.npy deleted file mode 100644 index 2ecfcedd..00000000 Binary files a/embeddings/collections/paragraph_310.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_311.npy b/embeddings/collections/paragraph_311.npy deleted file mode 100644 index f1c8c179..00000000 Binary files a/embeddings/collections/paragraph_311.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_312.npy b/embeddings/collections/paragraph_312.npy deleted file mode 100644 index 354c6e0e..00000000 Binary files a/embeddings/collections/paragraph_312.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_313.npy b/embeddings/collections/paragraph_313.npy deleted file mode 100644 index 8f4ee497..00000000 Binary files a/embeddings/collections/paragraph_313.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_32.npy b/embeddings/collections/paragraph_32.npy deleted file mode 100644 index af041851..00000000 Binary files a/embeddings/collections/paragraph_32.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_33.npy b/embeddings/collections/paragraph_33.npy deleted file mode 100644 index 8c642655..00000000 Binary files a/embeddings/collections/paragraph_33.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_34.npy b/embeddings/collections/paragraph_34.npy deleted file mode 100644 index 1b0b8ab8..00000000 Binary files a/embeddings/collections/paragraph_34.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_35.npy b/embeddings/collections/paragraph_35.npy deleted file mode 100644 index b887984d..00000000 Binary files a/embeddings/collections/paragraph_35.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_36.npy b/embeddings/collections/paragraph_36.npy deleted file mode 100644 index 8e12112b..00000000 Binary files a/embeddings/collections/paragraph_36.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_37.npy b/embeddings/collections/paragraph_37.npy deleted file mode 100644 index bcdb6c44..00000000 Binary files a/embeddings/collections/paragraph_37.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_38.npy b/embeddings/collections/paragraph_38.npy deleted file mode 100644 index 51acd6c2..00000000 Binary files a/embeddings/collections/paragraph_38.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_39.npy b/embeddings/collections/paragraph_39.npy deleted file mode 100644 index fcc8bb55..00000000 Binary files a/embeddings/collections/paragraph_39.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_4.npy b/embeddings/collections/paragraph_4.npy deleted file mode 100644 index d3f73ca0..00000000 Binary files a/embeddings/collections/paragraph_4.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_40.npy b/embeddings/collections/paragraph_40.npy deleted file mode 100644 index 2ab71ca1..00000000 Binary files a/embeddings/collections/paragraph_40.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_41.npy b/embeddings/collections/paragraph_41.npy deleted file mode 100644 index b5a40a94..00000000 Binary files a/embeddings/collections/paragraph_41.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_42.npy b/embeddings/collections/paragraph_42.npy deleted file mode 100644 index f2b0ea7d..00000000 Binary files a/embeddings/collections/paragraph_42.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_43.npy b/embeddings/collections/paragraph_43.npy deleted file mode 100644 index 07bfc95b..00000000 Binary files a/embeddings/collections/paragraph_43.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_44.npy b/embeddings/collections/paragraph_44.npy deleted file mode 100644 index 874044c3..00000000 Binary files a/embeddings/collections/paragraph_44.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_45.npy b/embeddings/collections/paragraph_45.npy deleted file mode 100644 index c0e7b274..00000000 Binary files a/embeddings/collections/paragraph_45.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_46.npy b/embeddings/collections/paragraph_46.npy deleted file mode 100644 index c302d826..00000000 Binary files a/embeddings/collections/paragraph_46.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_47.npy b/embeddings/collections/paragraph_47.npy deleted file mode 100644 index 3e18e198..00000000 Binary files a/embeddings/collections/paragraph_47.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_48.npy b/embeddings/collections/paragraph_48.npy deleted file mode 100644 index 40af8d8e..00000000 Binary files a/embeddings/collections/paragraph_48.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_49.npy b/embeddings/collections/paragraph_49.npy deleted file mode 100644 index 99fc866a..00000000 Binary files a/embeddings/collections/paragraph_49.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_5.npy b/embeddings/collections/paragraph_5.npy deleted file mode 100644 index f6f648bf..00000000 Binary files a/embeddings/collections/paragraph_5.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_50.npy b/embeddings/collections/paragraph_50.npy deleted file mode 100644 index 478be78c..00000000 Binary files a/embeddings/collections/paragraph_50.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_51.npy b/embeddings/collections/paragraph_51.npy deleted file mode 100644 index 2d408da3..00000000 Binary files a/embeddings/collections/paragraph_51.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_52.npy b/embeddings/collections/paragraph_52.npy deleted file mode 100644 index 1310abb3..00000000 Binary files a/embeddings/collections/paragraph_52.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_53.npy b/embeddings/collections/paragraph_53.npy deleted file mode 100644 index 5acc3f36..00000000 Binary files a/embeddings/collections/paragraph_53.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_54.npy b/embeddings/collections/paragraph_54.npy deleted file mode 100644 index 2085b902..00000000 Binary files a/embeddings/collections/paragraph_54.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_55.npy b/embeddings/collections/paragraph_55.npy deleted file mode 100644 index d3ab7305..00000000 Binary files a/embeddings/collections/paragraph_55.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_56.npy b/embeddings/collections/paragraph_56.npy deleted file mode 100644 index 55ac36c3..00000000 Binary files a/embeddings/collections/paragraph_56.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_57.npy b/embeddings/collections/paragraph_57.npy deleted file mode 100644 index 15f78d46..00000000 Binary files a/embeddings/collections/paragraph_57.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_58.npy b/embeddings/collections/paragraph_58.npy deleted file mode 100644 index a145bc96..00000000 Binary files a/embeddings/collections/paragraph_58.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_59.npy b/embeddings/collections/paragraph_59.npy deleted file mode 100644 index 8a98dbf4..00000000 Binary files a/embeddings/collections/paragraph_59.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_6.npy b/embeddings/collections/paragraph_6.npy deleted file mode 100644 index 0a83669a..00000000 Binary files a/embeddings/collections/paragraph_6.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_60.npy b/embeddings/collections/paragraph_60.npy deleted file mode 100644 index 0418e601..00000000 Binary files a/embeddings/collections/paragraph_60.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_61.npy b/embeddings/collections/paragraph_61.npy deleted file mode 100644 index b19c8a7c..00000000 Binary files a/embeddings/collections/paragraph_61.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_62.npy b/embeddings/collections/paragraph_62.npy deleted file mode 100644 index 57a78395..00000000 Binary files a/embeddings/collections/paragraph_62.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_63.npy b/embeddings/collections/paragraph_63.npy deleted file mode 100644 index 64f5d604..00000000 Binary files a/embeddings/collections/paragraph_63.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_64.npy b/embeddings/collections/paragraph_64.npy deleted file mode 100644 index e4960cd1..00000000 Binary files a/embeddings/collections/paragraph_64.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_65.npy b/embeddings/collections/paragraph_65.npy deleted file mode 100644 index f580a0cf..00000000 Binary files a/embeddings/collections/paragraph_65.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_66.npy b/embeddings/collections/paragraph_66.npy deleted file mode 100644 index a34aad3d..00000000 Binary files a/embeddings/collections/paragraph_66.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_67.npy b/embeddings/collections/paragraph_67.npy deleted file mode 100644 index 71edb9f2..00000000 Binary files a/embeddings/collections/paragraph_67.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_68.npy b/embeddings/collections/paragraph_68.npy deleted file mode 100644 index 475e3d2c..00000000 Binary files a/embeddings/collections/paragraph_68.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_69.npy b/embeddings/collections/paragraph_69.npy deleted file mode 100644 index 5dcff5ce..00000000 Binary files a/embeddings/collections/paragraph_69.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_7.npy b/embeddings/collections/paragraph_7.npy deleted file mode 100644 index c9624562..00000000 Binary files a/embeddings/collections/paragraph_7.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_70.npy b/embeddings/collections/paragraph_70.npy deleted file mode 100644 index ca01b907..00000000 Binary files a/embeddings/collections/paragraph_70.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_71.npy b/embeddings/collections/paragraph_71.npy deleted file mode 100644 index 90facb7b..00000000 Binary files a/embeddings/collections/paragraph_71.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_72.npy b/embeddings/collections/paragraph_72.npy deleted file mode 100644 index 645b6f42..00000000 Binary files a/embeddings/collections/paragraph_72.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_73.npy b/embeddings/collections/paragraph_73.npy deleted file mode 100644 index 2d43c7ab..00000000 Binary files a/embeddings/collections/paragraph_73.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_74.npy b/embeddings/collections/paragraph_74.npy deleted file mode 100644 index fa395841..00000000 Binary files a/embeddings/collections/paragraph_74.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_75.npy b/embeddings/collections/paragraph_75.npy deleted file mode 100644 index 89797b20..00000000 Binary files a/embeddings/collections/paragraph_75.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_76.npy b/embeddings/collections/paragraph_76.npy deleted file mode 100644 index 9da95240..00000000 Binary files a/embeddings/collections/paragraph_76.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_77.npy b/embeddings/collections/paragraph_77.npy deleted file mode 100644 index 10265986..00000000 Binary files a/embeddings/collections/paragraph_77.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_78.npy b/embeddings/collections/paragraph_78.npy deleted file mode 100644 index 6282b24e..00000000 Binary files a/embeddings/collections/paragraph_78.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_79.npy b/embeddings/collections/paragraph_79.npy deleted file mode 100644 index 22e5dc5b..00000000 Binary files a/embeddings/collections/paragraph_79.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_8.npy b/embeddings/collections/paragraph_8.npy deleted file mode 100644 index 5efc42b5..00000000 Binary files a/embeddings/collections/paragraph_8.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_80.npy b/embeddings/collections/paragraph_80.npy deleted file mode 100644 index cb8e0990..00000000 Binary files a/embeddings/collections/paragraph_80.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_81.npy b/embeddings/collections/paragraph_81.npy deleted file mode 100644 index 0e812984..00000000 Binary files a/embeddings/collections/paragraph_81.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_82.npy b/embeddings/collections/paragraph_82.npy deleted file mode 100644 index 062acea9..00000000 Binary files a/embeddings/collections/paragraph_82.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_83.npy b/embeddings/collections/paragraph_83.npy deleted file mode 100644 index 8e8d27c0..00000000 Binary files a/embeddings/collections/paragraph_83.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_84.npy b/embeddings/collections/paragraph_84.npy deleted file mode 100644 index 309482c8..00000000 Binary files a/embeddings/collections/paragraph_84.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_85.npy b/embeddings/collections/paragraph_85.npy deleted file mode 100644 index 4ab2bd50..00000000 Binary files a/embeddings/collections/paragraph_85.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_86.npy b/embeddings/collections/paragraph_86.npy deleted file mode 100644 index 3abe0cc4..00000000 Binary files a/embeddings/collections/paragraph_86.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_87.npy b/embeddings/collections/paragraph_87.npy deleted file mode 100644 index 30d76e13..00000000 Binary files a/embeddings/collections/paragraph_87.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_88.npy b/embeddings/collections/paragraph_88.npy deleted file mode 100644 index d7747448..00000000 Binary files a/embeddings/collections/paragraph_88.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_89.npy b/embeddings/collections/paragraph_89.npy deleted file mode 100644 index 9ff52e9a..00000000 Binary files a/embeddings/collections/paragraph_89.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_9.npy b/embeddings/collections/paragraph_9.npy deleted file mode 100644 index c31a9269..00000000 Binary files a/embeddings/collections/paragraph_9.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_90.npy b/embeddings/collections/paragraph_90.npy deleted file mode 100644 index 9e942e67..00000000 Binary files a/embeddings/collections/paragraph_90.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_91.npy b/embeddings/collections/paragraph_91.npy deleted file mode 100644 index e64f8f9b..00000000 Binary files a/embeddings/collections/paragraph_91.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_92.npy b/embeddings/collections/paragraph_92.npy deleted file mode 100644 index eb413807..00000000 Binary files a/embeddings/collections/paragraph_92.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_93.npy b/embeddings/collections/paragraph_93.npy deleted file mode 100644 index 175e6ce3..00000000 Binary files a/embeddings/collections/paragraph_93.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_94.npy b/embeddings/collections/paragraph_94.npy deleted file mode 100644 index f436a8df..00000000 Binary files a/embeddings/collections/paragraph_94.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_95.npy b/embeddings/collections/paragraph_95.npy deleted file mode 100644 index b2f0d009..00000000 Binary files a/embeddings/collections/paragraph_95.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_96.npy b/embeddings/collections/paragraph_96.npy deleted file mode 100644 index d65634e1..00000000 Binary files a/embeddings/collections/paragraph_96.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_97.npy b/embeddings/collections/paragraph_97.npy deleted file mode 100644 index a5220532..00000000 Binary files a/embeddings/collections/paragraph_97.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_98.npy b/embeddings/collections/paragraph_98.npy deleted file mode 100644 index 1d4d5be4..00000000 Binary files a/embeddings/collections/paragraph_98.npy and /dev/null differ diff --git a/embeddings/collections/paragraph_99.npy b/embeddings/collections/paragraph_99.npy deleted file mode 100644 index b4b48005..00000000 Binary files a/embeddings/collections/paragraph_99.npy and /dev/null differ diff --git a/embeddings/collections/texts.npy b/embeddings/collections/texts.npy deleted file mode 100644 index 4d888844..00000000 Binary files a/embeddings/collections/texts.npy and /dev/null differ diff --git a/embeddings/docker/Containerfile-embeddings b/embeddings/docker/Containerfile-embeddings deleted file mode 100644 index d3e22dc2..00000000 --- a/embeddings/docker/Containerfile-embeddings +++ /dev/null @@ -1,31 +0,0 @@ -FROM python:3.11-slim - -WORKDIR /app - -# Install deps first — this layer is cached and only rebuilt when requirements.txt changes -COPY embeddings/requirements.txt . -RUN pip install --no-cache-dir -r requirements.txt - -# Copy pipeline scripts -COPY embeddings/generate_text_templates.py . -COPY embeddings/generate_embeddings.py . -COPY embeddings/sample_embeddings.py . -COPY embeddings/search_similarity.py . -COPY embeddings/test_search_similarity.py . -COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh -RUN chmod +x /usr/local/bin/entrypoint.sh - -# Default environment — all values are overridable at runtime via -e or compose environment: -ENV POEM_PROJECT_ROOT=/data/graph \ - TEMPLATES_OUTPUT=/data/embeddings/templates.txt \ - TEMPLATES_PATH=/data/embeddings/templates.txt \ - EMBEDDINGS_DIR=/data/embeddings \ - EMBED_BASE_URL=http://idea-llm-02.idea.rpi.edu:1234/v1 \ - EMBED_MODEL=qwen3-embedding:latest \ - BATCH_SIZE=50 - -# Mount points: graph data (read-only) and embedding output (read-write) -VOLUME ["/data/graph", "/data/embeddings"] - -ENTRYPOINT ["entrypoint.sh"] -CMD ["pipeline"] diff --git a/embeddings/docker/Dockerfile-browser-backend b/embeddings/docker/Dockerfile-browser-backend deleted file mode 100644 index dc1bb69a..00000000 --- a/embeddings/docker/Dockerfile-browser-backend +++ /dev/null @@ -1,8 +0,0 @@ -FROM python:3.14-alpine - -WORKDIR /backend -COPY ./browser/backend/. . -RUN pip install --no-cache-dir -r requirements.txt - -EXPOSE 8000 -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/embeddings/docker/Dockerfile-browser-frontend b/embeddings/docker/Dockerfile-browser-frontend deleted file mode 100644 index cab077fb..00000000 --- a/embeddings/docker/Dockerfile-browser-frontend +++ /dev/null @@ -1,32 +0,0 @@ -FROM node:lts-alpine AS build - -WORKDIR /frontend - -COPY browser/frontend/package*.json . -RUN npm ci - -COPY browser/frontend/. . -RUN npm run build - - -FROM nginx:alpine - -COPY --from=build /frontend/dist /usr/share/nginx/html - - -RUN printf "server { \ - listen 80; \ - server_name localhost; \ - root /usr/share/nginx/html; \ - index index.html; \ - location / { try_files \$uri /index.html; } \ - - location /api/ { \ - proxy_pass http://poem-browser-backend:8000/; \ - proxy_set_header Host \$host; \ - proxy_set_header X-Real-IP \$remote_addr; \ - }\ -}" > /etc/nginx/conf.d/default.conf - -EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/embeddings/docker/Dockerfile-demo b/embeddings/docker/Dockerfile-demo deleted file mode 100644 index 98e7aee4..00000000 --- a/embeddings/docker/Dockerfile-demo +++ /dev/null @@ -1,26 +0,0 @@ -FROM sbtscala/scala-sbt:eclipse-temurin-25.0.1_8_1.12.9_3.3.7 AS build-java - -RUN apt-get update && apt-get install -y unzip curl -RUN curl -fsSL https://deb.nodesource.com/setup_24.x -o nodesource_setup.sh -RUN bash nodesource_setup.sh -RUN apt-get install -y nodejs -ENV JAVA_OPTS="-Xms6048m -Xmx10000m" - -COPY ./poem-demo /poem-demo - -WORKDIR /poem-demo - -RUN sbt clean -RUN sbt playUpdateSecret && sbt dist - -RUN cd /poem-demo/target/universal/ && unzip poem-demo-1.0-SNAPSHOT.zip - -FROM eclipse-temurin:25-jre - -COPY --from=build-java /poem-demo/target/universal/poem-demo-1.0-SNAPSHOT /poem-demo - -WORKDIR /poem-demo - -EXPOSE 9000 - -ENTRYPOINT [ "bin/poem-demo" ] \ No newline at end of file diff --git a/embeddings/docker/Dockerfile-kg b/embeddings/docker/Dockerfile-kg deleted file mode 100644 index 35537d90..00000000 --- a/embeddings/docker/Dockerfile-kg +++ /dev/null @@ -1,12 +0,0 @@ -FROM hansidm/fuseki:latest - -COPY /poem-demo/dist/data /data -COPY /ontology /data -COPY POEM.rdf /data -RUN tdb2.tdbloader --loc=/ds/tdb2 /data/*.ttl -RUN tdb2.tdbloader --loc=/ds/tdb2 /data/*.rdf -RUN tdb2.tdbloader --loc=/ds/tdb2 /data/*.owl -RUN rm -rf /data - -WORKDIR /usr/local/fuseki -RUN java -cp fuseki-server.jar jena.textindexer --desc=/usr/local/fuseki/run/config.ttl \ No newline at end of file diff --git a/embeddings/docker/MILVUS.md b/embeddings/docker/MILVUS.md new file mode 100644 index 00000000..069412ff --- /dev/null +++ b/embeddings/docker/MILVUS.md @@ -0,0 +1,388 @@ +# Milvus Integration + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a single-page Milvus quick-start and common commands. + +How the POEM embeddings stack uses **Milvus** (via the [`pymilvus`](https://github.com/milvus-io/pymilvus) +library) as its vector search engine — architecture, code map, collection schema, +configuration, the Docker stack, and how to verify the live path. + +> **TL;DR** — Milvus is the **default** backend (`VECTOR_BACKEND=milvus`). It is +> reached over gRPC at `localhost:19530`, provisioned by +> [`milvus-compose.yml`](./milvus-compose.yml). Each metric is materialized as its +> own **FLAT** (exact) collection, so results are identical to the pure-numpy +> backend. If the server is unreachable or `pymilvus` is missing, the system +> **falls back to numpy automatically** — nothing breaks offline. For a local +> server, it also **self-heals first**: `docker_preflight.ensure_milvus_ready()` +> starts Docker Desktop / `docker compose up -d` if either is down before falling +> back (see §10). + +--- + +## 1. Overview + +- **Library:** `pymilvus>=3.0.0,<4.0.0` — used through the modern high-level + **`MilvusClient`** API (`create_schema` / `add_field` / `prepare_index_params` / + `insert` / `search`). The codebase does **not** use the older ORM-style + `connections.connect` / `Collection` / `FieldSchema` / `CollectionSchema` API. +- **Server:** Milvus **v2.4.13 Standalone** in Docker (etcd + MinIO + standalone), + gRPC on `19530`, health on `9091`. +- **Exactness:** each metric gets a dedicated **FLAT** index → exact nearest + neighbors, so Milvus and numpy return the *same* ranking. This parity is + deliberate — the test suite compares against numpy. +- **Resilience:** `get_store()` transparently degrades to numpy on any error + (missing `pymilvus`, server down, wrong URI), logging one line to stderr. For a + local server it tries to self-heal first (§10a) — start Docker Desktop / the + compose stack — before falling back. + +## 2. Architecture flow + +``` +generate_embeddings.py (embed via qwen3-embedding @ EMBED_BASE_URL) + │ writes canonical vectors + ▼ +Pipeline/
/ one folder per section + ├─ *.npy (one content-addressed vector per paragraph) + ├─ texts.npy (source strings, index-aligned) + └─ manifest.json ([{hash, file}, ...] in row order) + │ + │ poem_core.corpus.load_embeddings() -> (emb (N,4096), texts (N,), sections (N,)) + ▼ +poem_core.vector_store.get_store(emb, texts, sections) [VECTOR_BACKEND] + │ + ├─ "milvus" ─► MilvusVectorStore ─► (re)build one FLAT collection per + │ metric in Milvus ─► client.search(...) + │ │ on any error + │ ▼ + └─ "numpy" / fallback ─► NumpyVectorStore (in-process, exact) + │ + ▼ + top_candidates(query_vec, metric, section, k) -> (scores, texts, sections) + │ + ▼ + dedup-by-entity (poem_core.dedup) ─► [MCP] RDF enrich (graph_lookup) ─► results +``` + +**`.npy` files are the source of truth.** Milvus is a search *accelerator* rebuilt +from those arrays at startup — see [§7 In-memory-first](#7-in-memory-first-model). + +## 3. Code map + +| Concern | File | Anchor | +|---|---|---| +| Backends + factory | [`poem_core/vector_store.py`](../poem_core/vector_store.py) | `NumpyVectorStore` L42, `MilvusVectorStore` L81, `get_store` L187 | +| Milvus connect / warm-up | `poem_core/vector_store.py` | `__init__` L90–118 (lazy `from pymilvus import MilvusClient`, `list_collections()` probe, warm Cosine) | +| Build/reuse a collection | `poem_core/vector_store.py` | `_ensure` L123–159 (`from pymilvus import DataType`, schema, FLAT index, batched insert, `load_collection`) | +| Query | `poem_core/vector_store.py` | `top_candidates` L161–184 (`client.search`, section filter, L2 negation, L1→numpy) | +| Config / env knobs | [`poem_core/config.py`](../poem_core/config.py) | vector-store block L53–79 (`vector_backend`, `milvus_uri`, `milvus_collection`, `milvus_token`) | +| Metric → Milvus type | [`poem_core/metrics.py`](../poem_core/metrics.py) | `MILVUS_METRIC_TYPE` L49–54, `milvus_metric_for` L57 | +| Corpus loader (arrays) | [`poem_core/corpus.py`](../poem_core/corpus.py) | `load_embeddings` L73, `discover_sections` L45 | +| Consumer — CLI | [`Pipeline/search_similarity.py`](../Pipeline/search_similarity.py) | `get_store` L115, `top_candidates` L98 | +| Consumer — evaluation | [`Pipeline/evaluate_search.py`](../Pipeline/evaluate_search.py) | `get_store` L254, `top_candidates` L279 | +| Consumer — MCP server | [`MCP/mcp_server.py`](../MCP/mcp_server.py) | `get_store` L103, logs `Vector backend: ...` L104, `top_candidates` L179 | +| Back-compat shim | [`Pipeline/vector_store.py`](../Pipeline/vector_store.py) | re-exports from `poem_core` | + +`pymilvus` is imported **only** in `poem_core/vector_store.py`, and only **lazily** +(inside `__init__` and `_ensure`), so importing the package costs nothing until the +Milvus path is actually taken. + +## 4. Collections & schema + +One **FLAT** collection **per metric**, named `{MILVUS_COLLECTION}_{metric}`: + +| Metric name | Milvus metric type | Collection (base `poem`) | +|---|---|---| +| Cosine Similarity | `COSINE` | `poem_cosine` | +| Dot Product | `IP` | `poem_ip` | +| Euclidean (L2) | `L2` | `poem_l2` | +| Manhattan (L1) | *(none)* | *served by internal numpy fallback* | + +Schema built in `_ensure` (`vector_store.py` L141–148): + +| Field | Type | Notes | +|---|---|---| +| `id` | `INT64` | primary key, `auto_id=False` (row index) | +| `vector` | `FLOAT_VECTOR` | `dim = embeddings.shape[1]` (**4096**, derived — never hardcoded) | +| `text` | *dynamic* | source paragraph (`enable_dynamic_field=True`) | +| `section` | *dynamic* | `instruments` / `scales` / `collections` | + +- Index: `add_index(field_name="vector", index_type="FLAT", metric_type=...)` → exact. +- Insert: rows in batches of **1000**, then `load_collection` into memory. +- **Reuse guard:** if the collection already exists and an exact **`count(*)`** + query equals `len(texts)` (and `rebuild` is false), it is reused as-is; otherwise + it is dropped and rebuilt. (`count(*)` is used instead of `get_collection_stats` + row_count, which lags until a flush — see §12.) +- The full corpus (all sections, ≈**778** rows) lives in each collection; section + restriction is applied at query time via the dynamic-field filter. + +## 5. Metric handling & score convention + +The pipeline's invariant is **higher = more similar**, for every metric: +- `COSINE` / `IP`: Milvus returns higher-is-closer → used directly. +- `L2`: Milvus returns distance (smaller-is-closer) → **negated** so higher = better + (`vector_store.py` L180). +- `Manhattan (L1)`: Milvus has no native L1 metric, so `milvus_metric_for` returns + `None` and `top_candidates` delegates to an internal `NumpyVectorStore` + (`vector_store.py` L163–165). Results are still exact. + +## 6. Query flow + +`top_candidates(query_vec, metric, section, k)`: +1. Map the metric name → Milvus metric type; `None` → numpy fallback. +2. `_ensure` the per-metric collection (build once, cached in `self._built`). +3. `client.search(collection, data=[query_vec], limit=k, filter='section == "..."', + output_fields=["text","section"], search_params={"metric_type": ...})`. +4. Return `(scores, texts, sections)` — `text`/`section` read from each hit's + dynamic `entity` payload; L2 scores negated. + +Callers then run the shared dedup-by-entity (`poem_core.dedup`); the MCP server +additionally enriches each hit from the RDF graph (`graph_lookup`). + +## 7. "In-memory-first" model + +The canonical data is the on-disk `.npy` corpus, **not** Milvus. At startup the +store (re)builds collections in Milvus from the loaded arrays; the server's +`./volumes` state is incidental and rebuildable. Consequence: **there is no +`generate → Milvus` ingestion path** today — regenerating embeddings updates the +`.npy` files, and the collections are rebuilt from them on next run (reused if the +collection already holds every row, via an exact `count(*)` check). + +## 8. Fallback semantics + +`get_store()` (`vector_store.py` L187–204): + +```python +if backend == "milvus": + try: + return MilvusVectorStore(embeddings, texts, sections) + except Exception as e: # ImportError (no pymilvus) OR connection error + sys.stderr.write("[vector_store] Milvus backend unavailable (...); falling back to numpy.\n") + return NumpyVectorStore(embeddings, texts, sections) +return NumpyVectorStore(embeddings, texts, sections) +``` + +The constructor probes the server (`list_collections()`) and warms the Cosine +collection, so an unreachable server surfaces **immediately** and the fallback +triggers before any query runs. + +**Tests pin numpy.** [`Pipeline/conftest.py`](../Pipeline/conftest.py) and +[`MCP/conftest.py`](../MCP/conftest.py) do +`os.environ.setdefault("VECTOR_BACKEND", "numpy")` so the suite is deterministic and +offline. Because it is `setdefault`, an **explicit** `VECTOR_BACKEND=milvus` in the +environment still wins for a deliberate parity run. + +## 9. Configuration + +All values are environment-overridable (read live), defined in `poem_core/config.py`: + +| Env var | Default | Purpose | +|---|---|---| +| `VECTOR_BACKEND` | `milvus` | `milvus` (external server) or `numpy` (in-process) | +| `MILVUS_URI` | `http://localhost:19530` | Milvus gRPC endpoint (any OS). A bare path (e.g. `poem.db`) selects embedded **Milvus Lite**, which is **Linux/macOS only** | +| `MILVUS_COLLECTION` | `poem` | base name; per-metric collections derived from it | +| `MILVUS_TOKEN` | *(empty)* | auth token for a remote/cloud Milvus (e.g. Zilliz Cloud) | + +Install the client: `pip install -e "embeddings[milvus]"` (the `milvus` extra in +[`pyproject.toml`](../pyproject.toml)) or `pip install "pymilvus>=3.0.0,<4.0.0"`. + +## 10. Docker stack + +Defined in [`milvus-compose.yml`](./milvus-compose.yml) — three services on a +`milvus` network: + +| Service | Image | Ports | Role | +|---|---|---|---| +| `milvus-etcd` | `quay.io/coreos/etcd:v3.5.5` | *(internal)* | metadata / coordination | +| `milvus-minio` | `minio/minio:RELEASE.2023-03-20T…` | `9000`, `9001` | object storage | +| `milvus-standalone` | `milvusdb/milvus:v2.4.13` | `19530` (gRPC), `9091` (health) | the Milvus server (`MILVUS_URI`) | + +```bash +# Start +docker compose -f embeddings/docker/milvus-compose.yml up -d +# Health (standalone has a 90s start_period — wait for it before querying) +docker compose -f embeddings/docker/milvus-compose.yml ps +curl http://localhost:9091/healthz +# Stop / Stop + wipe volumes +docker compose -f embeddings/docker/milvus-compose.yml down +docker compose -f embeddings/docker/milvus-compose.yml down -v +``` + +Data persists under `embeddings/docker/volumes/` via bind mounts, but is +rebuildable (see §7). + +### 10a. Self-healing / surviving a reboot + +Two layers cover "the machine got rebooted / Docker was never started" so you +(almost) never have to run the commands above by hand: + +1. **`restart: unless-stopped`** on all three services in + [`milvus-compose.yml`](./milvus-compose.yml) — once the Docker daemon is up, + the containers come back on their own. For this to also happen automatically + at boot (not just when you next open Docker Desktop), enable **Docker + Desktop → Settings → General → "Start Docker Desktop when you sign in"**. +2. **[`poem_core/docker_preflight.py`](../poem_core/docker_preflight.py)** + covers the remaining gap — Docker Desktop itself isn't running at all. + `ensure_milvus_ready()`: + - checks `docker info`; if unreachable, launches Docker Desktop (Windows/macOS; + best-effort `systemctl start docker` on Linux) and waits for it, + - checks the compose stack is running; if not, runs `docker compose up -d`, + - waits for `/healthz` to report ready. + + It runs automatically from `vector_store.get_store()` (only for a *local* + `MILVUS_URI` — a remote/cloud target never triggers a local Docker launch) + and from `check_milvus.py`, `milvus_admin.py`, and `milvus_demo.py`. Run it + standalone with `python embeddings/docker/ensure_docker.py`. + + - `MILVUS_SKIP_ENSURE=1` disables it entirely (CI, headless boxes). + - `DOCKER_DESKTOP_EXE=` overrides the Windows install-path lookup if + Docker Desktop lives somewhere other than `Program Files`. + +## 11. Verifying the live path + +1. **Start & wait for healthy** — the standalone container's 90s `start_period` + matters: a query issued before the server is ready trips the numpy fallback. +2. **Confirm the backend is Milvus (not the silent fallback):** + ```bash + VECTOR_BACKEND=milvus python -c "import sys; sys.path.insert(0,'embeddings'); \ + from poem_core.corpus import load_embeddings; from poem_core.vector_store import get_store; \ + e,t,s=load_embeddings(); print(type(get_store(e,t,s)).__name__)" + # -> MilvusVectorStore (and NO '[vector_store] Milvus backend unavailable' warning) + ``` +3. **Collections exist:** `MilvusClient("http://localhost:19530").list_collections()` + shows `poem_cosine`, `poem_ip`, `poem_l2`, each with `row_count == len(texts)` (≈778). +4. **Exactness / parity:** with a stored vector as the query (`emb[0]`), Milvus and + numpy return the same top-k for Cosine / Dot / L2; `emb[0]` ranks itself #1. +5. **MCP path:** `VECTOR_BACKEND=milvus` then start `MCP/mcp_server.py`; it logs + `[mcp_server] Vector backend: MilvusVectorStore`. + +> **Verified — server-independent** (2026-07-06, `pymilvus 2.4.15`, Python 3.8): +> the client imports; the corpus loads at **dim 4096** (778 vectors); a direct +> `MilvusVectorStore` with no server raises a **`MilvusException`** (not +> `ImportError`), so the library is fine and only the server is absent; +> `get_store()` falls back to numpy with the documented warning; the numpy parity +> ground-truth holds (`emb[0]` ranks #1 for all four metrics). +> +> **Verified — live against Zilliz Cloud** (2026-07-06, managed Milvus): with +> `VECTOR_BACKEND=milvus` and `MILVUS_URI`/`MILVUS_TOKEN` set, `get_store()` selected +> **`MilvusVectorStore`** (no fallback); `poem_cosine` / `poem_ip` / `poem_l2` were +> created with **778 entities each** (confirmed by a `count(*)` query — see the +> row_count note below); and Milvus top-k matched the numpy ground-truth for +> Cosine / Dot / L2 (`emb[0]` ranks #1), with Manhattan/L1 on the numpy fallback. + +### TLS-intercepting networks (corporate proxy) + +If your network intercepts TLS you'll see gRPC `CERTIFICATE_VERIFY_FAILED` on +connect and `get_store()` will **silently fall back to numpy** (with the warning). +Point gRPC at a CA bundle that includes the interceptor's root — simplest is the +Windows trust store exported to PEM: + +```powershell +# Export the Windows trusted roots (includes the corporate/proxy root) to PEM: +$out = "$PWD\win_ca_bundle.pem"; $sb = [Text.StringBuilder]::new() +Get-ChildItem Cert:\LocalMachine\Root, Cert:\CurrentUser\Root | ForEach-Object { + [void]$sb.AppendLine("-----BEGIN CERTIFICATE-----") + [void]$sb.AppendLine([Convert]::ToBase64String($_.RawData,'InsertLineBreaks')) + [void]$sb.AppendLine("-----END CERTIFICATE-----") } +Set-Content $out $sb.ToString() -Encoding ascii + +# Then tell gRPC (pymilvus) to trust it, and connect as usual: +$env:GRPC_DEFAULT_SSL_ROOTS_FILE_PATH = "$PWD\win_ca_bundle.pem" +``` + +This is a client-side *network* workaround, not a code change — the same +`MILVUS_URI`/`MILVUS_TOKEN` then connect. (This is exactly how the live Zilliz +verification above was run.) + +## 12. Known limitations / notes + +- **No `generate → Milvus` store-of-record ingestion.** `.npy` remains canonical; + Milvus is rebuilt from it (§7). +- **Minimal metadata in Milvus** (`text`, `section` only). Entity id/type/label are + resolved from the RDF graph at query time (`MCP/graph_lookup.py`), not stored in + Milvus. +- **FLAT is intentional** (exact, numpy-parity for tests). Switching to ANN + indexes (IVF/HNSW) would trade exactness for speed and break the parity guarantee. +- **Dimension is derived** from `embeddings.shape[1]`, so the schema stays correct + if the embedding model changes. +- **`get_collection_stats` row_count lags** (counts *sealed* segments only, so it + reads **0 right after insert** even though data is queryable — use `count(*)` for + the true number). `_ensure`'s reuse-guard therefore decides reuse with an exact + **`count(*)` query**, not row_count, so existing collections are **reused, not + rebuilt**, on every startup. *Verified live against Zilliz: a second `get_store()` + did **0 drops / 0 inserts** with parity intact.* +- **Windows:** use the Docker Standalone server; embedded Milvus Lite (bare-path + `MILVUS_URI`) is Linux/macOS only. + +## 13. Ways to run Milvus — deployment modes & recommendation + +`pymilvus` speaks the **same `MilvusClient` API** to every deployment — you only +change **where Milvus lives** (the `MILVUS_URI` / `MILVUS_TOKEN`). The four modes: + +| Mode | How you point at it | Runs where | Best for | Fits POEM? | +|---|---|---|---|---| +| **Milvus Lite** (embedded) | `MILVUS_URI=./poem.db` (a bare file path) | In-process, no server | Quick local dev, notebooks, tiny corpora | ❌ **Linux/macOS only** — not on this Windows box | +| **Standalone** (Docker) | `http://localhost:19530` | One container set (etcd+MinIO+standalone) on your machine | Single-node, up to millions of vectors; the project default | ✅ **Recommended default** — this is [`milvus-compose.yml`](./milvus-compose.yml) | +| **Distributed** (Kubernetes) | `http://:19530` | A K8s cluster (many pods, HA) | Very large scale, high availability, multi-tenant | ➖ Overkill for a ~778-vector corpus | +| **Zilliz Cloud** (managed) | `https://…zillizcloud.com` + `MILVUS_TOKEN` | Zilliz's cloud (fully managed) | No-ops, shared/remote access, teams | ✅ Good when a **hosted/shared** endpoint is wanted | + +### "Milvus as an API from Python" + +`pymilvus` is a **client**, not a server you embed in your app — you don't "run +Milvus in Python." To expose POEM search (which is backed by Milvus via +`get_store()`) as an **HTTP API from Python**, use the FastAPI service in +[`../API/api_server.py`](../API/api_server.py): set `VECTOR_BACKEND=milvus` +(+`MILVUS_URI`) and it serves `/search` over HTTP, with a Swagger UI at `/docs`. +See [../API/API.md](../API/API.md). (The MCP server is the equivalent surface for +LLM clients.) + +### Recommendation for POEM + +1. **Local / single developer:** **Standalone via Docker** (current default). Bring + it up with `milvus-compose.yml`, keep **FLAT** indexes (exact, numpy-parity), and + let the `.npy` files stay canonical (§7). Zero cost, exact results, matches tests. +2. **Shared / remote / no-ops:** **Zilliz Cloud** — point `MILVUS_URI` + + `MILVUS_TOKEN` at the managed endpoint; no infra to run. Same code path. +3. **Serving to other apps:** run the **FastAPI service** (`VECTOR_BACKEND=milvus`) + in front of whichever of the above you chose — that is the "Milvus as an API" + deliverable. + +Skip **Distributed** unless the corpus grows by orders of magnitude, and skip +**Milvus Lite** on Windows. In every case the schema, FLAT-exactness, and numpy +fallback described above are unchanged — only `MILVUS_URI`/`MILVUS_TOKEN` differ. + +## 14. Managing accounts — upload, update, switch + +[`check_milvus.py`](./check_milvus.py) *verifies* a backend; [`milvus_admin.py`](./milvus_admin.py) +*operates* on it. Target account = `MILVUS_URI` / `MILVUS_TOKEN` (env), overridable +per-run with `--uri` / `--token`. + +| Task | Command | +|---|---| +| See what's on an account vs local data | `python embeddings/docker/milvus_admin.py status` | +| **Upload everything to a NEW account** | `python embeddings/docker/milvus_admin.py push --uri --token ` | +| **Update an account after the data changed** | `python embeddings/docker/milvus_admin.py push` | +| Reset / clean an account | `python embeddings/docker/milvus_admin.py drop` | + +**Upload to a new account.** `push` (re)builds all three metric collections +(`poem_cosine` / `poem_ip` / `poem_l2`) from the local `.npy` corpus on whatever +`--uri` points at, creating them if absent — so populating a fresh Zilliz cluster is +a single `push`. + +**Update after data changes.** Regenerate the corpus (`generate_embeddings.py`), +then `push` to make Milvus match the new `.npy`. `status` prints a **corpus +fingerprint** (a hash over the content manifests) so you can see whether the local +data changed. Note automatic startup reuse only compares the *row count*, so run +`push` explicitly after a **same-count content edit**. A full rebuild of 778 vectors +is a few seconds — no incremental sync is needed at this scale. + +**Switch accounts.** Either export the env for the session (repoints the whole stack +— CLI, MCP, REST API, agent — at once): + +```powershell +$env:MILVUS_URI = "https://.zillizcloud.com:19540" +$env:MILVUS_TOKEN = "" # db_admin:pw, or a revocable API key +$env:GRPC_DEFAULT_SSL_ROOTS_FILE_PATH = "C:\path\win_ca_bundle.pem" # TLS-intercepted nets +``` + +…or pass `--uri` / `--token` per command to hit a different account without touching +the env. *Verified live against Zilliz: `status` → `push` → `status` round-trips with +all three collections at 778.* diff --git a/embeddings/docker/MILVUS_DEMO.md b/embeddings/docker/MILVUS_DEMO.md new file mode 100644 index 00000000..c63ce230 --- /dev/null +++ b/embeddings/docker/MILVUS_DEMO.md @@ -0,0 +1,114 @@ +# Local Milvus demo guide + +Quick reference: see `../manuals/DOCS_SUMMARY.md` for a compact Milvus demo quick-start. + +This guide turns the Milvus integration into a simple, deployable local demo that shows how POEM-style vector search works, using POEM's own real embeddings — not placeholder data. + +## Goals + +- Use a local Milvus Standalone instance running in Docker. +- Load a handful of real `.npy` embeddings (qwen3-embedding vectors generated by `Pipeline/generate_embeddings.py`) and search them with cosine similarity. +- Keep the demo self-contained and fast to run: a fresh collection every run, no accumulated state. +- Keep the canonical source of truth as the `.npy` embedding files, with Milvus acting as a searchable runtime index. + +## Prerequisites + +- Docker Desktop or a compatible Docker engine +- Python with `pymilvus` +- The POEM embeddings environment + +Install the client if needed: + +```powershell +pip install pymilvus +# or +pip install -e embeddings[milvus] +``` + +## 1. Start a local Milvus instance + +`milvus_demo.py` (step 2 below) now does this for you automatically — it calls +`poem_core.docker_preflight.ensure_milvus_ready()`, which starts Docker Desktop +and/or `docker compose up -d` if either isn't already running, then waits for +the health check. You can skip straight to step 2 unless you want to do this +by hand or run it standalone with `python embeddings/docker/ensure_docker.py`. + +To start it manually instead, from the repository root: + +```powershell +docker compose -f embeddings/docker/milvus-compose.yml up -d +``` + +Verify that it is healthy: + +```powershell +docker compose -f embeddings/docker/milvus-compose.yml ps +curl http://localhost:9091/healthz +``` + +The Milvus endpoint will be available at: + +```powershell +$env:MILVUS_URI = "http://localhost:19530" +$env:MILVUS_TOKEN = "" +``` + +## 2. Run the quick demo + +```powershell +python embeddings/docker/milvus_demo.py +``` + +Every run drops and recreates the collection, so there is nothing to reset — +it's always a fresh instance. This script demonstrates: + +- connecting to local Milvus +- loading 5 real `.npy` embeddings (default: `Pipeline/instruments/`) plus + their source text, via the same `manifest.json` / `texts.npy` scheme + `poem_core/corpus.py` uses for the full corpus +- creating a fresh vector collection with the dimension derived from the + loaded vectors (4096 for the current `qwen3-embedding` corpus) +- inserting those 5 real rows +- running a cosine similarity search (query = one of the 5 loaded vectors) + and printing the ranked results + +Use `--section scales` / `--section collections` to sample from a different +corpus folder, or `--n 10` to load more files. + +## 3. What the demo shows + +### Real embeddings, not placeholders +Every vector inserted and searched is a genuine `qwen3-embedding` output +already generated on disk by `Pipeline/generate_embeddings.py` — the demo +reads the `.npy` files directly, so the ranking it prints reflects real +semantic similarity between actual questionnaire texts (e.g. `GAD-7` ranking +close to other anxiety instruments), not random noise. + +### Search +The demo uses one of the 5 loaded vectors as the query and returns all 5 +results ranked by cosine similarity — the query's own row lands at rank 1 +(score ≈ 1.0). This mirrors the POEM search pathway: a query embedding is +compared against stored vectors and the closest matches are returned. + +### Fresh every run +The collection is dropped and recreated on every invocation, so there's no +accumulated state to manage and no `--reset` flag to remember. + +## 4. Use it with POEM data + +The POEM pipeline should continue to treat the `.npy` embedding files as the canonical source of truth. Milvus can then be rebuilt or refreshed from those arrays when needed. + +Typical flow: + +1. Generate or refresh embeddings in the POEM pipeline. +2. Load the arrays into the vector store. +3. Use Milvus for fast approximate or exact vector search. +4. Keep document metadata and source paths alongside the vectors for downstream enrichment. + +## 5. General deployment notes + +- Keep the containerized Milvus service local by default. +- Make the connection configurable with environment variables. +- Prefer local Docker deployment for development and internal demos. +- Keep the data source canonical on disk and rebuild the index from it when necessary. +- If the service is unavailable, the application should fall back to the numpy backend rather than failing outright. diff --git a/embeddings/docker/browser-compose.yml b/embeddings/docker/browser-compose.yml deleted file mode 100644 index 6a886de4..00000000 --- a/embeddings/docker/browser-compose.yml +++ /dev/null @@ -1,28 +0,0 @@ -services: - browser-backend: - build: - context: .. - dockerfile: docker/Dockerfile-browser-backend - image: poem-browser-backend:latest - container_name: poem-browser-backend - expose: - - "8000" - networks: - - browser-net - - browser-frontend: - build: - context: .. - dockerfile: docker/Dockerfile-browser-frontend - image: poem-browser-frontend:latest - container_name: poem-browser-frontend - depends_on: - - browser-backend - ports: - - "8080:80" - networks: - - browser-net - -networks: - browser-net: - driver: bridge diff --git a/embeddings/docker/check_milvus.py b/embeddings/docker/check_milvus.py new file mode 100644 index 00000000..566795e0 --- /dev/null +++ b/embeddings/docker/check_milvus.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +r"""Actively verify the Milvus vector backend end-to-end (no embedding endpoint needed). + +Reads MILVUS_URI / MILVUS_TOKEN from the environment and forces VECTOR_BACKEND=milvus. +Confirms, in one run: + 1. the real ``MilvusVectorStore`` is selected (not the silent numpy fallback); + 2. the per-metric collections exist with the full row count (via ``count(*)``); + 3. Milvus top-k matches the numpy ground truth for every native metric + (a stored vector is used as the query, so no RPI / embedding server is needed); + 4. a second ``get_store()`` **reuses** the collections (0 drops / 0 inserts). + +Usage (PowerShell): + $env:VECTOR_BACKEND="milvus" + $env:MILVUS_URI="http://localhost:19530" + $env:MILVUS_TOKEN="" + python embeddings/docker/check_milvus.py +""" +import os +import sys + +_HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.dirname(_HERE)) # embeddings/ root -> import poem_core +os.environ.setdefault("VECTOR_BACKEND", "milvus") + +import numpy as np +from poem_core import config +from poem_core.corpus import load_embeddings +from poem_core.docker_preflight import ensure_milvus_ready, is_local_uri +from poem_core.vector_store import get_store, MilvusVectorStore, NumpyVectorStore +from pymilvus import MilvusClient + + +def _client(): + tok = config.milvus_token() + return MilvusClient(uri=config.milvus_uri(), token=tok) if tok else MilvusClient(uri=config.milvus_uri()) + + +def main() -> int: + print(f"URI: {config.milvus_uri()} | token: {'set' if config.milvus_token() else 'none'} " + f"| backend: {config.vector_backend()}") + if is_local_uri(config.milvus_uri()): + ensure_milvus_ready() + emb, texts, secs = load_embeddings() + print(f"corpus: {emb.shape}") + + store = get_store(emb, texts, secs) + print("backend selected:", type(store).__name__) + if not isinstance(store, MilvusVectorStore): + print("FAIL: fell back to numpy (server unreachable). See warning above.") + return 1 + + ok = True + + # (3) parity vs numpy on a stored-vector query + nps = NumpyVectorStore(emb, texts, secs) + q = emb[0] + for m in ["Cosine Similarity", "Dot Product", "Euclidean (L2)"]: + ms, mt, _ = store.top_candidates(q, m, None, k=5) + ns, nt, _ = nps.top_candidates(q, m, None, k=5) + if len(mt) == 0: + print(f" parity {m:18s} match=FAIL (Milvus returned 0 hits)") + ok = False + continue + match = str(mt[0]) == str(nt[int(np.argsort(ns)[::-1][0])]) + ok &= match + print(f" parity {m:18s} match={match}") + + # (2) collections + true count + c = _client() + base = config.milvus_collection() + for name in (f"{base}_cosine", f"{base}_ip", f"{base}_l2"): + if not c.has_collection(name): + print(f" collection {name}: MISSING") + ok = False + continue + c.load_collection(name) + res = c.query(collection_name=name, filter="id >= 0", output_fields=["count(*)"]) + n = int(res[0]["count(*)"]) if res else 0 + print(f" collection {name}: count(*)={n} (expected {len(texts)})") + ok &= (n == len(texts)) + + # (4) reuse: a second store must not drop or insert + drops, ins = [], [] + _od, _oi = MilvusClient.drop_collection, MilvusClient.insert + MilvusClient.drop_collection = lambda self, *a, **k: (drops.append(1), _od(self, *a, **k))[1] + MilvusClient.insert = lambda self, *a, **k: (ins.append(1), _oi(self, *a, **k))[1] + try: + s2 = MilvusVectorStore(emb, texts, secs) + for m in ["Cosine Similarity", "Dot Product", "Euclidean (L2)"]: + s2.top_candidates(q, m, None, k=3) + finally: + MilvusClient.drop_collection, MilvusClient.insert = _od, _oi + reuse_ok = not drops and not ins + print(f" reuse: drops={len(drops)} inserts={len(ins)} -> {'OK' if reuse_ok else 'REBUILT'}") + ok &= reuse_ok + + print("\nRESULT:", "PASS" if ok else "FAIL") + return 0 if ok else 1 + + +if __name__ == "__main__": + sys.exit(main()) + + +''' +docker compose -f embeddings/docker/milvus-compose.yml up -d +python embeddings/docker/check_milvus.py +''' diff --git a/embeddings/docker/embeddings-compose.yml b/embeddings/docker/embeddings-compose.yml deleted file mode 100644 index 14f7a053..00000000 --- a/embeddings/docker/embeddings-compose.yml +++ /dev/null @@ -1,19 +0,0 @@ -services: - embeddings: - build: - context: .. - dockerfile: docker/Containerfile-embeddings - volumes: - # Mount your RDF graph (TTL files) here — read-only - - ./graph:/data/graph:ro,Z - # Embedding output (.npy files, templates.txt) written here - - ./embeddings_output:/data/embeddings:Z - environment: - EMBED_BASE_URL: http://idea-llm-02.idea.rpi.edu:1234/v1 - EMBED_MODEL: qwen3-embedding:latest - BATCH_SIZE: "50" - # Override if your TTL files are in a subfolder of /data/graph: - # POEM_PROJECT_ROOT: /data/graph/myontology - # Override for a different embedding server: - # EMBED_BASE_URL: http://my-server:1234/v1 - command: pipeline diff --git a/embeddings/docker/ensure_docker.py b/embeddings/docker/ensure_docker.py new file mode 100644 index 00000000..5ae5c5d6 --- /dev/null +++ b/embeddings/docker/ensure_docker.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +r"""Manual preflight: make sure Docker + the local Milvus stack are up and healthy. + +Thin CLI wrapper around ``poem_core.docker_preflight.ensure_milvus_ready()`` -- +the same self-healing check that ``vector_store.get_store()`` and the other +docker/ scripts (check_milvus.py, milvus_demo.py, milvus_admin.py) run +automatically. Run this on its own when you just want the stack up (e.g. from +a shortcut) without running a Milvus-touching script. + +Usage (PowerShell): + python embeddings/docker/ensure_docker.py +""" +import os +import sys + +_HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.dirname(_HERE)) # embeddings/ root -> import poem_core + +from poem_core.docker_preflight import ensure_milvus_ready + +if __name__ == "__main__": + sys.exit(0 if ensure_milvus_ready() else 1) diff --git a/embeddings/docker/entrypoint.sh b/embeddings/docker/entrypoint.sh deleted file mode 100644 index a6c93c46..00000000 --- a/embeddings/docker/entrypoint.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -set -e - -CMD="${1:-pipeline}" -shift || true - -case "$CMD" in - templates) - python generate_text_templates.py - ;; - sample) - python sample_embeddings.py - ;; - embed) - python generate_embeddings.py - ;; - search) - python search_similarity.py "$@" - ;; - test) - python -m pytest test_search_similarity.py -v - ;; - pipeline) - echo "=== Step 1: Generating text templates ===" - python generate_text_templates.py - echo "" - echo "=== Step 2: Generating embeddings ===" - python generate_embeddings.py - echo "" - echo "Pipeline complete. Use 'search' command to query the embeddings." - ;; - *) - echo "Unknown command: $CMD" - echo "Usage: entrypoint.sh [args]" - echo "" - echo "Commands:" - echo " pipeline Run templates then embed (default)" - echo " templates Generate text templates from RDF graph" - echo " sample Verify the embedding endpoint is reachable" - echo " embed Generate and save embeddings as .npy files" - echo " search Search embeddings (pass query as argument)" - echo " test Run the test suite" - exit 1 - ;; -esac diff --git a/embeddings/docker/mcp-compose.yml b/embeddings/docker/mcp-compose.yml new file mode 100644 index 00000000..c6e79e47 --- /dev/null +++ b/embeddings/docker/mcp-compose.yml @@ -0,0 +1,46 @@ +# The MCP server as a container, wired to the local Milvus stack. Meant to be +# merged with milvus-compose.yml via multiple -f flags -- this file alone will +# fail to validate, since `depends_on.standalone` only resolves once Compose +# merges both files into one project graph: +# +# docker compose -f embeddings/docker/milvus-compose.yml \ +# -f embeddings/docker/mcp-compose.yml up -d --build +# +# Stop: docker compose -f embeddings/docker/milvus-compose.yml -f embeddings/docker/mcp-compose.yml down +# +# The POEM RDF graph lives one level above embeddings/ and can't be baked into +# the image (see MCP/Dockerfile) -- the repo root (../.. relative to this +# file, i.e. embeddings/docker/../..) is bind-mounted read-only instead, and +# POEM_PROJECT_ROOT points the graph loader at that mount. See MCP.md +# "Container deployment" for the full rationale. +# +# No network/VPN to the RPI embedding server from inside a container? Override +# EMBED_BASE_URL / EMBED_MODEL below to point at any other OpenAI-compatible +# endpoint (get_statements needs no network at all either way). +services: + mcp: + build: + context: .. + dockerfile: MCP/Dockerfile + image: poem-mcp:latest + container_name: poem-mcp + restart: unless-stopped + environment: + MCP_TRANSPORT: http + MCP_HOST: 0.0.0.0 + MCP_PORT: "8100" + VECTOR_BACKEND: milvus + MILVUS_URI: http://milvus-standalone:19530 + MILVUS_SKIP_ENSURE: "1" + POEM_PROJECT_ROOT: /data/repo + # Off the RPI network? Uncomment and point at a reachable embedder: + # EMBED_BASE_URL: http://host.docker.internal:1234/v1 + # EMBED_MODEL: nomic-embed-text + volumes: + - ../..:/data/repo:ro + ports: + - "8100:8100" + depends_on: + standalone: + condition: service_healthy + # HEALTHCHECK is inherited from the image (MCP/Dockerfile); no override needed. diff --git a/embeddings/docker/milvus-compose.yml b/embeddings/docker/milvus-compose.yml new file mode 100644 index 00000000..75acb895 --- /dev/null +++ b/embeddings/docker/milvus-compose.yml @@ -0,0 +1,87 @@ +# Milvus Standalone — external vector engine for POEM search (separate process). +# +# Brings up Milvus 2.4 Standalone (etcd + minio + standalone) listening on +# localhost:19530, which is what VECTOR_BACKEND=milvus / MILVUS_URI targets by +# default. Works on Windows/macOS/Linux (unlike embedded Milvus Lite). +# +# Start: docker compose -f embeddings/docker/milvus-compose.yml up -d +# Health: docker compose -f embeddings/docker/milvus-compose.yml ps +# Stop: docker compose -f embeddings/docker/milvus-compose.yml down +# Wipe: docker compose -f embeddings/docker/milvus-compose.yml down -v +# +# Data persists in ./volumes (next to this file) via the bind mounts below. The +# POEM collections are (re)built into memory from the canonical .npy vectors at +# server startup, so this on-disk state is rebuildable — "in memory first". +# +# All three services use `restart: unless-stopped` so that once the Docker +# daemon comes up (including after a reboot, if Docker Desktop is set to start +# at sign-in — see MILVUS.md §10), the stack restarts itself without needing a +# manual `up -d`. `poem_core/docker_preflight.py` (invoked automatically from +# vector_store.get_store() and the docker/ scripts) covers the remaining case +# where Docker Desktop itself isn't running yet. +services: + etcd: + container_name: milvus-etcd + image: quay.io/coreos/etcd:v3.5.5 + restart: unless-stopped + environment: + - ETCD_AUTO_COMPACTION_MODE=revision + - ETCD_AUTO_COMPACTION_RETENTION=1000 + - ETCD_QUOTA_BACKEND_BYTES=4294967296 + - ETCD_SNAPSHOT_COUNT=50000 + volumes: + - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd + command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd + healthcheck: + test: ["CMD", "etcdctl", "endpoint", "health"] + interval: 30s + timeout: 20s + retries: 3 + + minio: + container_name: milvus-minio + image: minio/minio:RELEASE.2023-03-20T20-16-18Z + restart: unless-stopped + environment: + MINIO_ACCESS_KEY: minioadmin + MINIO_SECRET_KEY: minioadmin + ports: + - "9001:9001" + - "9000:9000" + volumes: + - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data + command: minio server /minio_data --console-address ":9001" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + + standalone: + container_name: milvus-standalone + image: milvusdb/milvus:v2.4.13 + command: ["milvus", "run", "standalone"] + restart: unless-stopped + security_opt: + - seccomp:unconfined + environment: + ETCD_ENDPOINTS: etcd:2379 + MINIO_ADDRESS: minio:9000 + volumes: + - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"] + interval: 30s + start_period: 90s + timeout: 20s + retries: 3 + ports: + - "19530:19530" # gRPC / SDK endpoint (MILVUS_URI) + - "9091:9091" # health/metrics + depends_on: + - "etcd" + - "minio" + +networks: + default: + name: milvus diff --git a/embeddings/docker/milvus_admin.py b/embeddings/docker/milvus_admin.py new file mode 100644 index 00000000..fd1467df --- /dev/null +++ b/embeddings/docker/milvus_admin.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +"""Manage the POEM Milvus collections on any account (local Standalone or Zilliz Cloud). + +One tool for the three account operations: + * upload everything to a NEW account, + * update an account after the .npy corpus changes, + * switch which account you target. + +Subcommands +----------- + status Show the target's collections + row counts vs the local corpus, plus a + local corpus fingerprint. Read-only. + push (Re)build ALL metric collections on the target from the local .npy corpus + (drop + recreate + insert). Idempotent. Use this to populate a new account + or to refresh one after re-running generate_embeddings.py. + drop Drop the POEM collections on the target (cleanup / reset). + +Target account +-------------- +Selected by ``MILVUS_URI`` / ``MILVUS_TOKEN`` (env), overridable per-run with +``--uri`` / ``--token``. On a TLS-intercepting network also set +``GRPC_DEFAULT_SSL_ROOTS_FILE_PATH`` (see MILVUS.md §11). + +Examples (PowerShell) +--------------------- + # Check the current account (env): + python embeddings/docker/milvus_admin.py status + + # Upload the whole corpus to a NEW account: + python embeddings/docker/milvus_admin.py push ` + --uri https://B-cluster.zillizcloud.com:19540 --token "db_admin:****" + + # After editing data + re-running generate_embeddings.py, refresh the current account: + python embeddings/docker/milvus_admin.py push +""" +from __future__ import annotations + +import argparse +import hashlib +import os +import sys + +_HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.dirname(_HERE)) # embeddings/ root -> import poem_core +os.environ.setdefault("VECTOR_BACKEND", "milvus") + +from poem_core import config +from poem_core.corpus import load_embeddings, discover_sections, read_manifest +from poem_core.docker_preflight import ensure_milvus_ready, is_local_uri +from poem_core.metrics import MILVUS_METRIC_TYPE +from poem_core.vector_store import MilvusVectorStore +from pymilvus import MilvusClient + +# The three natively-indexed metrics (Manhattan/L1 has no Milvus collection). +METRIC_NAMES = ["Cosine Similarity", "Dot Product", "Euclidean (L2)"] + + +def _apply_target(args) -> None: + """Let --uri/--token override the environment for this run.""" + if args.uri: + os.environ["MILVUS_URI"] = args.uri + if args.token is not None: + os.environ["MILVUS_TOKEN"] = args.token + if is_local_uri(config.milvus_uri()): + ensure_milvus_ready() + + +def _client() -> MilvusClient: + tok = config.milvus_token() + return MilvusClient(uri=config.milvus_uri(), token=tok) if tok else MilvusClient(uri=config.milvus_uri()) + + +def _metric_collections() -> dict[str, str]: + base = config.milvus_collection() + return {m: f"{base}_{MILVUS_METRIC_TYPE[m].lower()}" for m in METRIC_NAMES} + + +def corpus_fingerprint() -> str: + """Stable short hash of the local corpus (over the content-hash manifests), so you + can tell whether the data changed since a collection was last built.""" + h = hashlib.sha256() + for section in discover_sections(): + for entry in read_manifest(os.path.join(config.EMBEDDINGS_DIR, section)): + h.update(entry.get("hash", "").encode()) + return h.hexdigest()[:16] + + +def _count(c: MilvusClient, name: str) -> int: + c.load_collection(name) + res = c.query(collection_name=name, filter="id >= 0", output_fields=["count(*)"]) + return int(res[0]["count(*)"]) if res else 0 + + +def cmd_status(args) -> int: + _apply_target(args) + emb, texts, secs = load_embeddings() + print(f"target: {config.milvus_uri()} (token: {'set' if config.milvus_token() else 'none'})") + print(f"local corpus: {len(texts)} vectors, dim {emb.shape[1]}, fingerprint {corpus_fingerprint()}") + c = _client() + all_ok = True + for name in _metric_collections().values(): + if not c.has_collection(name): + print(f" {name:16s} MISSING") + all_ok = False + continue + n = _count(c, name) + ok = n == len(texts) + all_ok &= ok + print(f" {name:16s} count={n} {'OK' if ok else f'OUT-OF-SYNC (want {len(texts)})'}") + print("STATUS:", "in sync" if all_ok else "needs `push`") + return 0 if all_ok else 1 + + +def cmd_push(args) -> int: + _apply_target(args) + emb, texts, secs = load_embeddings() + print(f"pushing {len(texts)} vectors x {len(METRIC_NAMES)} metric collections " + f"-> {config.milvus_uri()} ...") + # rebuild=True forces drop+recreate+insert. __init__ rebuilds the Cosine + # collection; touching the other metrics rebuilds theirs. + store = MilvusVectorStore(emb, texts, secs, rebuild=True) + for metric in METRIC_NAMES[1:]: + store.top_candidates(emb[0], metric, None, k=1) + print("done. verify with: milvus_admin.py status") + return 0 + + +def cmd_drop(args) -> int: + _apply_target(args) + c = _client() + for name in _metric_collections().values(): + if c.has_collection(name): + c.drop_collection(name) + print(f" dropped {name}") + else: + print(f" {name} (absent)") + return 0 + + +def main() -> int: + parent = argparse.ArgumentParser(add_help=False) + parent.add_argument("--uri", help="Milvus URI (overrides MILVUS_URI for this run).") + parent.add_argument("--token", help="Milvus token (overrides MILVUS_TOKEN for this run).") + + p = argparse.ArgumentParser(description="Manage POEM Milvus collections on any account.") + sub = p.add_subparsers(dest="cmd", required=True) + sub.add_parser("status", parents=[parent], help="show target vs local corpus").set_defaults(func=cmd_status) + sub.add_parser("push", parents=[parent], help="(re)build all collections from .npy").set_defaults(func=cmd_push) + sub.add_parser("drop", parents=[parent], help="drop the POEM collections").set_defaults(func=cmd_drop) + + args = p.parse_args() + return args.func(args) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/embeddings/docker/milvus_demo.py b/embeddings/docker/milvus_demo.py new file mode 100644 index 00000000..136f33a3 --- /dev/null +++ b/embeddings/docker/milvus_demo.py @@ -0,0 +1,160 @@ +"""Simple local Milvus demo using POEM's real embeddings. + +Self-contained so it can be run against a local Milvus Standalone container +started with: + + docker compose -f embeddings/docker/milvus-compose.yml up -d + +It demonstrates, using the real qwen3-embedding vectors generated by +Pipeline/generate_embeddings.py (not random placeholder data): +- connecting to a local Milvus server +- creating a fresh collection every run (dim derived from the loaded vectors) +- loading a handful of real .npy embeddings + their source text +- inserting them and running a cosine similarity search +- printing exactly what was loaded, created, and found +""" +from __future__ import annotations + +import argparse +import json +import os +import sys +from typing import Any + +import numpy as np + +try: + from pymilvus import DataType, MilvusClient +except ImportError as exc: # pragma: no cover - import-time guard + raise SystemExit( + "pymilvus is required. Install it with `pip install pymilvus` or `pip install -e embeddings[milvus]`." + ) from exc + +_HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.dirname(_HERE)) # embeddings/ root -> import poem_core +from poem_core.docker_preflight import ensure_milvus_ready, is_local_uri + +_EMBEDDINGS_DIR = os.path.join(os.path.dirname(_HERE), "Pipeline") + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Run a simple local Milvus demo over real POEM embeddings") + parser.add_argument("--uri", default=os.environ.get("MILVUS_URI", "http://localhost:19530"), help="Milvus endpoint") + parser.add_argument("--token", default=os.environ.get("MILVUS_TOKEN", ""), help="Milvus token if required") + parser.add_argument("--collection", default=os.environ.get("MILVUS_COLLECTION", "poem_npy_demo"), help="Collection name") + parser.add_argument("--section", default="instruments", choices=["instruments", "scales", "collections"], + help="Which Pipeline/
folder to sample real embeddings from") + parser.add_argument("--n", type=int, default=5, help="How many .npy embeddings to load") + return parser.parse_args() + + +def make_client(uri: str, token: str) -> MilvusClient: + return MilvusClient(uri=uri, token=token) if token else MilvusClient(uri=uri) + + +def load_sample_rows(section: str, n: int) -> list[dict[str, Any]]: + """Load the first N real embeddings for a corpus section (manifest-ordered). + + Mirrors the manifest-preferred path in poem_core/corpus.py's + load_embeddings, capped to n files instead of the full ~778-vector corpus, + so this demo only ever touches n .npy files on disk. + """ + section_dir = os.path.join(_EMBEDDINGS_DIR, section) + with open(os.path.join(section_dir, "manifest.json"), encoding="utf-8") as f: + manifest = json.load(f)[:n] + texts = np.load(os.path.join(section_dir, "texts.npy"), allow_pickle=True) + + rows = [] + for i, entry in enumerate(manifest): + vector = np.load(os.path.join(section_dir, entry["file"])).astype(np.float32) + rows.append( + { + "id": i, + "vector": vector, + "text": str(texts[i]), + "file": entry["file"], + "section": section, + } + ) + return rows + + +def create_collection(client: MilvusClient, collection_name: str, dim: int) -> None: + if client.has_collection(collection_name): + client.drop_collection(collection_name) + + schema = client.create_schema(auto_id=False, enable_dynamic_field=True) + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("vector", DataType.FLOAT_VECTOR, dim=dim) + schema.add_field("text", DataType.VARCHAR, max_length=2000) + schema.add_field("file", DataType.VARCHAR, max_length=200) + schema.add_field("section", DataType.VARCHAR, max_length=50) + + index_params = client.prepare_index_params() + index_params.add_index(field_name="vector", index_type="FLAT", metric_type="COSINE") + client.create_collection(collection_name=collection_name, schema=schema, index_params=index_params) + + +def preview(text: str, width: int = 70) -> str: + text = text.replace("\n", " ").strip() + return text if len(text) <= width else text[: width - 1] + "..." + + +def run_demo(uri: str, token: str, collection_name: str, section: str, n: int) -> None: + if is_local_uri(uri): + ensure_milvus_ready() + client = make_client(uri, token) + + try: + client.list_collections() + except Exception as exc: # pragma: no cover - depends on local Docker availability + raise SystemExit(f"Unable to reach Milvus at {uri}: {exc}\nStart it with: docker compose -f embeddings/docker/milvus-compose.yml up -d") from exc + + rows = load_sample_rows(section, n) + dim = len(rows[0]["vector"]) + + print(f"Loaded {len(rows)} real embeddings from Pipeline/{section}/ (qwen3-embedding, {dim}-dim,") + print("generated by Pipeline/generate_embeddings.py -- not random placeholder data):") + for row in rows: + print(f" [{row['id']}] {row['file']:35s} {preview(row['text'])}") + + create_collection(client, collection_name, dim) + print(f"\nFresh collection '{collection_name}' created (dropped any prior instance):") + print(f" fields: id(INT64,pk) | vector(FLOAT_VECTOR,dim={dim}) | text(VARCHAR) | file(VARCHAR) | section(VARCHAR)") + print(" index: FLAT / metric_type=COSINE") + + insert_rows = [{"id": r["id"], "vector": r["vector"].tolist(), "text": r["text"], "file": r["file"], "section": r["section"]} for r in rows] + client.insert(collection_name, insert_rows) + client.load_collection(collection_name) + print(f"\nInserted {len(rows)} rows and loaded the collection into memory.") + + query_row = rows[0] + search_results = client.search( + collection_name=collection_name, + data=[query_row["vector"].tolist()], + limit=len(rows), + output_fields=["text", "file", "section"], + search_params={"metric_type": "COSINE"}, + # "Strong" forces this search to see the rows just inserted/loaded above, + # instead of Milvus's default bounded-staleness read. + consistency_level="Strong", + ) + + print(f"\nCosine similarity search (query = row 0: {query_row['file']}):") + for rank, hit in enumerate(search_results[0], start=1): + entity = hit.get("entity", {}) + print(f" rank {rank} score={hit['distance']:.4f} file={entity.get('file'):35s} {preview(entity.get('text', ''))}") + + print( + "\nThese vectors are the same qwen3-embedding vectors your pipeline generates " + "(see poem_core/embedding_client.py + Pipeline/generate_embeddings.py) -- not random data." + ) + print( + "To search the full corpus instead of this 5-file sample, see " + "Pipeline/search_similarity.py, docker/milvus_admin.py (push), and docker/check_milvus.py (verify)." + ) + + +if __name__ == "__main__": + args = parse_args() + run_demo(args.uri, args.token, args.collection, args.section, args.n) diff --git a/embeddings/e2e_check.py b/embeddings/e2e_check.py new file mode 100644 index 00000000..d8295651 --- /dev/null +++ b/embeddings/e2e_check.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +"""One-command end-to-end acceptance harness for the POEM stack. + +Runs the *automatable* gates of the whole-process test and prints a checklist for +the interactive ones. Target backend + embedding endpoint come from the environment +(see TESTING.md "End-to-end acceptance test"). Run with the MCP venv python: + + $env:VECTOR_BACKEND="milvus" + $env:MILVUS_URI="https://.zillizcloud.com:19540" + $env:MILVUS_TOKEN="db_admin:****" # or an API key + $env:GRPC_DEFAULT_SSL_ROOTS_FILE_PATH="C:\\path\\win_ca_bundle.pem" # TLS-intercepted nets + o:\\POEM\\embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe o:\\POEM\\embeddings\\e2e_check.py + +Gates: + 1 pytest suites (offline, numpy) [hard] + 2 live Milvus/Zilliz backend (check_milvus.py) [hard, or SKIP if VECTOR_BACKEND!=milvus] + 4 REST surface on the configured backend [hard; /search SKIPPED if embed endpoint down] + 3,5 real-query CLI + LLM agent [manual checklist] +Exit code 0 iff every hard gate that ran passed. +""" +import os +import subprocess +import sys + +ROOT = os.path.dirname(os.path.abspath(__file__)) # embeddings/ +PY = sys.executable +MILVUS = os.environ.get("VECTOR_BACKEND", "").lower() == "milvus" +results: dict[str, object] = {} + + +def hdr(t: str) -> None: + print("\n" + "=" * 70 + f"\n{t}\n" + "=" * 70) + + +# ---- Gate 1: offline suites ------------------------------------------------ +hdr("GATE 1 - offline pytest suites (numpy)") +r = subprocess.run( + [PY, "-m", "pytest", + os.path.join(ROOT, "MCP", "test_mcp.py"), + os.path.join(ROOT, "Pipeline", "test_search_similarity.py"), "-q"], + cwd=ROOT, +) +results["Gate 1 (pytest)"] = (r.returncode == 0) + +# ---- Gate 2: live Milvus/Zilliz backend ------------------------------------ +hdr("GATE 2 - live Milvus/Zilliz backend (check_milvus.py)") +if not MILVUS: + print("SKIP: VECTOR_BACKEND != milvus. Set it + MILVUS_URI/TOKEN to test the live backend.") + results["Gate 2 (milvus)"] = None +else: + r = subprocess.run([PY, os.path.join(ROOT, "docker", "check_milvus.py")], cwd=ROOT) + results["Gate 2 (milvus)"] = (r.returncode == 0) + +# ---- Gate 2.5: docs pointer check ----------------------------------------- +hdr("GATE 2.5 - docs pointer check") +print("Checking that every embeddings/*.md file includes the manual quick-reference...") +r = subprocess.run([PY, os.path.join(ROOT, "check_doc_pointers.py")], cwd=ROOT) +results["Gate 2.5 (docs pointer)"] = (r.returncode == 0) + +# ---- Gate 4: REST surface (in-process TestClient) -------------------------- +hdr("GATE 4 - REST surface on the configured backend") +try: + sys.path.insert(0, os.path.join(ROOT, "API")) + import api_server + from fastapi.testclient import TestClient + + c = TestClient(api_server.app) + health = c.get("/health").json() + backend = health.get("vector_backend") + print(f"/health -> backend={backend}, vectors={health.get('num_vectors')}") + + st = c.get("/statements/RCADS-25-CG-EN") + print(f"/statements/RCADS-25-CG-EN -> {st.status_code}, " + f"n={len(st.json()) if st.status_code == 200 else st.text[:80]}") + + want = "MilvusVectorStore" if MILVUS else "NumpyVectorStore" + ok = (backend == want) and (st.status_code == 200 and len(st.json()) > 0) + if backend != want: + print(f" !! expected backend {want}, got {backend} (silent fallback? check CA bundle / creds)") + + sr = c.get("/search", params={"query": "anxiety in children", "top_k": 3}) + if sr.status_code == 200: + hits = sr.json() + print(f"/search -> 200, {len(hits)} hits, top={hits[0]['id'] if hits else '-'}") + ok = ok and len(hits) > 0 + elif sr.status_code == 503: + print("/search -> 503 SKIP (embedding endpoint unreachable; needs VPN or local qwen3-embedding)") + else: + print(f"/search -> {sr.status_code} {sr.text[:120]}") + ok = False + results["Gate 4 (REST)"] = ok +except Exception as e: + print(f"Gate 4 error: {type(e).__name__}: {e}") + results["Gate 4 (REST)"] = False + +# ---- Gates 3 & 5: manual --------------------------------------------------- +hdr("GATE 3 & 5 - manual (real-query CLI + LLM agent)") +print("Gate 3 (CLI; needs the embedding endpoint):") +print(f' {PY} {os.path.join(ROOT, "Pipeline", "search_similarity.py")} ' + f'"instruments that measure anxiety in children"') +print("\nGate 5 (LLM agent; needs Ollama + api_server):") +print(f' terminal A: {PY} {os.path.join(ROOT, "API", "api_server.py")}') +print(f' terminal B: {PY} {os.path.join(ROOT, "agent", "chat_agent.py")}') +print(' ask: "Which instruments measure anxiety in children? Describe the top one."') +print(" PASS if the model calls search -> get_statements and cites entity ids.") + +# ---- Summary --------------------------------------------------------------- +hdr("SUMMARY") +hard_fail = False +for k, v in results.items(): + tag = "PASS" if v is True else ("SKIP" if v is None else "FAIL") + hard_fail = hard_fail or (v is False) + print(f" {k:22s} {tag}") +print("\nAutomated gates:", "FAIL" if hard_fail else "all green -> now run Gates 3 & 5 manually") +sys.exit(1 if hard_fail else 0) diff --git a/embeddings/generate_embeddings.py b/embeddings/generate_embeddings.py deleted file mode 100644 index 3246c3f9..00000000 --- a/embeddings/generate_embeddings.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 -"""Generate embeddings for all template blocks and store them as numpy files. - -One .npy file is saved per paragraph, organized into section subfolders: - embeddings/instruments/paragraph_0.npy - embeddings/instruments/paragraph_1.npy - ... - embeddings/scales/paragraph_0.npy - ... - embeddings/collections/paragraph_0.npy - ... - -A companion texts.npy is saved in each subfolder to map paragraph indices -back to their source text. - -Install dependencies first: - pip install openai numpy - -Usage: - python embeddings/generate_embeddings.py -""" - -import os -import re - -import numpy as np -from openai import OpenAI - -# --------------------------------------------------------------------------- -# Load and parse templates_official.txt into sections -# --------------------------------------------------------------------------- -_HERE = os.path.dirname(os.path.abspath(__file__)) -TEMPLATES_PATH = os.environ.get("TEMPLATES_PATH", os.path.join(_HERE, "templates_official.txt")) -EMBEDDINGS_DIR = os.environ.get("EMBEDDINGS_DIR", _HERE) - -with open(TEMPLATES_PATH, encoding="utf-8") as f: - raw = f.read() - - -def parse_sections(text: str) -> dict: - """Split the template file into named sections. - - Returns a dict mapping lowercase section name to a list of text blocks, - e.g. {"instruments": [...], "scales": [...], "collections": [...]}. - """ - # Find each === SECTION NAME === header and its position - header_pattern = re.compile(r"=== ([A-Z]+) ===") - headers = list(header_pattern.finditer(text)) - - sections = {} - for i, match in enumerate(headers): - name = match.group(1).lower() - start = match.end() - end = headers[i + 1].start() if i + 1 < len(headers) else len(text) - section_text = text[start:end] - - # Split into blocks and filter empty ones - blocks = [b.strip() for b in re.split(r"\n\n+", section_text)] - blocks = [b for b in blocks if b] - sections[name] = blocks - - return sections - - -sections = parse_sections(raw) -for name, blocks in sections.items(): - print(f"Section '{name}': {len(blocks)} paragraphs") - -# --------------------------------------------------------------------------- -# OpenAI-compatible embeddings client -# --------------------------------------------------------------------------- -_BASE_URL = os.environ.get("EMBED_BASE_URL", "http://idea-llm-02.idea.rpi.edu:1234/v1") -_MODEL = os.environ.get("EMBED_MODEL", "qwen3-embedding:latest") -client = OpenAI(base_url=_BASE_URL, api_key="not-needed") - -BATCH_SIZE = int(os.environ.get("BATCH_SIZE", "50")) - -# --------------------------------------------------------------------------- -# Embed each section and save one .npy per paragraph -# --------------------------------------------------------------------------- -for section_name, texts in sections.items(): - out_dir = os.path.join(EMBEDDINGS_DIR, section_name) - os.makedirs(out_dir, exist_ok=True) - - # Save texts index so paragraph_N.npy can be mapped back to source text - np.save(os.path.join(out_dir, "texts.npy"), np.array(texts, dtype=object)) - print(f"\n[{section_name}] Saved texts index ({len(texts)} entries)") - - idx = 0 - for i in range(0, len(texts), BATCH_SIZE): - batch = texts[i:i + BATCH_SIZE] - print(f" Embedding batch {i // BATCH_SIZE + 1} ({len(batch)} texts)...") - - response = client.embeddings.create( - model=_MODEL, - input=batch - ) - - for emb in response.data: - vec = np.array(emb.embedding, dtype=np.float32) - out_path = os.path.join(out_dir, f"paragraph_{idx}.npy") - np.save(out_path, vec) - idx += 1 - - print(f" Saved {idx} paragraph files to {out_dir}/") - -print("\nDone! To verify:") -print(" python -c \"import numpy as np; v = np.load('embeddings/instruments/paragraph_0.npy'); print(v.shape)\"") diff --git a/embeddings/generate_text_templates.py b/embeddings/generate_text_templates.py deleted file mode 100644 index 398f8844..00000000 --- a/embeddings/generate_text_templates.py +++ /dev/null @@ -1,346 +0,0 @@ -#!/usr/bin/env python3 -"""Generate text templates for instruments, scales, and collections. - -Output format: - RCADS-25-Y-EN. Attributes include: - - instance of: Psychometric Questionnaire - - has member: I don't feel happy anymore - - has attribute: Youth - - has attribute: Social Phobia (9.1) - -Usage: - python scripts/generate_text_templates.py - python scripts/generate_text_templates.py --output templates.txt -""" - -import os -import re -import sys -import argparse -import glob -from collections import defaultdict - -PROJECT_ROOT = os.environ.get( - "POEM_PROJECT_ROOT", - os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -) -sys.path.insert(0, PROJECT_ROOT) - -from rdflib import Graph - - -def readable_local_name(uri: str) -> str: - """Derive a human-readable label from a URI when no rdfs:label exists. - - Extracts everything after the last / or #, then: - - Splits camelCase into words (PsychometricQuestionnaire -> Psychometric Questionnaire) - - Replaces underscores with spaces - """ - local = uri.split("#")[-1] if "#" in uri else uri.rstrip("/").split("/")[-1] - local = re.sub(r"([a-z])([A-Z])", r"\1 \2", local) # camelCase split - local = re.sub(r"([A-Z]+)([A-Z][a-z])", r"\1 \2", local) # e.g. SIOCode -> SIO Code - local = local.replace("_", " ") - return local.strip() - - -def load_graph() -> Graph: - """Load all relevant TTL files into a single rdflib graph.""" - g = Graph() - - # 1. Main data file (all individuals consolidated) - full_path = os.path.join(PROJECT_ROOT, "individualsFull.ttl") - if os.path.exists(full_path): - print(f" Loading {os.path.basename(full_path)}...") - g.parse(full_path, format="turtle") - - # 2. All TTL files whose name contains "collection", "instrument", or "scale" - # — covers both individuals/ and poem-demo/dist/data/ variants. - # Excludes rcads/rml-* which are mapping files, not data. - KEYWORDS = ("collection", "instrument", "scale") - for ttl_file in glob.glob(os.path.join(PROJECT_ROOT, "**", "*.ttl"), recursive=True): - basename = os.path.basename(ttl_file).lower() - in_rcads = os.sep + "rcads" + os.sep in ttl_file - if any(kw in basename for kw in KEYWORDS) and not in_rcads: - rel = os.path.relpath(ttl_file, PROJECT_ROOT) - print(f" Loading {rel}...") - try: - g.parse(ttl_file, format="turtle") - except Exception as e: - print(f" Warning: could not load {rel}: {e}") - - # 3. Ontology files (OWL, PROV, RDF Schema) - ontology_dir = os.path.join(PROJECT_ROOT, "ontology") - for ttl_file in glob.glob(os.path.join(ontology_dir, "*.ttl")): - print(f" Loading ontology/{os.path.basename(ttl_file)}...") - try: - g.parse(ttl_file, format="turtle") - except Exception as e: - print(f" Warning: could not load {ttl_file}: {e}") - - # 4. Main POEM ontology schema (class definitions) - poem_rdf = os.path.join(PROJECT_ROOT, "POEM.rdf") - if os.path.exists(poem_rdf): - print(f" Loading POEM.rdf...") - try: - g.parse(poem_rdf, format="xml") - except Exception as e: - print(f" Warning: could not load POEM.rdf: {e}") - - print(f" Total triples: {len(g)}\n") - return g - - -# --------------------------------------------------------------------------- -# SPARQL queries — each uses OPTIONAL for labels so missing labels don't -# drop the row; Python falls back to readable_local_name() for any None values -# --------------------------------------------------------------------------- - -INSTRUMENT_QUERY = """ -PREFIX sio: -PREFIX rdf: -PREFIX rdfs: -PREFIX fhir: -PREFIX dc: -PREFIX poem: -PREFIX vstoi: - -SELECT ?instrument ?code ?predicate ?objectURI ?objectLabel -WHERE { - ?instrument a poem:PsychometricQuestionnaire . - ?instrument fhir:code ?code . - - { - # instance of — OPTIONAL label, fall back to localname in Python - ?instrument rdf:type ?objectURI . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("instance of" AS ?predicate) - } - UNION - { - # has member — item -> English stem -> label - ?instrument sio:SIO_000059 ?item . - ?item sio:SIO_000253 ?stem . - ?stem dc:language . - ?stem rdfs:label ?objectLabel . - BIND(?stem AS ?objectURI) - BIND("has member" AS ?predicate) - } - UNION - { - # has attribute — informant (Youth, Caregiver, etc.) - ?instrument sio:SIO_000008 ?objectURI . - ?objectURI a vstoi:Informant . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("has attribute" AS ?predicate) - } - UNION - { - # has attribute — scales (from scalesInstrument.ttl) - ?instrument sio:SIO_000008 ?objectURI . - ?objectURI a poem:QuestionnaireScale . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("has attribute" AS ?predicate) - } -} -ORDER BY ?code ?predicate ?objectLabel -""" - -SCALE_QUERY = """ -PREFIX sio: -PREFIX rdf: -PREFIX rdfs: -PREFIX skos: -PREFIX poem: - -SELECT ?scale ?scaleLabel ?predicate ?objectURI ?objectLabel -WHERE { - ?scale a poem:QuestionnaireScale . - OPTIONAL { ?scale rdfs:label ?scaleLabel } - - { - # instance of - ?scale rdf:type ?objectURI . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("instance of" AS ?predicate) - } - UNION - { - # has member — item stem concepts - ?scale sio:SIO_000059 ?objectURI . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("has member" AS ?predicate) - } - UNION - { - # has attribute — notation (SP, PD, GAD, etc.) - ?scale skos:notation ?objectLabel . - BIND(?scale AS ?objectURI) - BIND("has attribute (notation)" AS ?predicate) - } -} -ORDER BY ?scaleLabel ?predicate ?objectLabel -""" - -COLLECTION_QUERY = """ -PREFIX sio: -PREFIX resource: -PREFIX rdf: -PREFIX rdfs: -PREFIX fhir: -PREFIX poem: - -SELECT ?collection ?collectionLabel ?predicate ?objectURI ?objectLabel -WHERE { - ?collection a poem:InstrumentCollection . - OPTIONAL { ?collection rdfs:label ?collectionLabel } - - { - # instance of - ?collection rdf:type ?objectURI . - OPTIONAL { ?objectURI rdfs:label ?objectLabel } - BIND("instance of" AS ?predicate) - } - UNION - { - # has member — instruments in this collection - ?collection resource:hasMember ?objectURI . - OPTIONAL { ?objectURI fhir:code ?objectLabel } - BIND("has member" AS ?predicate) - } -} -ORDER BY ?collection ?predicate ?objectLabel -""" - - -def resolve_label(label, uri) -> str: - """Return label if present, otherwise derive readable name from URI.""" - if label is not None: - return str(label) - if uri is not None: - return readable_local_name(str(uri)) - return "(unknown)" - - -def format_template(identifier: str, data: dict) -> str: - """Format one node's attribute data — one block per has member item.""" - header_preds = ["instance of"] - attr_preds = ["has attribute", "has attribute (notation)"] - - header_lines = [] - for pred in header_preds: - for value in sorted(set(data.get(pred, []))): - header_lines.append(f" - {pred}: {value}") - - attr_lines = [] - for pred in attr_preds: - for value in sorted(set(data.get(pred, []))): - attr_lines.append(f" - {pred}: {value}") - - # Any remaining predicates not in the known sets - known = set(header_preds + ["has member"] + attr_preds) - for pred, values in data.items(): - if pred not in known: - for value in sorted(set(values)): - attr_lines.append(f" - {pred}: {value}") - - members = sorted(set(data.get("has member", []))) - - if not members: - lines = [f"{identifier}. Attributes include:"] + header_lines + attr_lines - return "\n".join(lines) - - blocks = [] - for member in members: - lines = ( - [f"{identifier}. Attributes include:"] - + header_lines - + [f" - has member: {member}"] - + attr_lines - ) - blocks.append("\n".join(lines)) - return "\n\n".join(blocks) - - -def run_instruments(g: Graph) -> list: - results = g.query(INSTRUMENT_QUERY) - nodes = defaultdict(lambda: defaultdict(list)) - for row in results: - code = str(row.code) - pred = str(row.predicate) - val = resolve_label(row.objectLabel, row.objectURI) - nodes[code][pred].append(val) - return [format_template(code, data) for code, data in sorted(nodes.items())] - - -def run_scales(g: Graph) -> list: - results = g.query(SCALE_QUERY) - nodes = defaultdict(lambda: defaultdict(list)) - identifiers = {} - for row in results: - uri = str(row.scale) - label = resolve_label(row.scaleLabel, row.scale) - identifiers[uri] = label - pred = str(row.predicate) - val = resolve_label(row.objectLabel, row.objectURI) - nodes[uri][pred].append(val) - return [format_template(identifiers[uri], data) for uri, data in sorted(nodes.items())] - - -def run_collections(g: Graph) -> list: - results = g.query(COLLECTION_QUERY) - nodes = defaultdict(lambda: defaultdict(list)) - identifiers = {} - for row in results: - uri = str(row.collection) - label = resolve_label(row.collectionLabel, row.collection) - identifiers[uri] = label - pred = str(row.predicate) - val = resolve_label(row.objectLabel, row.objectURI) - nodes[uri][pred].append(val) - return [format_template(identifiers[uri], data) for uri, data in sorted(nodes.items())] - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--output", default=os.environ.get("TEMPLATES_OUTPUT", os.path.join(os.path.dirname(os.path.abspath(__file__)), "templates.txt")), - help="File to write templates to (default: embeddings/templates.txt)") - parser.add_argument("--only", choices=["instruments", "scales", "collections"], - default=None, help="Generate templates for one node type only") - args = parser.parse_args() - - print("Loading graph...") - g = load_graph() - - sections = [] - - if args.only in (None, "instruments"): - print("Generating instrument templates...") - instrument_templates = run_instruments(g) - print(f" {len(instrument_templates)} instruments") - sections.append("=== INSTRUMENTS ===\n\n" + "\n\n".join(instrument_templates)) - - if args.only in (None, "scales"): - print("Generating scale templates...") - scale_templates = run_scales(g) - print(f" {len(scale_templates)} scales") - sections.append("=== SCALES ===\n\n" + "\n\n".join(scale_templates)) - - if args.only in (None, "collections"): - print("Generating collection templates...") - collection_templates = run_collections(g) - print(f" {len(collection_templates)} collections") - sections.append("=== COLLECTIONS ===\n\n" + "\n\n".join(collection_templates)) - - output = "\n\n\n".join(sections) - - if args.output: - with open(args.output, "w", encoding="utf-8") as f: - f.write(output) - print(f"\nWritten to {args.output}") - else: - print() - print(output) - - -if __name__ == "__main__": - main() diff --git a/embeddings/instruments/paragraph_0.npy b/embeddings/instruments/paragraph_0.npy deleted file mode 100644 index d76629f9..00000000 Binary files a/embeddings/instruments/paragraph_0.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_1.npy b/embeddings/instruments/paragraph_1.npy deleted file mode 100644 index 5c3f095e..00000000 Binary files a/embeddings/instruments/paragraph_1.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_10.npy b/embeddings/instruments/paragraph_10.npy deleted file mode 100644 index 5ea1cfee..00000000 Binary files a/embeddings/instruments/paragraph_10.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_100.npy b/embeddings/instruments/paragraph_100.npy deleted file mode 100644 index f3f4310e..00000000 Binary files a/embeddings/instruments/paragraph_100.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_101.npy b/embeddings/instruments/paragraph_101.npy deleted file mode 100644 index 7887e1ec..00000000 Binary files a/embeddings/instruments/paragraph_101.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_102.npy b/embeddings/instruments/paragraph_102.npy deleted file mode 100644 index 450cee8a..00000000 Binary files a/embeddings/instruments/paragraph_102.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_103.npy b/embeddings/instruments/paragraph_103.npy deleted file mode 100644 index 1e9b3645..00000000 Binary files a/embeddings/instruments/paragraph_103.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_104.npy b/embeddings/instruments/paragraph_104.npy deleted file mode 100644 index a464ba6e..00000000 Binary files a/embeddings/instruments/paragraph_104.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_105.npy b/embeddings/instruments/paragraph_105.npy deleted file mode 100644 index 8ec7552a..00000000 Binary files a/embeddings/instruments/paragraph_105.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_106.npy b/embeddings/instruments/paragraph_106.npy deleted file mode 100644 index 6d87a397..00000000 Binary files a/embeddings/instruments/paragraph_106.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_107.npy b/embeddings/instruments/paragraph_107.npy deleted file mode 100644 index 32e9e57e..00000000 Binary files a/embeddings/instruments/paragraph_107.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_108.npy b/embeddings/instruments/paragraph_108.npy deleted file mode 100644 index 11797963..00000000 Binary files a/embeddings/instruments/paragraph_108.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_109.npy b/embeddings/instruments/paragraph_109.npy deleted file mode 100644 index b4d85cb3..00000000 Binary files a/embeddings/instruments/paragraph_109.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_11.npy b/embeddings/instruments/paragraph_11.npy deleted file mode 100644 index 8d1dbf22..00000000 Binary files a/embeddings/instruments/paragraph_11.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_110.npy b/embeddings/instruments/paragraph_110.npy deleted file mode 100644 index a502bc5c..00000000 Binary files a/embeddings/instruments/paragraph_110.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_111.npy b/embeddings/instruments/paragraph_111.npy deleted file mode 100644 index 4949d943..00000000 Binary files a/embeddings/instruments/paragraph_111.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_112.npy b/embeddings/instruments/paragraph_112.npy deleted file mode 100644 index 84278f46..00000000 Binary files a/embeddings/instruments/paragraph_112.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_113.npy b/embeddings/instruments/paragraph_113.npy deleted file mode 100644 index 0d005295..00000000 Binary files a/embeddings/instruments/paragraph_113.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_114.npy b/embeddings/instruments/paragraph_114.npy deleted file mode 100644 index 90d0b08f..00000000 Binary files a/embeddings/instruments/paragraph_114.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_115.npy b/embeddings/instruments/paragraph_115.npy deleted file mode 100644 index f522cf7f..00000000 Binary files a/embeddings/instruments/paragraph_115.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_116.npy b/embeddings/instruments/paragraph_116.npy deleted file mode 100644 index 9eac1658..00000000 Binary files a/embeddings/instruments/paragraph_116.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_117.npy b/embeddings/instruments/paragraph_117.npy deleted file mode 100644 index c1d5f52f..00000000 Binary files a/embeddings/instruments/paragraph_117.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_118.npy b/embeddings/instruments/paragraph_118.npy deleted file mode 100644 index 6f1e48c8..00000000 Binary files a/embeddings/instruments/paragraph_118.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_119.npy b/embeddings/instruments/paragraph_119.npy deleted file mode 100644 index 2974eee5..00000000 Binary files a/embeddings/instruments/paragraph_119.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_12.npy b/embeddings/instruments/paragraph_12.npy deleted file mode 100644 index cbbdc7a6..00000000 Binary files a/embeddings/instruments/paragraph_12.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_120.npy b/embeddings/instruments/paragraph_120.npy deleted file mode 100644 index 7c9534fd..00000000 Binary files a/embeddings/instruments/paragraph_120.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_121.npy b/embeddings/instruments/paragraph_121.npy deleted file mode 100644 index 587dab07..00000000 Binary files a/embeddings/instruments/paragraph_121.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_122.npy b/embeddings/instruments/paragraph_122.npy deleted file mode 100644 index f2affa62..00000000 Binary files a/embeddings/instruments/paragraph_122.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_123.npy b/embeddings/instruments/paragraph_123.npy deleted file mode 100644 index d8049d75..00000000 Binary files a/embeddings/instruments/paragraph_123.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_124.npy b/embeddings/instruments/paragraph_124.npy deleted file mode 100644 index 3e519a90..00000000 Binary files a/embeddings/instruments/paragraph_124.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_125.npy b/embeddings/instruments/paragraph_125.npy deleted file mode 100644 index d095078b..00000000 Binary files a/embeddings/instruments/paragraph_125.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_126.npy b/embeddings/instruments/paragraph_126.npy deleted file mode 100644 index c4a025c5..00000000 Binary files a/embeddings/instruments/paragraph_126.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_127.npy b/embeddings/instruments/paragraph_127.npy deleted file mode 100644 index 255230c8..00000000 Binary files a/embeddings/instruments/paragraph_127.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_128.npy b/embeddings/instruments/paragraph_128.npy deleted file mode 100644 index 4cee502a..00000000 Binary files a/embeddings/instruments/paragraph_128.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_129.npy b/embeddings/instruments/paragraph_129.npy deleted file mode 100644 index f7309f23..00000000 Binary files a/embeddings/instruments/paragraph_129.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_13.npy b/embeddings/instruments/paragraph_13.npy deleted file mode 100644 index 5f0cf04d..00000000 Binary files a/embeddings/instruments/paragraph_13.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_130.npy b/embeddings/instruments/paragraph_130.npy deleted file mode 100644 index e0ff8f18..00000000 Binary files a/embeddings/instruments/paragraph_130.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_131.npy b/embeddings/instruments/paragraph_131.npy deleted file mode 100644 index e8fcde7e..00000000 Binary files a/embeddings/instruments/paragraph_131.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_132.npy b/embeddings/instruments/paragraph_132.npy deleted file mode 100644 index 95b77746..00000000 Binary files a/embeddings/instruments/paragraph_132.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_133.npy b/embeddings/instruments/paragraph_133.npy deleted file mode 100644 index 5c141571..00000000 Binary files a/embeddings/instruments/paragraph_133.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_134.npy b/embeddings/instruments/paragraph_134.npy deleted file mode 100644 index 00813e40..00000000 Binary files a/embeddings/instruments/paragraph_134.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_135.npy b/embeddings/instruments/paragraph_135.npy deleted file mode 100644 index 13c4e3fe..00000000 Binary files a/embeddings/instruments/paragraph_135.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_136.npy b/embeddings/instruments/paragraph_136.npy deleted file mode 100644 index a39d2b89..00000000 Binary files a/embeddings/instruments/paragraph_136.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_137.npy b/embeddings/instruments/paragraph_137.npy deleted file mode 100644 index ca2716f0..00000000 Binary files a/embeddings/instruments/paragraph_137.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_138.npy b/embeddings/instruments/paragraph_138.npy deleted file mode 100644 index 72c90e94..00000000 Binary files a/embeddings/instruments/paragraph_138.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_139.npy b/embeddings/instruments/paragraph_139.npy deleted file mode 100644 index e529a035..00000000 Binary files a/embeddings/instruments/paragraph_139.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_14.npy b/embeddings/instruments/paragraph_14.npy deleted file mode 100644 index a396cebb..00000000 Binary files a/embeddings/instruments/paragraph_14.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_140.npy b/embeddings/instruments/paragraph_140.npy deleted file mode 100644 index ea280b25..00000000 Binary files a/embeddings/instruments/paragraph_140.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_141.npy b/embeddings/instruments/paragraph_141.npy deleted file mode 100644 index 32ae5486..00000000 Binary files a/embeddings/instruments/paragraph_141.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_142.npy b/embeddings/instruments/paragraph_142.npy deleted file mode 100644 index b0d0de7c..00000000 Binary files a/embeddings/instruments/paragraph_142.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_143.npy b/embeddings/instruments/paragraph_143.npy deleted file mode 100644 index 96dade51..00000000 Binary files a/embeddings/instruments/paragraph_143.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_144.npy b/embeddings/instruments/paragraph_144.npy deleted file mode 100644 index 98e56c2d..00000000 Binary files a/embeddings/instruments/paragraph_144.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_145.npy b/embeddings/instruments/paragraph_145.npy deleted file mode 100644 index e5002d45..00000000 Binary files a/embeddings/instruments/paragraph_145.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_146.npy b/embeddings/instruments/paragraph_146.npy deleted file mode 100644 index 6de69dff..00000000 Binary files a/embeddings/instruments/paragraph_146.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_147.npy b/embeddings/instruments/paragraph_147.npy deleted file mode 100644 index e6aae0bd..00000000 Binary files a/embeddings/instruments/paragraph_147.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_148.npy b/embeddings/instruments/paragraph_148.npy deleted file mode 100644 index 3ed857c5..00000000 Binary files a/embeddings/instruments/paragraph_148.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_149.npy b/embeddings/instruments/paragraph_149.npy deleted file mode 100644 index e64e4306..00000000 Binary files a/embeddings/instruments/paragraph_149.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_15.npy b/embeddings/instruments/paragraph_15.npy deleted file mode 100644 index 8a29377c..00000000 Binary files a/embeddings/instruments/paragraph_15.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_150.npy b/embeddings/instruments/paragraph_150.npy deleted file mode 100644 index 9d3910f4..00000000 Binary files a/embeddings/instruments/paragraph_150.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_151.npy b/embeddings/instruments/paragraph_151.npy deleted file mode 100644 index 06af47a0..00000000 Binary files a/embeddings/instruments/paragraph_151.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_152.npy b/embeddings/instruments/paragraph_152.npy deleted file mode 100644 index 0ed33086..00000000 Binary files a/embeddings/instruments/paragraph_152.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_153.npy b/embeddings/instruments/paragraph_153.npy deleted file mode 100644 index 5151ca33..00000000 Binary files a/embeddings/instruments/paragraph_153.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_154.npy b/embeddings/instruments/paragraph_154.npy deleted file mode 100644 index d4d5cba6..00000000 Binary files a/embeddings/instruments/paragraph_154.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_155.npy b/embeddings/instruments/paragraph_155.npy deleted file mode 100644 index 2af27228..00000000 Binary files a/embeddings/instruments/paragraph_155.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_156.npy b/embeddings/instruments/paragraph_156.npy deleted file mode 100644 index 800ced1a..00000000 Binary files a/embeddings/instruments/paragraph_156.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_157.npy b/embeddings/instruments/paragraph_157.npy deleted file mode 100644 index 54c9e3de..00000000 Binary files a/embeddings/instruments/paragraph_157.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_158.npy b/embeddings/instruments/paragraph_158.npy deleted file mode 100644 index f43b7583..00000000 Binary files a/embeddings/instruments/paragraph_158.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_159.npy b/embeddings/instruments/paragraph_159.npy deleted file mode 100644 index 708b0422..00000000 Binary files a/embeddings/instruments/paragraph_159.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_16.npy b/embeddings/instruments/paragraph_16.npy deleted file mode 100644 index 35ef7736..00000000 Binary files a/embeddings/instruments/paragraph_16.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_160.npy b/embeddings/instruments/paragraph_160.npy deleted file mode 100644 index 3f2c4a71..00000000 Binary files a/embeddings/instruments/paragraph_160.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_161.npy b/embeddings/instruments/paragraph_161.npy deleted file mode 100644 index b60450ac..00000000 Binary files a/embeddings/instruments/paragraph_161.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_162.npy b/embeddings/instruments/paragraph_162.npy deleted file mode 100644 index 069c62bb..00000000 Binary files a/embeddings/instruments/paragraph_162.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_163.npy b/embeddings/instruments/paragraph_163.npy deleted file mode 100644 index ae093288..00000000 Binary files a/embeddings/instruments/paragraph_163.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_164.npy b/embeddings/instruments/paragraph_164.npy deleted file mode 100644 index 5e145a85..00000000 Binary files a/embeddings/instruments/paragraph_164.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_165.npy b/embeddings/instruments/paragraph_165.npy deleted file mode 100644 index 6406189f..00000000 Binary files a/embeddings/instruments/paragraph_165.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_166.npy b/embeddings/instruments/paragraph_166.npy deleted file mode 100644 index 4d584bcd..00000000 Binary files a/embeddings/instruments/paragraph_166.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_167.npy b/embeddings/instruments/paragraph_167.npy deleted file mode 100644 index 06b33d3c..00000000 Binary files a/embeddings/instruments/paragraph_167.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_168.npy b/embeddings/instruments/paragraph_168.npy deleted file mode 100644 index 20b92ddb..00000000 Binary files a/embeddings/instruments/paragraph_168.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_169.npy b/embeddings/instruments/paragraph_169.npy deleted file mode 100644 index 035e328e..00000000 Binary files a/embeddings/instruments/paragraph_169.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_17.npy b/embeddings/instruments/paragraph_17.npy deleted file mode 100644 index f55e0cb8..00000000 Binary files a/embeddings/instruments/paragraph_17.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_170.npy b/embeddings/instruments/paragraph_170.npy deleted file mode 100644 index 16d4f2c9..00000000 Binary files a/embeddings/instruments/paragraph_170.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_171.npy b/embeddings/instruments/paragraph_171.npy deleted file mode 100644 index a2d59c89..00000000 Binary files a/embeddings/instruments/paragraph_171.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_172.npy b/embeddings/instruments/paragraph_172.npy deleted file mode 100644 index b3e0ae1a..00000000 Binary files a/embeddings/instruments/paragraph_172.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_173.npy b/embeddings/instruments/paragraph_173.npy deleted file mode 100644 index 23c1e230..00000000 Binary files a/embeddings/instruments/paragraph_173.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_174.npy b/embeddings/instruments/paragraph_174.npy deleted file mode 100644 index 7042a519..00000000 Binary files a/embeddings/instruments/paragraph_174.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_175.npy b/embeddings/instruments/paragraph_175.npy deleted file mode 100644 index b6173139..00000000 Binary files a/embeddings/instruments/paragraph_175.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_176.npy b/embeddings/instruments/paragraph_176.npy deleted file mode 100644 index 0de7e5a4..00000000 Binary files a/embeddings/instruments/paragraph_176.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_177.npy b/embeddings/instruments/paragraph_177.npy deleted file mode 100644 index 84e3185e..00000000 Binary files a/embeddings/instruments/paragraph_177.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_178.npy b/embeddings/instruments/paragraph_178.npy deleted file mode 100644 index d15b3297..00000000 Binary files a/embeddings/instruments/paragraph_178.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_179.npy b/embeddings/instruments/paragraph_179.npy deleted file mode 100644 index 16bdd29c..00000000 Binary files a/embeddings/instruments/paragraph_179.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_18.npy b/embeddings/instruments/paragraph_18.npy deleted file mode 100644 index 2a535b7c..00000000 Binary files a/embeddings/instruments/paragraph_18.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_180.npy b/embeddings/instruments/paragraph_180.npy deleted file mode 100644 index 6e490995..00000000 Binary files a/embeddings/instruments/paragraph_180.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_181.npy b/embeddings/instruments/paragraph_181.npy deleted file mode 100644 index ec69f1e6..00000000 Binary files a/embeddings/instruments/paragraph_181.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_182.npy b/embeddings/instruments/paragraph_182.npy deleted file mode 100644 index 6abb4aef..00000000 Binary files a/embeddings/instruments/paragraph_182.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_183.npy b/embeddings/instruments/paragraph_183.npy deleted file mode 100644 index 62f81184..00000000 Binary files a/embeddings/instruments/paragraph_183.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_184.npy b/embeddings/instruments/paragraph_184.npy deleted file mode 100644 index 660cfcb5..00000000 Binary files a/embeddings/instruments/paragraph_184.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_185.npy b/embeddings/instruments/paragraph_185.npy deleted file mode 100644 index 2cfe0fec..00000000 Binary files a/embeddings/instruments/paragraph_185.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_186.npy b/embeddings/instruments/paragraph_186.npy deleted file mode 100644 index ebdd4350..00000000 Binary files a/embeddings/instruments/paragraph_186.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_187.npy b/embeddings/instruments/paragraph_187.npy deleted file mode 100644 index c8a7bd6a..00000000 Binary files a/embeddings/instruments/paragraph_187.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_188.npy b/embeddings/instruments/paragraph_188.npy deleted file mode 100644 index 5f5e55f3..00000000 Binary files a/embeddings/instruments/paragraph_188.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_189.npy b/embeddings/instruments/paragraph_189.npy deleted file mode 100644 index a52dc635..00000000 Binary files a/embeddings/instruments/paragraph_189.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_19.npy b/embeddings/instruments/paragraph_19.npy deleted file mode 100644 index 37e530f1..00000000 Binary files a/embeddings/instruments/paragraph_19.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_190.npy b/embeddings/instruments/paragraph_190.npy deleted file mode 100644 index ae705570..00000000 Binary files a/embeddings/instruments/paragraph_190.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_191.npy b/embeddings/instruments/paragraph_191.npy deleted file mode 100644 index 4367a707..00000000 Binary files a/embeddings/instruments/paragraph_191.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_192.npy b/embeddings/instruments/paragraph_192.npy deleted file mode 100644 index 1c9d50bb..00000000 Binary files a/embeddings/instruments/paragraph_192.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_193.npy b/embeddings/instruments/paragraph_193.npy deleted file mode 100644 index b5f9fa1f..00000000 Binary files a/embeddings/instruments/paragraph_193.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_194.npy b/embeddings/instruments/paragraph_194.npy deleted file mode 100644 index c85b77f9..00000000 Binary files a/embeddings/instruments/paragraph_194.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_195.npy b/embeddings/instruments/paragraph_195.npy deleted file mode 100644 index 75d41002..00000000 Binary files a/embeddings/instruments/paragraph_195.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_196.npy b/embeddings/instruments/paragraph_196.npy deleted file mode 100644 index 00dcf9e7..00000000 Binary files a/embeddings/instruments/paragraph_196.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_197.npy b/embeddings/instruments/paragraph_197.npy deleted file mode 100644 index b0dd8046..00000000 Binary files a/embeddings/instruments/paragraph_197.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_198.npy b/embeddings/instruments/paragraph_198.npy deleted file mode 100644 index 41db4241..00000000 Binary files a/embeddings/instruments/paragraph_198.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_199.npy b/embeddings/instruments/paragraph_199.npy deleted file mode 100644 index 3b0429cb..00000000 Binary files a/embeddings/instruments/paragraph_199.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_2.npy b/embeddings/instruments/paragraph_2.npy deleted file mode 100644 index 07722dac..00000000 Binary files a/embeddings/instruments/paragraph_2.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_20.npy b/embeddings/instruments/paragraph_20.npy deleted file mode 100644 index 66b4696c..00000000 Binary files a/embeddings/instruments/paragraph_20.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_200.npy b/embeddings/instruments/paragraph_200.npy deleted file mode 100644 index 5964215d..00000000 Binary files a/embeddings/instruments/paragraph_200.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_201.npy b/embeddings/instruments/paragraph_201.npy deleted file mode 100644 index b252e047..00000000 Binary files a/embeddings/instruments/paragraph_201.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_202.npy b/embeddings/instruments/paragraph_202.npy deleted file mode 100644 index 7d1da4d1..00000000 Binary files a/embeddings/instruments/paragraph_202.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_203.npy b/embeddings/instruments/paragraph_203.npy deleted file mode 100644 index 2fb88f72..00000000 Binary files a/embeddings/instruments/paragraph_203.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_204.npy b/embeddings/instruments/paragraph_204.npy deleted file mode 100644 index 637f9926..00000000 Binary files a/embeddings/instruments/paragraph_204.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_205.npy b/embeddings/instruments/paragraph_205.npy deleted file mode 100644 index 8a49bef5..00000000 Binary files a/embeddings/instruments/paragraph_205.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_206.npy b/embeddings/instruments/paragraph_206.npy deleted file mode 100644 index 10f55caf..00000000 Binary files a/embeddings/instruments/paragraph_206.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_207.npy b/embeddings/instruments/paragraph_207.npy deleted file mode 100644 index 9b0e57d4..00000000 Binary files a/embeddings/instruments/paragraph_207.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_208.npy b/embeddings/instruments/paragraph_208.npy deleted file mode 100644 index 595beeef..00000000 Binary files a/embeddings/instruments/paragraph_208.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_209.npy b/embeddings/instruments/paragraph_209.npy deleted file mode 100644 index 3be3ba82..00000000 Binary files a/embeddings/instruments/paragraph_209.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_21.npy b/embeddings/instruments/paragraph_21.npy deleted file mode 100644 index f32a7f5b..00000000 Binary files a/embeddings/instruments/paragraph_21.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_210.npy b/embeddings/instruments/paragraph_210.npy deleted file mode 100644 index 6e4a32ed..00000000 Binary files a/embeddings/instruments/paragraph_210.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_211.npy b/embeddings/instruments/paragraph_211.npy deleted file mode 100644 index 56bceb04..00000000 Binary files a/embeddings/instruments/paragraph_211.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_212.npy b/embeddings/instruments/paragraph_212.npy deleted file mode 100644 index 2c13d1c3..00000000 Binary files a/embeddings/instruments/paragraph_212.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_213.npy b/embeddings/instruments/paragraph_213.npy deleted file mode 100644 index fabf728e..00000000 Binary files a/embeddings/instruments/paragraph_213.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_214.npy b/embeddings/instruments/paragraph_214.npy deleted file mode 100644 index 2a643882..00000000 Binary files a/embeddings/instruments/paragraph_214.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_215.npy b/embeddings/instruments/paragraph_215.npy deleted file mode 100644 index 237f8f83..00000000 Binary files a/embeddings/instruments/paragraph_215.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_216.npy b/embeddings/instruments/paragraph_216.npy deleted file mode 100644 index 6dd09b8a..00000000 Binary files a/embeddings/instruments/paragraph_216.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_217.npy b/embeddings/instruments/paragraph_217.npy deleted file mode 100644 index dce8af27..00000000 Binary files a/embeddings/instruments/paragraph_217.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_218.npy b/embeddings/instruments/paragraph_218.npy deleted file mode 100644 index 24b86ca3..00000000 Binary files a/embeddings/instruments/paragraph_218.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_219.npy b/embeddings/instruments/paragraph_219.npy deleted file mode 100644 index c8438d6a..00000000 Binary files a/embeddings/instruments/paragraph_219.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_22.npy b/embeddings/instruments/paragraph_22.npy deleted file mode 100644 index d63658fd..00000000 Binary files a/embeddings/instruments/paragraph_22.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_220.npy b/embeddings/instruments/paragraph_220.npy deleted file mode 100644 index 28fa9c2a..00000000 Binary files a/embeddings/instruments/paragraph_220.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_221.npy b/embeddings/instruments/paragraph_221.npy deleted file mode 100644 index e9aaeece..00000000 Binary files a/embeddings/instruments/paragraph_221.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_222.npy b/embeddings/instruments/paragraph_222.npy deleted file mode 100644 index 37f8aeef..00000000 Binary files a/embeddings/instruments/paragraph_222.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_223.npy b/embeddings/instruments/paragraph_223.npy deleted file mode 100644 index 634ef512..00000000 Binary files a/embeddings/instruments/paragraph_223.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_224.npy b/embeddings/instruments/paragraph_224.npy deleted file mode 100644 index a76d043c..00000000 Binary files a/embeddings/instruments/paragraph_224.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_225.npy b/embeddings/instruments/paragraph_225.npy deleted file mode 100644 index fe0e5a31..00000000 Binary files a/embeddings/instruments/paragraph_225.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_226.npy b/embeddings/instruments/paragraph_226.npy deleted file mode 100644 index 879cacce..00000000 Binary files a/embeddings/instruments/paragraph_226.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_227.npy b/embeddings/instruments/paragraph_227.npy deleted file mode 100644 index f8b30f4d..00000000 Binary files a/embeddings/instruments/paragraph_227.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_228.npy b/embeddings/instruments/paragraph_228.npy deleted file mode 100644 index dbedd14f..00000000 Binary files a/embeddings/instruments/paragraph_228.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_229.npy b/embeddings/instruments/paragraph_229.npy deleted file mode 100644 index 4bfbc283..00000000 Binary files a/embeddings/instruments/paragraph_229.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_23.npy b/embeddings/instruments/paragraph_23.npy deleted file mode 100644 index afd31693..00000000 Binary files a/embeddings/instruments/paragraph_23.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_230.npy b/embeddings/instruments/paragraph_230.npy deleted file mode 100644 index dc3aaaa3..00000000 Binary files a/embeddings/instruments/paragraph_230.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_231.npy b/embeddings/instruments/paragraph_231.npy deleted file mode 100644 index 546aebb2..00000000 Binary files a/embeddings/instruments/paragraph_231.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_232.npy b/embeddings/instruments/paragraph_232.npy deleted file mode 100644 index b5bd45cf..00000000 Binary files a/embeddings/instruments/paragraph_232.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_233.npy b/embeddings/instruments/paragraph_233.npy deleted file mode 100644 index 885650c3..00000000 Binary files a/embeddings/instruments/paragraph_233.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_234.npy b/embeddings/instruments/paragraph_234.npy deleted file mode 100644 index 6ff67ae8..00000000 Binary files a/embeddings/instruments/paragraph_234.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_235.npy b/embeddings/instruments/paragraph_235.npy deleted file mode 100644 index 927594ca..00000000 Binary files a/embeddings/instruments/paragraph_235.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_236.npy b/embeddings/instruments/paragraph_236.npy deleted file mode 100644 index 083ea218..00000000 Binary files a/embeddings/instruments/paragraph_236.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_237.npy b/embeddings/instruments/paragraph_237.npy deleted file mode 100644 index b0df3923..00000000 Binary files a/embeddings/instruments/paragraph_237.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_238.npy b/embeddings/instruments/paragraph_238.npy deleted file mode 100644 index cd7648a1..00000000 Binary files a/embeddings/instruments/paragraph_238.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_239.npy b/embeddings/instruments/paragraph_239.npy deleted file mode 100644 index 6f74dbba..00000000 Binary files a/embeddings/instruments/paragraph_239.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_24.npy b/embeddings/instruments/paragraph_24.npy deleted file mode 100644 index 0a71a4ae..00000000 Binary files a/embeddings/instruments/paragraph_24.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_240.npy b/embeddings/instruments/paragraph_240.npy deleted file mode 100644 index 7b80318a..00000000 Binary files a/embeddings/instruments/paragraph_240.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_241.npy b/embeddings/instruments/paragraph_241.npy deleted file mode 100644 index eb223a02..00000000 Binary files a/embeddings/instruments/paragraph_241.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_242.npy b/embeddings/instruments/paragraph_242.npy deleted file mode 100644 index 4af7c075..00000000 Binary files a/embeddings/instruments/paragraph_242.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_243.npy b/embeddings/instruments/paragraph_243.npy deleted file mode 100644 index a7ac6289..00000000 Binary files a/embeddings/instruments/paragraph_243.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_244.npy b/embeddings/instruments/paragraph_244.npy deleted file mode 100644 index 29a28624..00000000 Binary files a/embeddings/instruments/paragraph_244.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_245.npy b/embeddings/instruments/paragraph_245.npy deleted file mode 100644 index 5dc0c2c6..00000000 Binary files a/embeddings/instruments/paragraph_245.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_246.npy b/embeddings/instruments/paragraph_246.npy deleted file mode 100644 index 4491dd96..00000000 Binary files a/embeddings/instruments/paragraph_246.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_247.npy b/embeddings/instruments/paragraph_247.npy deleted file mode 100644 index 2910b4a0..00000000 Binary files a/embeddings/instruments/paragraph_247.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_248.npy b/embeddings/instruments/paragraph_248.npy deleted file mode 100644 index 2c21fd98..00000000 Binary files a/embeddings/instruments/paragraph_248.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_249.npy b/embeddings/instruments/paragraph_249.npy deleted file mode 100644 index 93662704..00000000 Binary files a/embeddings/instruments/paragraph_249.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_25.npy b/embeddings/instruments/paragraph_25.npy deleted file mode 100644 index f0c12449..00000000 Binary files a/embeddings/instruments/paragraph_25.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_250.npy b/embeddings/instruments/paragraph_250.npy deleted file mode 100644 index 5b232a98..00000000 Binary files a/embeddings/instruments/paragraph_250.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_251.npy b/embeddings/instruments/paragraph_251.npy deleted file mode 100644 index bd0dd1cb..00000000 Binary files a/embeddings/instruments/paragraph_251.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_252.npy b/embeddings/instruments/paragraph_252.npy deleted file mode 100644 index 301b2a7d..00000000 Binary files a/embeddings/instruments/paragraph_252.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_253.npy b/embeddings/instruments/paragraph_253.npy deleted file mode 100644 index 5866892b..00000000 Binary files a/embeddings/instruments/paragraph_253.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_254.npy b/embeddings/instruments/paragraph_254.npy deleted file mode 100644 index 342f7f35..00000000 Binary files a/embeddings/instruments/paragraph_254.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_255.npy b/embeddings/instruments/paragraph_255.npy deleted file mode 100644 index f5f745da..00000000 Binary files a/embeddings/instruments/paragraph_255.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_256.npy b/embeddings/instruments/paragraph_256.npy deleted file mode 100644 index 08a59e0d..00000000 Binary files a/embeddings/instruments/paragraph_256.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_257.npy b/embeddings/instruments/paragraph_257.npy deleted file mode 100644 index 5c853961..00000000 Binary files a/embeddings/instruments/paragraph_257.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_258.npy b/embeddings/instruments/paragraph_258.npy deleted file mode 100644 index 6f0a65ea..00000000 Binary files a/embeddings/instruments/paragraph_258.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_259.npy b/embeddings/instruments/paragraph_259.npy deleted file mode 100644 index b99c1910..00000000 Binary files a/embeddings/instruments/paragraph_259.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_26.npy b/embeddings/instruments/paragraph_26.npy deleted file mode 100644 index 7d2f903a..00000000 Binary files a/embeddings/instruments/paragraph_26.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_260.npy b/embeddings/instruments/paragraph_260.npy deleted file mode 100644 index eb895ac2..00000000 Binary files a/embeddings/instruments/paragraph_260.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_261.npy b/embeddings/instruments/paragraph_261.npy deleted file mode 100644 index 305ae5df..00000000 Binary files a/embeddings/instruments/paragraph_261.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_262.npy b/embeddings/instruments/paragraph_262.npy deleted file mode 100644 index 1ef680f1..00000000 Binary files a/embeddings/instruments/paragraph_262.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_263.npy b/embeddings/instruments/paragraph_263.npy deleted file mode 100644 index 5e2adf95..00000000 Binary files a/embeddings/instruments/paragraph_263.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_264.npy b/embeddings/instruments/paragraph_264.npy deleted file mode 100644 index 89367d70..00000000 Binary files a/embeddings/instruments/paragraph_264.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_265.npy b/embeddings/instruments/paragraph_265.npy deleted file mode 100644 index 7c8aa7d6..00000000 Binary files a/embeddings/instruments/paragraph_265.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_266.npy b/embeddings/instruments/paragraph_266.npy deleted file mode 100644 index 06e0c155..00000000 Binary files a/embeddings/instruments/paragraph_266.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_267.npy b/embeddings/instruments/paragraph_267.npy deleted file mode 100644 index e88f7399..00000000 Binary files a/embeddings/instruments/paragraph_267.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_268.npy b/embeddings/instruments/paragraph_268.npy deleted file mode 100644 index 7ae6c2c6..00000000 Binary files a/embeddings/instruments/paragraph_268.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_269.npy b/embeddings/instruments/paragraph_269.npy deleted file mode 100644 index d27697fe..00000000 Binary files a/embeddings/instruments/paragraph_269.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_27.npy b/embeddings/instruments/paragraph_27.npy deleted file mode 100644 index d84921a1..00000000 Binary files a/embeddings/instruments/paragraph_27.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_270.npy b/embeddings/instruments/paragraph_270.npy deleted file mode 100644 index 3d04d5e7..00000000 Binary files a/embeddings/instruments/paragraph_270.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_271.npy b/embeddings/instruments/paragraph_271.npy deleted file mode 100644 index 78d218d0..00000000 Binary files a/embeddings/instruments/paragraph_271.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_272.npy b/embeddings/instruments/paragraph_272.npy deleted file mode 100644 index 8e21af7a..00000000 Binary files a/embeddings/instruments/paragraph_272.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_273.npy b/embeddings/instruments/paragraph_273.npy deleted file mode 100644 index cbe01f87..00000000 Binary files a/embeddings/instruments/paragraph_273.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_274.npy b/embeddings/instruments/paragraph_274.npy deleted file mode 100644 index 642f2a20..00000000 Binary files a/embeddings/instruments/paragraph_274.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_275.npy b/embeddings/instruments/paragraph_275.npy deleted file mode 100644 index b11d8ab1..00000000 Binary files a/embeddings/instruments/paragraph_275.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_276.npy b/embeddings/instruments/paragraph_276.npy deleted file mode 100644 index b85b6526..00000000 Binary files a/embeddings/instruments/paragraph_276.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_277.npy b/embeddings/instruments/paragraph_277.npy deleted file mode 100644 index 1a302587..00000000 Binary files a/embeddings/instruments/paragraph_277.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_278.npy b/embeddings/instruments/paragraph_278.npy deleted file mode 100644 index fc5a5856..00000000 Binary files a/embeddings/instruments/paragraph_278.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_279.npy b/embeddings/instruments/paragraph_279.npy deleted file mode 100644 index e267e265..00000000 Binary files a/embeddings/instruments/paragraph_279.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_28.npy b/embeddings/instruments/paragraph_28.npy deleted file mode 100644 index c988dd2f..00000000 Binary files a/embeddings/instruments/paragraph_28.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_280.npy b/embeddings/instruments/paragraph_280.npy deleted file mode 100644 index bbadcfce..00000000 Binary files a/embeddings/instruments/paragraph_280.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_281.npy b/embeddings/instruments/paragraph_281.npy deleted file mode 100644 index 7a99c4ec..00000000 Binary files a/embeddings/instruments/paragraph_281.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_282.npy b/embeddings/instruments/paragraph_282.npy deleted file mode 100644 index 803908ce..00000000 Binary files a/embeddings/instruments/paragraph_282.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_283.npy b/embeddings/instruments/paragraph_283.npy deleted file mode 100644 index 09a46263..00000000 Binary files a/embeddings/instruments/paragraph_283.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_284.npy b/embeddings/instruments/paragraph_284.npy deleted file mode 100644 index b4bb7ee7..00000000 Binary files a/embeddings/instruments/paragraph_284.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_285.npy b/embeddings/instruments/paragraph_285.npy deleted file mode 100644 index 7ccae231..00000000 Binary files a/embeddings/instruments/paragraph_285.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_286.npy b/embeddings/instruments/paragraph_286.npy deleted file mode 100644 index a5785b62..00000000 Binary files a/embeddings/instruments/paragraph_286.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_287.npy b/embeddings/instruments/paragraph_287.npy deleted file mode 100644 index 377ef8a9..00000000 Binary files a/embeddings/instruments/paragraph_287.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_288.npy b/embeddings/instruments/paragraph_288.npy deleted file mode 100644 index 7c68e48e..00000000 Binary files a/embeddings/instruments/paragraph_288.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_289.npy b/embeddings/instruments/paragraph_289.npy deleted file mode 100644 index 9117d52d..00000000 Binary files a/embeddings/instruments/paragraph_289.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_29.npy b/embeddings/instruments/paragraph_29.npy deleted file mode 100644 index 2574c4ba..00000000 Binary files a/embeddings/instruments/paragraph_29.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_290.npy b/embeddings/instruments/paragraph_290.npy deleted file mode 100644 index 491b9eb8..00000000 Binary files a/embeddings/instruments/paragraph_290.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_291.npy b/embeddings/instruments/paragraph_291.npy deleted file mode 100644 index 9e6bab7f..00000000 Binary files a/embeddings/instruments/paragraph_291.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_292.npy b/embeddings/instruments/paragraph_292.npy deleted file mode 100644 index c72e7b0f..00000000 Binary files a/embeddings/instruments/paragraph_292.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_293.npy b/embeddings/instruments/paragraph_293.npy deleted file mode 100644 index 07140f82..00000000 Binary files a/embeddings/instruments/paragraph_293.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_294.npy b/embeddings/instruments/paragraph_294.npy deleted file mode 100644 index d9fb0e54..00000000 Binary files a/embeddings/instruments/paragraph_294.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_295.npy b/embeddings/instruments/paragraph_295.npy deleted file mode 100644 index 51c84ca8..00000000 Binary files a/embeddings/instruments/paragraph_295.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_296.npy b/embeddings/instruments/paragraph_296.npy deleted file mode 100644 index c5a0b68b..00000000 Binary files a/embeddings/instruments/paragraph_296.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_297.npy b/embeddings/instruments/paragraph_297.npy deleted file mode 100644 index 94e1771f..00000000 Binary files a/embeddings/instruments/paragraph_297.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_298.npy b/embeddings/instruments/paragraph_298.npy deleted file mode 100644 index 910a2b0f..00000000 Binary files a/embeddings/instruments/paragraph_298.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_299.npy b/embeddings/instruments/paragraph_299.npy deleted file mode 100644 index d3f6631c..00000000 Binary files a/embeddings/instruments/paragraph_299.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_3.npy b/embeddings/instruments/paragraph_3.npy deleted file mode 100644 index b1c2befe..00000000 Binary files a/embeddings/instruments/paragraph_3.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_30.npy b/embeddings/instruments/paragraph_30.npy deleted file mode 100644 index 7ab235a2..00000000 Binary files a/embeddings/instruments/paragraph_30.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_300.npy b/embeddings/instruments/paragraph_300.npy deleted file mode 100644 index 1e6e3cf9..00000000 Binary files a/embeddings/instruments/paragraph_300.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_301.npy b/embeddings/instruments/paragraph_301.npy deleted file mode 100644 index 51fadb80..00000000 Binary files a/embeddings/instruments/paragraph_301.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_302.npy b/embeddings/instruments/paragraph_302.npy deleted file mode 100644 index d8b92c9c..00000000 Binary files a/embeddings/instruments/paragraph_302.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_303.npy b/embeddings/instruments/paragraph_303.npy deleted file mode 100644 index 928fa597..00000000 Binary files a/embeddings/instruments/paragraph_303.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_304.npy b/embeddings/instruments/paragraph_304.npy deleted file mode 100644 index 62c1e306..00000000 Binary files a/embeddings/instruments/paragraph_304.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_305.npy b/embeddings/instruments/paragraph_305.npy deleted file mode 100644 index a8d5b4db..00000000 Binary files a/embeddings/instruments/paragraph_305.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_306.npy b/embeddings/instruments/paragraph_306.npy deleted file mode 100644 index 1474de09..00000000 Binary files a/embeddings/instruments/paragraph_306.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_307.npy b/embeddings/instruments/paragraph_307.npy deleted file mode 100644 index 802170d9..00000000 Binary files a/embeddings/instruments/paragraph_307.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_308.npy b/embeddings/instruments/paragraph_308.npy deleted file mode 100644 index ebb4f29f..00000000 Binary files a/embeddings/instruments/paragraph_308.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_309.npy b/embeddings/instruments/paragraph_309.npy deleted file mode 100644 index 9087074b..00000000 Binary files a/embeddings/instruments/paragraph_309.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_31.npy b/embeddings/instruments/paragraph_31.npy deleted file mode 100644 index 8623712f..00000000 Binary files a/embeddings/instruments/paragraph_31.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_310.npy b/embeddings/instruments/paragraph_310.npy deleted file mode 100644 index 209f6443..00000000 Binary files a/embeddings/instruments/paragraph_310.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_311.npy b/embeddings/instruments/paragraph_311.npy deleted file mode 100644 index e2708360..00000000 Binary files a/embeddings/instruments/paragraph_311.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_312.npy b/embeddings/instruments/paragraph_312.npy deleted file mode 100644 index e3a58f35..00000000 Binary files a/embeddings/instruments/paragraph_312.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_313.npy b/embeddings/instruments/paragraph_313.npy deleted file mode 100644 index c780b7a7..00000000 Binary files a/embeddings/instruments/paragraph_313.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_314.npy b/embeddings/instruments/paragraph_314.npy deleted file mode 100644 index 2c6c9b0f..00000000 Binary files a/embeddings/instruments/paragraph_314.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_315.npy b/embeddings/instruments/paragraph_315.npy deleted file mode 100644 index dfcb1a7a..00000000 Binary files a/embeddings/instruments/paragraph_315.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_316.npy b/embeddings/instruments/paragraph_316.npy deleted file mode 100644 index 4261b4dc..00000000 Binary files a/embeddings/instruments/paragraph_316.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_317.npy b/embeddings/instruments/paragraph_317.npy deleted file mode 100644 index c95b4b71..00000000 Binary files a/embeddings/instruments/paragraph_317.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_318.npy b/embeddings/instruments/paragraph_318.npy deleted file mode 100644 index e2b616d2..00000000 Binary files a/embeddings/instruments/paragraph_318.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_319.npy b/embeddings/instruments/paragraph_319.npy deleted file mode 100644 index 7741145f..00000000 Binary files a/embeddings/instruments/paragraph_319.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_32.npy b/embeddings/instruments/paragraph_32.npy deleted file mode 100644 index b9b9e770..00000000 Binary files a/embeddings/instruments/paragraph_32.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_320.npy b/embeddings/instruments/paragraph_320.npy deleted file mode 100644 index fb21312b..00000000 Binary files a/embeddings/instruments/paragraph_320.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_321.npy b/embeddings/instruments/paragraph_321.npy deleted file mode 100644 index 5c90bb19..00000000 Binary files a/embeddings/instruments/paragraph_321.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_322.npy b/embeddings/instruments/paragraph_322.npy deleted file mode 100644 index 72e598bd..00000000 Binary files a/embeddings/instruments/paragraph_322.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_323.npy b/embeddings/instruments/paragraph_323.npy deleted file mode 100644 index 647ce031..00000000 Binary files a/embeddings/instruments/paragraph_323.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_324.npy b/embeddings/instruments/paragraph_324.npy deleted file mode 100644 index dfda5a31..00000000 Binary files a/embeddings/instruments/paragraph_324.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_325.npy b/embeddings/instruments/paragraph_325.npy deleted file mode 100644 index c4d07c1f..00000000 Binary files a/embeddings/instruments/paragraph_325.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_326.npy b/embeddings/instruments/paragraph_326.npy deleted file mode 100644 index e398d98c..00000000 Binary files a/embeddings/instruments/paragraph_326.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_327.npy b/embeddings/instruments/paragraph_327.npy deleted file mode 100644 index f4cf4566..00000000 Binary files a/embeddings/instruments/paragraph_327.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_328.npy b/embeddings/instruments/paragraph_328.npy deleted file mode 100644 index 77dbdddc..00000000 Binary files a/embeddings/instruments/paragraph_328.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_329.npy b/embeddings/instruments/paragraph_329.npy deleted file mode 100644 index 0ff2274f..00000000 Binary files a/embeddings/instruments/paragraph_329.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_33.npy b/embeddings/instruments/paragraph_33.npy deleted file mode 100644 index ca13b998..00000000 Binary files a/embeddings/instruments/paragraph_33.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_330.npy b/embeddings/instruments/paragraph_330.npy deleted file mode 100644 index fb532f77..00000000 Binary files a/embeddings/instruments/paragraph_330.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_331.npy b/embeddings/instruments/paragraph_331.npy deleted file mode 100644 index 0e404237..00000000 Binary files a/embeddings/instruments/paragraph_331.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_332.npy b/embeddings/instruments/paragraph_332.npy deleted file mode 100644 index 644a1b85..00000000 Binary files a/embeddings/instruments/paragraph_332.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_333.npy b/embeddings/instruments/paragraph_333.npy deleted file mode 100644 index 433e0620..00000000 Binary files a/embeddings/instruments/paragraph_333.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_334.npy b/embeddings/instruments/paragraph_334.npy deleted file mode 100644 index 729836e8..00000000 Binary files a/embeddings/instruments/paragraph_334.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_335.npy b/embeddings/instruments/paragraph_335.npy deleted file mode 100644 index ff3d07c2..00000000 Binary files a/embeddings/instruments/paragraph_335.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_336.npy b/embeddings/instruments/paragraph_336.npy deleted file mode 100644 index 5a00f83a..00000000 Binary files a/embeddings/instruments/paragraph_336.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_337.npy b/embeddings/instruments/paragraph_337.npy deleted file mode 100644 index 00160aea..00000000 Binary files a/embeddings/instruments/paragraph_337.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_338.npy b/embeddings/instruments/paragraph_338.npy deleted file mode 100644 index e0e297f4..00000000 Binary files a/embeddings/instruments/paragraph_338.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_339.npy b/embeddings/instruments/paragraph_339.npy deleted file mode 100644 index 4ee6a20e..00000000 Binary files a/embeddings/instruments/paragraph_339.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_34.npy b/embeddings/instruments/paragraph_34.npy deleted file mode 100644 index 6281b5ad..00000000 Binary files a/embeddings/instruments/paragraph_34.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_340.npy b/embeddings/instruments/paragraph_340.npy deleted file mode 100644 index 700de7a8..00000000 Binary files a/embeddings/instruments/paragraph_340.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_341.npy b/embeddings/instruments/paragraph_341.npy deleted file mode 100644 index 1f871616..00000000 Binary files a/embeddings/instruments/paragraph_341.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_342.npy b/embeddings/instruments/paragraph_342.npy deleted file mode 100644 index eeceea15..00000000 Binary files a/embeddings/instruments/paragraph_342.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_343.npy b/embeddings/instruments/paragraph_343.npy deleted file mode 100644 index 70b283e8..00000000 Binary files a/embeddings/instruments/paragraph_343.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_344.npy b/embeddings/instruments/paragraph_344.npy deleted file mode 100644 index 9ddbda21..00000000 Binary files a/embeddings/instruments/paragraph_344.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_345.npy b/embeddings/instruments/paragraph_345.npy deleted file mode 100644 index 241225c2..00000000 Binary files a/embeddings/instruments/paragraph_345.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_346.npy b/embeddings/instruments/paragraph_346.npy deleted file mode 100644 index f8c477dc..00000000 Binary files a/embeddings/instruments/paragraph_346.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_347.npy b/embeddings/instruments/paragraph_347.npy deleted file mode 100644 index bf1d01f0..00000000 Binary files a/embeddings/instruments/paragraph_347.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_348.npy b/embeddings/instruments/paragraph_348.npy deleted file mode 100644 index 8e455846..00000000 Binary files a/embeddings/instruments/paragraph_348.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_349.npy b/embeddings/instruments/paragraph_349.npy deleted file mode 100644 index f761dd29..00000000 Binary files a/embeddings/instruments/paragraph_349.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_35.npy b/embeddings/instruments/paragraph_35.npy deleted file mode 100644 index 9691fc40..00000000 Binary files a/embeddings/instruments/paragraph_35.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_350.npy b/embeddings/instruments/paragraph_350.npy deleted file mode 100644 index 73839480..00000000 Binary files a/embeddings/instruments/paragraph_350.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_351.npy b/embeddings/instruments/paragraph_351.npy deleted file mode 100644 index 68fb5219..00000000 Binary files a/embeddings/instruments/paragraph_351.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_352.npy b/embeddings/instruments/paragraph_352.npy deleted file mode 100644 index 50664c56..00000000 Binary files a/embeddings/instruments/paragraph_352.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_353.npy b/embeddings/instruments/paragraph_353.npy deleted file mode 100644 index 27b5a513..00000000 Binary files a/embeddings/instruments/paragraph_353.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_354.npy b/embeddings/instruments/paragraph_354.npy deleted file mode 100644 index e2f9ef38..00000000 Binary files a/embeddings/instruments/paragraph_354.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_355.npy b/embeddings/instruments/paragraph_355.npy deleted file mode 100644 index cd14783f..00000000 Binary files a/embeddings/instruments/paragraph_355.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_356.npy b/embeddings/instruments/paragraph_356.npy deleted file mode 100644 index 5ed008d0..00000000 Binary files a/embeddings/instruments/paragraph_356.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_357.npy b/embeddings/instruments/paragraph_357.npy deleted file mode 100644 index e4984408..00000000 Binary files a/embeddings/instruments/paragraph_357.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_358.npy b/embeddings/instruments/paragraph_358.npy deleted file mode 100644 index 4c7d98cc..00000000 Binary files a/embeddings/instruments/paragraph_358.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_359.npy b/embeddings/instruments/paragraph_359.npy deleted file mode 100644 index 664a0048..00000000 Binary files a/embeddings/instruments/paragraph_359.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_36.npy b/embeddings/instruments/paragraph_36.npy deleted file mode 100644 index 971d5656..00000000 Binary files a/embeddings/instruments/paragraph_36.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_360.npy b/embeddings/instruments/paragraph_360.npy deleted file mode 100644 index a10ede4d..00000000 Binary files a/embeddings/instruments/paragraph_360.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_361.npy b/embeddings/instruments/paragraph_361.npy deleted file mode 100644 index 05881a5b..00000000 Binary files a/embeddings/instruments/paragraph_361.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_362.npy b/embeddings/instruments/paragraph_362.npy deleted file mode 100644 index 61bfbcdf..00000000 Binary files a/embeddings/instruments/paragraph_362.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_363.npy b/embeddings/instruments/paragraph_363.npy deleted file mode 100644 index 21cf50a2..00000000 Binary files a/embeddings/instruments/paragraph_363.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_364.npy b/embeddings/instruments/paragraph_364.npy deleted file mode 100644 index 98f6fbb9..00000000 Binary files a/embeddings/instruments/paragraph_364.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_365.npy b/embeddings/instruments/paragraph_365.npy deleted file mode 100644 index 43dc73f4..00000000 Binary files a/embeddings/instruments/paragraph_365.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_366.npy b/embeddings/instruments/paragraph_366.npy deleted file mode 100644 index e8cfb9fe..00000000 Binary files a/embeddings/instruments/paragraph_366.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_367.npy b/embeddings/instruments/paragraph_367.npy deleted file mode 100644 index fb2ebec9..00000000 Binary files a/embeddings/instruments/paragraph_367.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_368.npy b/embeddings/instruments/paragraph_368.npy deleted file mode 100644 index 5e4c3bf1..00000000 Binary files a/embeddings/instruments/paragraph_368.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_369.npy b/embeddings/instruments/paragraph_369.npy deleted file mode 100644 index aaacccd1..00000000 Binary files a/embeddings/instruments/paragraph_369.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_37.npy b/embeddings/instruments/paragraph_37.npy deleted file mode 100644 index 2731553b..00000000 Binary files a/embeddings/instruments/paragraph_37.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_370.npy b/embeddings/instruments/paragraph_370.npy deleted file mode 100644 index 7158fd6b..00000000 Binary files a/embeddings/instruments/paragraph_370.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_371.npy b/embeddings/instruments/paragraph_371.npy deleted file mode 100644 index ad86cadd..00000000 Binary files a/embeddings/instruments/paragraph_371.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_372.npy b/embeddings/instruments/paragraph_372.npy deleted file mode 100644 index 74303c96..00000000 Binary files a/embeddings/instruments/paragraph_372.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_373.npy b/embeddings/instruments/paragraph_373.npy deleted file mode 100644 index 0436d3b8..00000000 Binary files a/embeddings/instruments/paragraph_373.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_374.npy b/embeddings/instruments/paragraph_374.npy deleted file mode 100644 index b90cb03b..00000000 Binary files a/embeddings/instruments/paragraph_374.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_375.npy b/embeddings/instruments/paragraph_375.npy deleted file mode 100644 index d8078701..00000000 Binary files a/embeddings/instruments/paragraph_375.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_376.npy b/embeddings/instruments/paragraph_376.npy deleted file mode 100644 index 8481ef8d..00000000 Binary files a/embeddings/instruments/paragraph_376.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_377.npy b/embeddings/instruments/paragraph_377.npy deleted file mode 100644 index 119258c5..00000000 Binary files a/embeddings/instruments/paragraph_377.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_378.npy b/embeddings/instruments/paragraph_378.npy deleted file mode 100644 index d68aa1c3..00000000 Binary files a/embeddings/instruments/paragraph_378.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_379.npy b/embeddings/instruments/paragraph_379.npy deleted file mode 100644 index 8671e584..00000000 Binary files a/embeddings/instruments/paragraph_379.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_38.npy b/embeddings/instruments/paragraph_38.npy deleted file mode 100644 index 3fe5d211..00000000 Binary files a/embeddings/instruments/paragraph_38.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_380.npy b/embeddings/instruments/paragraph_380.npy deleted file mode 100644 index 16454792..00000000 Binary files a/embeddings/instruments/paragraph_380.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_381.npy b/embeddings/instruments/paragraph_381.npy deleted file mode 100644 index bf6414f8..00000000 Binary files a/embeddings/instruments/paragraph_381.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_382.npy b/embeddings/instruments/paragraph_382.npy deleted file mode 100644 index 825613d7..00000000 Binary files a/embeddings/instruments/paragraph_382.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_383.npy b/embeddings/instruments/paragraph_383.npy deleted file mode 100644 index e3ce98b3..00000000 Binary files a/embeddings/instruments/paragraph_383.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_384.npy b/embeddings/instruments/paragraph_384.npy deleted file mode 100644 index 7fa9f614..00000000 Binary files a/embeddings/instruments/paragraph_384.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_385.npy b/embeddings/instruments/paragraph_385.npy deleted file mode 100644 index 84638825..00000000 Binary files a/embeddings/instruments/paragraph_385.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_386.npy b/embeddings/instruments/paragraph_386.npy deleted file mode 100644 index f553350a..00000000 Binary files a/embeddings/instruments/paragraph_386.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_387.npy b/embeddings/instruments/paragraph_387.npy deleted file mode 100644 index 150c538c..00000000 Binary files a/embeddings/instruments/paragraph_387.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_388.npy b/embeddings/instruments/paragraph_388.npy deleted file mode 100644 index 03d7e8af..00000000 Binary files a/embeddings/instruments/paragraph_388.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_389.npy b/embeddings/instruments/paragraph_389.npy deleted file mode 100644 index acb72845..00000000 Binary files a/embeddings/instruments/paragraph_389.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_39.npy b/embeddings/instruments/paragraph_39.npy deleted file mode 100644 index d7d1370b..00000000 Binary files a/embeddings/instruments/paragraph_39.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_390.npy b/embeddings/instruments/paragraph_390.npy deleted file mode 100644 index c774a1d5..00000000 Binary files a/embeddings/instruments/paragraph_390.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_391.npy b/embeddings/instruments/paragraph_391.npy deleted file mode 100644 index 0c48705e..00000000 Binary files a/embeddings/instruments/paragraph_391.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_392.npy b/embeddings/instruments/paragraph_392.npy deleted file mode 100644 index 3622f373..00000000 Binary files a/embeddings/instruments/paragraph_392.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_393.npy b/embeddings/instruments/paragraph_393.npy deleted file mode 100644 index 6a122d7b..00000000 Binary files a/embeddings/instruments/paragraph_393.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_394.npy b/embeddings/instruments/paragraph_394.npy deleted file mode 100644 index 4dfdc3f2..00000000 Binary files a/embeddings/instruments/paragraph_394.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_395.npy b/embeddings/instruments/paragraph_395.npy deleted file mode 100644 index d213e894..00000000 Binary files a/embeddings/instruments/paragraph_395.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_396.npy b/embeddings/instruments/paragraph_396.npy deleted file mode 100644 index 00a5f136..00000000 Binary files a/embeddings/instruments/paragraph_396.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_397.npy b/embeddings/instruments/paragraph_397.npy deleted file mode 100644 index 39dca53f..00000000 Binary files a/embeddings/instruments/paragraph_397.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_398.npy b/embeddings/instruments/paragraph_398.npy deleted file mode 100644 index 2337123f..00000000 Binary files a/embeddings/instruments/paragraph_398.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_399.npy b/embeddings/instruments/paragraph_399.npy deleted file mode 100644 index a5002168..00000000 Binary files a/embeddings/instruments/paragraph_399.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_4.npy b/embeddings/instruments/paragraph_4.npy deleted file mode 100644 index 408defcd..00000000 Binary files a/embeddings/instruments/paragraph_4.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_40.npy b/embeddings/instruments/paragraph_40.npy deleted file mode 100644 index 924a9813..00000000 Binary files a/embeddings/instruments/paragraph_40.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_400.npy b/embeddings/instruments/paragraph_400.npy deleted file mode 100644 index 9e2efa35..00000000 Binary files a/embeddings/instruments/paragraph_400.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_401.npy b/embeddings/instruments/paragraph_401.npy deleted file mode 100644 index d5c6be69..00000000 Binary files a/embeddings/instruments/paragraph_401.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_402.npy b/embeddings/instruments/paragraph_402.npy deleted file mode 100644 index 4883cfc1..00000000 Binary files a/embeddings/instruments/paragraph_402.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_403.npy b/embeddings/instruments/paragraph_403.npy deleted file mode 100644 index be5493c5..00000000 Binary files a/embeddings/instruments/paragraph_403.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_404.npy b/embeddings/instruments/paragraph_404.npy deleted file mode 100644 index 6b1467da..00000000 Binary files a/embeddings/instruments/paragraph_404.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_405.npy b/embeddings/instruments/paragraph_405.npy deleted file mode 100644 index 058c9ef6..00000000 Binary files a/embeddings/instruments/paragraph_405.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_406.npy b/embeddings/instruments/paragraph_406.npy deleted file mode 100644 index 9dda03ba..00000000 Binary files a/embeddings/instruments/paragraph_406.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_407.npy b/embeddings/instruments/paragraph_407.npy deleted file mode 100644 index 6ed05e90..00000000 Binary files a/embeddings/instruments/paragraph_407.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_408.npy b/embeddings/instruments/paragraph_408.npy deleted file mode 100644 index 8c83d2d5..00000000 Binary files a/embeddings/instruments/paragraph_408.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_409.npy b/embeddings/instruments/paragraph_409.npy deleted file mode 100644 index 866aee76..00000000 Binary files a/embeddings/instruments/paragraph_409.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_41.npy b/embeddings/instruments/paragraph_41.npy deleted file mode 100644 index c7038d0a..00000000 Binary files a/embeddings/instruments/paragraph_41.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_410.npy b/embeddings/instruments/paragraph_410.npy deleted file mode 100644 index 0041061d..00000000 Binary files a/embeddings/instruments/paragraph_410.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_411.npy b/embeddings/instruments/paragraph_411.npy deleted file mode 100644 index 22f8721c..00000000 Binary files a/embeddings/instruments/paragraph_411.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_412.npy b/embeddings/instruments/paragraph_412.npy deleted file mode 100644 index f66054f3..00000000 Binary files a/embeddings/instruments/paragraph_412.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_413.npy b/embeddings/instruments/paragraph_413.npy deleted file mode 100644 index 04fe7d20..00000000 Binary files a/embeddings/instruments/paragraph_413.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_414.npy b/embeddings/instruments/paragraph_414.npy deleted file mode 100644 index 8f09a6e4..00000000 Binary files a/embeddings/instruments/paragraph_414.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_415.npy b/embeddings/instruments/paragraph_415.npy deleted file mode 100644 index 629482dd..00000000 Binary files a/embeddings/instruments/paragraph_415.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_416.npy b/embeddings/instruments/paragraph_416.npy deleted file mode 100644 index c305d7f2..00000000 Binary files a/embeddings/instruments/paragraph_416.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_417.npy b/embeddings/instruments/paragraph_417.npy deleted file mode 100644 index c63248f7..00000000 Binary files a/embeddings/instruments/paragraph_417.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_418.npy b/embeddings/instruments/paragraph_418.npy deleted file mode 100644 index bfa1e939..00000000 Binary files a/embeddings/instruments/paragraph_418.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_419.npy b/embeddings/instruments/paragraph_419.npy deleted file mode 100644 index 81f757c1..00000000 Binary files a/embeddings/instruments/paragraph_419.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_42.npy b/embeddings/instruments/paragraph_42.npy deleted file mode 100644 index 5740f1c7..00000000 Binary files a/embeddings/instruments/paragraph_42.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_420.npy b/embeddings/instruments/paragraph_420.npy deleted file mode 100644 index 0ae9b240..00000000 Binary files a/embeddings/instruments/paragraph_420.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_421.npy b/embeddings/instruments/paragraph_421.npy deleted file mode 100644 index f60d7534..00000000 Binary files a/embeddings/instruments/paragraph_421.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_422.npy b/embeddings/instruments/paragraph_422.npy deleted file mode 100644 index 90aadf2c..00000000 Binary files a/embeddings/instruments/paragraph_422.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_423.npy b/embeddings/instruments/paragraph_423.npy deleted file mode 100644 index f70b9d4c..00000000 Binary files a/embeddings/instruments/paragraph_423.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_424.npy b/embeddings/instruments/paragraph_424.npy deleted file mode 100644 index 16713758..00000000 Binary files a/embeddings/instruments/paragraph_424.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_425.npy b/embeddings/instruments/paragraph_425.npy deleted file mode 100644 index 88eb84ed..00000000 Binary files a/embeddings/instruments/paragraph_425.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_426.npy b/embeddings/instruments/paragraph_426.npy deleted file mode 100644 index 02628a9f..00000000 Binary files a/embeddings/instruments/paragraph_426.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_427.npy b/embeddings/instruments/paragraph_427.npy deleted file mode 100644 index 3805383a..00000000 Binary files a/embeddings/instruments/paragraph_427.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_428.npy b/embeddings/instruments/paragraph_428.npy deleted file mode 100644 index 464f7764..00000000 Binary files a/embeddings/instruments/paragraph_428.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_429.npy b/embeddings/instruments/paragraph_429.npy deleted file mode 100644 index 79c840e1..00000000 Binary files a/embeddings/instruments/paragraph_429.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_43.npy b/embeddings/instruments/paragraph_43.npy deleted file mode 100644 index c0f99a81..00000000 Binary files a/embeddings/instruments/paragraph_43.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_430.npy b/embeddings/instruments/paragraph_430.npy deleted file mode 100644 index 91ab66b3..00000000 Binary files a/embeddings/instruments/paragraph_430.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_431.npy b/embeddings/instruments/paragraph_431.npy deleted file mode 100644 index 54dad83e..00000000 Binary files a/embeddings/instruments/paragraph_431.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_432.npy b/embeddings/instruments/paragraph_432.npy deleted file mode 100644 index 7d9ae24f..00000000 Binary files a/embeddings/instruments/paragraph_432.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_433.npy b/embeddings/instruments/paragraph_433.npy deleted file mode 100644 index e98ad4eb..00000000 Binary files a/embeddings/instruments/paragraph_433.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_434.npy b/embeddings/instruments/paragraph_434.npy deleted file mode 100644 index a0ca4c31..00000000 Binary files a/embeddings/instruments/paragraph_434.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_435.npy b/embeddings/instruments/paragraph_435.npy deleted file mode 100644 index 6b7d957f..00000000 Binary files a/embeddings/instruments/paragraph_435.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_436.npy b/embeddings/instruments/paragraph_436.npy deleted file mode 100644 index 91fcb20c..00000000 Binary files a/embeddings/instruments/paragraph_436.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_437.npy b/embeddings/instruments/paragraph_437.npy deleted file mode 100644 index 81b752e7..00000000 Binary files a/embeddings/instruments/paragraph_437.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_438.npy b/embeddings/instruments/paragraph_438.npy deleted file mode 100644 index 536cee59..00000000 Binary files a/embeddings/instruments/paragraph_438.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_439.npy b/embeddings/instruments/paragraph_439.npy deleted file mode 100644 index 3fb2322b..00000000 Binary files a/embeddings/instruments/paragraph_439.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_44.npy b/embeddings/instruments/paragraph_44.npy deleted file mode 100644 index bf945d58..00000000 Binary files a/embeddings/instruments/paragraph_44.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_440.npy b/embeddings/instruments/paragraph_440.npy deleted file mode 100644 index a5c24bed..00000000 Binary files a/embeddings/instruments/paragraph_440.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_441.npy b/embeddings/instruments/paragraph_441.npy deleted file mode 100644 index 63cebf92..00000000 Binary files a/embeddings/instruments/paragraph_441.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_442.npy b/embeddings/instruments/paragraph_442.npy deleted file mode 100644 index e08de593..00000000 Binary files a/embeddings/instruments/paragraph_442.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_443.npy b/embeddings/instruments/paragraph_443.npy deleted file mode 100644 index fee3ce67..00000000 Binary files a/embeddings/instruments/paragraph_443.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_444.npy b/embeddings/instruments/paragraph_444.npy deleted file mode 100644 index b4443626..00000000 Binary files a/embeddings/instruments/paragraph_444.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_445.npy b/embeddings/instruments/paragraph_445.npy deleted file mode 100644 index 0a6c9c78..00000000 Binary files a/embeddings/instruments/paragraph_445.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_446.npy b/embeddings/instruments/paragraph_446.npy deleted file mode 100644 index 99aeadfd..00000000 Binary files a/embeddings/instruments/paragraph_446.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_447.npy b/embeddings/instruments/paragraph_447.npy deleted file mode 100644 index 99c56fa2..00000000 Binary files a/embeddings/instruments/paragraph_447.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_448.npy b/embeddings/instruments/paragraph_448.npy deleted file mode 100644 index 7c557dbe..00000000 Binary files a/embeddings/instruments/paragraph_448.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_449.npy b/embeddings/instruments/paragraph_449.npy deleted file mode 100644 index 07be7646..00000000 Binary files a/embeddings/instruments/paragraph_449.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_45.npy b/embeddings/instruments/paragraph_45.npy deleted file mode 100644 index 345b758a..00000000 Binary files a/embeddings/instruments/paragraph_45.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_450.npy b/embeddings/instruments/paragraph_450.npy deleted file mode 100644 index e339ef7f..00000000 Binary files a/embeddings/instruments/paragraph_450.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_451.npy b/embeddings/instruments/paragraph_451.npy deleted file mode 100644 index 5a22932e..00000000 Binary files a/embeddings/instruments/paragraph_451.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_452.npy b/embeddings/instruments/paragraph_452.npy deleted file mode 100644 index 53a69eef..00000000 Binary files a/embeddings/instruments/paragraph_452.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_453.npy b/embeddings/instruments/paragraph_453.npy deleted file mode 100644 index 44704874..00000000 Binary files a/embeddings/instruments/paragraph_453.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_454.npy b/embeddings/instruments/paragraph_454.npy deleted file mode 100644 index e34d68f5..00000000 Binary files a/embeddings/instruments/paragraph_454.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_455.npy b/embeddings/instruments/paragraph_455.npy deleted file mode 100644 index 478322ab..00000000 Binary files a/embeddings/instruments/paragraph_455.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_456.npy b/embeddings/instruments/paragraph_456.npy deleted file mode 100644 index 23f01094..00000000 Binary files a/embeddings/instruments/paragraph_456.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_457.npy b/embeddings/instruments/paragraph_457.npy deleted file mode 100644 index 1c967f34..00000000 Binary files a/embeddings/instruments/paragraph_457.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_458.npy b/embeddings/instruments/paragraph_458.npy deleted file mode 100644 index 0f677045..00000000 Binary files a/embeddings/instruments/paragraph_458.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_459.npy b/embeddings/instruments/paragraph_459.npy deleted file mode 100644 index 225620d8..00000000 Binary files a/embeddings/instruments/paragraph_459.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_46.npy b/embeddings/instruments/paragraph_46.npy deleted file mode 100644 index 7f0cebee..00000000 Binary files a/embeddings/instruments/paragraph_46.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_460.npy b/embeddings/instruments/paragraph_460.npy deleted file mode 100644 index 7f0b5a41..00000000 Binary files a/embeddings/instruments/paragraph_460.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_461.npy b/embeddings/instruments/paragraph_461.npy deleted file mode 100644 index 22f59135..00000000 Binary files a/embeddings/instruments/paragraph_461.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_462.npy b/embeddings/instruments/paragraph_462.npy deleted file mode 100644 index cc9adab6..00000000 Binary files a/embeddings/instruments/paragraph_462.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_463.npy b/embeddings/instruments/paragraph_463.npy deleted file mode 100644 index e71eef96..00000000 Binary files a/embeddings/instruments/paragraph_463.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_464.npy b/embeddings/instruments/paragraph_464.npy deleted file mode 100644 index 8905e52f..00000000 Binary files a/embeddings/instruments/paragraph_464.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_465.npy b/embeddings/instruments/paragraph_465.npy deleted file mode 100644 index d137735e..00000000 Binary files a/embeddings/instruments/paragraph_465.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_466.npy b/embeddings/instruments/paragraph_466.npy deleted file mode 100644 index fad95fde..00000000 Binary files a/embeddings/instruments/paragraph_466.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_467.npy b/embeddings/instruments/paragraph_467.npy deleted file mode 100644 index f5849724..00000000 Binary files a/embeddings/instruments/paragraph_467.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_468.npy b/embeddings/instruments/paragraph_468.npy deleted file mode 100644 index 1ed17b6a..00000000 Binary files a/embeddings/instruments/paragraph_468.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_469.npy b/embeddings/instruments/paragraph_469.npy deleted file mode 100644 index 65f10a71..00000000 Binary files a/embeddings/instruments/paragraph_469.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_47.npy b/embeddings/instruments/paragraph_47.npy deleted file mode 100644 index a88307ec..00000000 Binary files a/embeddings/instruments/paragraph_47.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_470.npy b/embeddings/instruments/paragraph_470.npy deleted file mode 100644 index 256281c0..00000000 Binary files a/embeddings/instruments/paragraph_470.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_471.npy b/embeddings/instruments/paragraph_471.npy deleted file mode 100644 index 2a4afb45..00000000 Binary files a/embeddings/instruments/paragraph_471.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_472.npy b/embeddings/instruments/paragraph_472.npy deleted file mode 100644 index 3a0142dd..00000000 Binary files a/embeddings/instruments/paragraph_472.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_473.npy b/embeddings/instruments/paragraph_473.npy deleted file mode 100644 index 109e67f8..00000000 Binary files a/embeddings/instruments/paragraph_473.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_474.npy b/embeddings/instruments/paragraph_474.npy deleted file mode 100644 index 48ecf613..00000000 Binary files a/embeddings/instruments/paragraph_474.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_475.npy b/embeddings/instruments/paragraph_475.npy deleted file mode 100644 index 231e4b59..00000000 Binary files a/embeddings/instruments/paragraph_475.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_476.npy b/embeddings/instruments/paragraph_476.npy deleted file mode 100644 index 6eae72f2..00000000 Binary files a/embeddings/instruments/paragraph_476.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_477.npy b/embeddings/instruments/paragraph_477.npy deleted file mode 100644 index 0f2485e8..00000000 Binary files a/embeddings/instruments/paragraph_477.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_478.npy b/embeddings/instruments/paragraph_478.npy deleted file mode 100644 index 2bd71381..00000000 Binary files a/embeddings/instruments/paragraph_478.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_479.npy b/embeddings/instruments/paragraph_479.npy deleted file mode 100644 index 1048d820..00000000 Binary files a/embeddings/instruments/paragraph_479.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_48.npy b/embeddings/instruments/paragraph_48.npy deleted file mode 100644 index c8478a31..00000000 Binary files a/embeddings/instruments/paragraph_48.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_480.npy b/embeddings/instruments/paragraph_480.npy deleted file mode 100644 index 434421ce..00000000 Binary files a/embeddings/instruments/paragraph_480.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_481.npy b/embeddings/instruments/paragraph_481.npy deleted file mode 100644 index 66919b4a..00000000 Binary files a/embeddings/instruments/paragraph_481.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_482.npy b/embeddings/instruments/paragraph_482.npy deleted file mode 100644 index b8e36669..00000000 Binary files a/embeddings/instruments/paragraph_482.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_483.npy b/embeddings/instruments/paragraph_483.npy deleted file mode 100644 index eb306848..00000000 Binary files a/embeddings/instruments/paragraph_483.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_484.npy b/embeddings/instruments/paragraph_484.npy deleted file mode 100644 index 3cde2ee6..00000000 Binary files a/embeddings/instruments/paragraph_484.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_485.npy b/embeddings/instruments/paragraph_485.npy deleted file mode 100644 index 53f3acd1..00000000 Binary files a/embeddings/instruments/paragraph_485.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_486.npy b/embeddings/instruments/paragraph_486.npy deleted file mode 100644 index 2bf88194..00000000 Binary files a/embeddings/instruments/paragraph_486.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_487.npy b/embeddings/instruments/paragraph_487.npy deleted file mode 100644 index b11b05f0..00000000 Binary files a/embeddings/instruments/paragraph_487.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_488.npy b/embeddings/instruments/paragraph_488.npy deleted file mode 100644 index 3d11add8..00000000 Binary files a/embeddings/instruments/paragraph_488.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_489.npy b/embeddings/instruments/paragraph_489.npy deleted file mode 100644 index c8437b7a..00000000 Binary files a/embeddings/instruments/paragraph_489.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_49.npy b/embeddings/instruments/paragraph_49.npy deleted file mode 100644 index 1de5da84..00000000 Binary files a/embeddings/instruments/paragraph_49.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_490.npy b/embeddings/instruments/paragraph_490.npy deleted file mode 100644 index 4d76562c..00000000 Binary files a/embeddings/instruments/paragraph_490.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_491.npy b/embeddings/instruments/paragraph_491.npy deleted file mode 100644 index c78d0b09..00000000 Binary files a/embeddings/instruments/paragraph_491.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_492.npy b/embeddings/instruments/paragraph_492.npy deleted file mode 100644 index c44c1ddf..00000000 Binary files a/embeddings/instruments/paragraph_492.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_493.npy b/embeddings/instruments/paragraph_493.npy deleted file mode 100644 index 6da96f3e..00000000 Binary files a/embeddings/instruments/paragraph_493.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_494.npy b/embeddings/instruments/paragraph_494.npy deleted file mode 100644 index 167fcb6f..00000000 Binary files a/embeddings/instruments/paragraph_494.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_495.npy b/embeddings/instruments/paragraph_495.npy deleted file mode 100644 index 08065c54..00000000 Binary files a/embeddings/instruments/paragraph_495.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_496.npy b/embeddings/instruments/paragraph_496.npy deleted file mode 100644 index cf2bd4b2..00000000 Binary files a/embeddings/instruments/paragraph_496.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_497.npy b/embeddings/instruments/paragraph_497.npy deleted file mode 100644 index c12e949d..00000000 Binary files a/embeddings/instruments/paragraph_497.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_498.npy b/embeddings/instruments/paragraph_498.npy deleted file mode 100644 index 52506c9b..00000000 Binary files a/embeddings/instruments/paragraph_498.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_499.npy b/embeddings/instruments/paragraph_499.npy deleted file mode 100644 index 06a1fe1c..00000000 Binary files a/embeddings/instruments/paragraph_499.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_5.npy b/embeddings/instruments/paragraph_5.npy deleted file mode 100644 index 21e1fb46..00000000 Binary files a/embeddings/instruments/paragraph_5.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_50.npy b/embeddings/instruments/paragraph_50.npy deleted file mode 100644 index 4fca87b5..00000000 Binary files a/embeddings/instruments/paragraph_50.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_500.npy b/embeddings/instruments/paragraph_500.npy deleted file mode 100644 index b2ecfe0d..00000000 Binary files a/embeddings/instruments/paragraph_500.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_501.npy b/embeddings/instruments/paragraph_501.npy deleted file mode 100644 index 28a697a8..00000000 Binary files a/embeddings/instruments/paragraph_501.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_502.npy b/embeddings/instruments/paragraph_502.npy deleted file mode 100644 index cf4fce7f..00000000 Binary files a/embeddings/instruments/paragraph_502.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_503.npy b/embeddings/instruments/paragraph_503.npy deleted file mode 100644 index 851a04ef..00000000 Binary files a/embeddings/instruments/paragraph_503.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_504.npy b/embeddings/instruments/paragraph_504.npy deleted file mode 100644 index fa9b9b87..00000000 Binary files a/embeddings/instruments/paragraph_504.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_505.npy b/embeddings/instruments/paragraph_505.npy deleted file mode 100644 index 744b35e9..00000000 Binary files a/embeddings/instruments/paragraph_505.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_506.npy b/embeddings/instruments/paragraph_506.npy deleted file mode 100644 index 57ad8056..00000000 Binary files a/embeddings/instruments/paragraph_506.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_507.npy b/embeddings/instruments/paragraph_507.npy deleted file mode 100644 index 59323d7f..00000000 Binary files a/embeddings/instruments/paragraph_507.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_508.npy b/embeddings/instruments/paragraph_508.npy deleted file mode 100644 index 116d2530..00000000 Binary files a/embeddings/instruments/paragraph_508.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_509.npy b/embeddings/instruments/paragraph_509.npy deleted file mode 100644 index 4b69eae1..00000000 Binary files a/embeddings/instruments/paragraph_509.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_51.npy b/embeddings/instruments/paragraph_51.npy deleted file mode 100644 index d5bc9717..00000000 Binary files a/embeddings/instruments/paragraph_51.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_510.npy b/embeddings/instruments/paragraph_510.npy deleted file mode 100644 index befa3b19..00000000 Binary files a/embeddings/instruments/paragraph_510.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_511.npy b/embeddings/instruments/paragraph_511.npy deleted file mode 100644 index 902b8a92..00000000 Binary files a/embeddings/instruments/paragraph_511.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_512.npy b/embeddings/instruments/paragraph_512.npy deleted file mode 100644 index 0e07ade4..00000000 Binary files a/embeddings/instruments/paragraph_512.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_513.npy b/embeddings/instruments/paragraph_513.npy deleted file mode 100644 index d7a735b5..00000000 Binary files a/embeddings/instruments/paragraph_513.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_514.npy b/embeddings/instruments/paragraph_514.npy deleted file mode 100644 index b9db6db1..00000000 Binary files a/embeddings/instruments/paragraph_514.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_515.npy b/embeddings/instruments/paragraph_515.npy deleted file mode 100644 index 2bd8d90d..00000000 Binary files a/embeddings/instruments/paragraph_515.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_516.npy b/embeddings/instruments/paragraph_516.npy deleted file mode 100644 index 4fb681f5..00000000 Binary files a/embeddings/instruments/paragraph_516.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_517.npy b/embeddings/instruments/paragraph_517.npy deleted file mode 100644 index 294ac927..00000000 Binary files a/embeddings/instruments/paragraph_517.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_518.npy b/embeddings/instruments/paragraph_518.npy deleted file mode 100644 index e98fc6a8..00000000 Binary files a/embeddings/instruments/paragraph_518.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_519.npy b/embeddings/instruments/paragraph_519.npy deleted file mode 100644 index 420d7696..00000000 Binary files a/embeddings/instruments/paragraph_519.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_52.npy b/embeddings/instruments/paragraph_52.npy deleted file mode 100644 index 5e175325..00000000 Binary files a/embeddings/instruments/paragraph_52.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_520.npy b/embeddings/instruments/paragraph_520.npy deleted file mode 100644 index 633040e4..00000000 Binary files a/embeddings/instruments/paragraph_520.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_521.npy b/embeddings/instruments/paragraph_521.npy deleted file mode 100644 index 25af1de0..00000000 Binary files a/embeddings/instruments/paragraph_521.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_522.npy b/embeddings/instruments/paragraph_522.npy deleted file mode 100644 index 11e3845d..00000000 Binary files a/embeddings/instruments/paragraph_522.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_523.npy b/embeddings/instruments/paragraph_523.npy deleted file mode 100644 index 06f98f6a..00000000 Binary files a/embeddings/instruments/paragraph_523.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_524.npy b/embeddings/instruments/paragraph_524.npy deleted file mode 100644 index faa94efe..00000000 Binary files a/embeddings/instruments/paragraph_524.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_525.npy b/embeddings/instruments/paragraph_525.npy deleted file mode 100644 index b733a295..00000000 Binary files a/embeddings/instruments/paragraph_525.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_526.npy b/embeddings/instruments/paragraph_526.npy deleted file mode 100644 index 953e59d0..00000000 Binary files a/embeddings/instruments/paragraph_526.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_527.npy b/embeddings/instruments/paragraph_527.npy deleted file mode 100644 index d0cf8831..00000000 Binary files a/embeddings/instruments/paragraph_527.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_528.npy b/embeddings/instruments/paragraph_528.npy deleted file mode 100644 index 9b950c6a..00000000 Binary files a/embeddings/instruments/paragraph_528.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_529.npy b/embeddings/instruments/paragraph_529.npy deleted file mode 100644 index dc2ffdf3..00000000 Binary files a/embeddings/instruments/paragraph_529.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_53.npy b/embeddings/instruments/paragraph_53.npy deleted file mode 100644 index ea9ca2ed..00000000 Binary files a/embeddings/instruments/paragraph_53.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_530.npy b/embeddings/instruments/paragraph_530.npy deleted file mode 100644 index 79d88876..00000000 Binary files a/embeddings/instruments/paragraph_530.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_531.npy b/embeddings/instruments/paragraph_531.npy deleted file mode 100644 index f7e33925..00000000 Binary files a/embeddings/instruments/paragraph_531.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_532.npy b/embeddings/instruments/paragraph_532.npy deleted file mode 100644 index ca345bd6..00000000 Binary files a/embeddings/instruments/paragraph_532.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_533.npy b/embeddings/instruments/paragraph_533.npy deleted file mode 100644 index 419123c9..00000000 Binary files a/embeddings/instruments/paragraph_533.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_534.npy b/embeddings/instruments/paragraph_534.npy deleted file mode 100644 index 17918b8a..00000000 Binary files a/embeddings/instruments/paragraph_534.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_535.npy b/embeddings/instruments/paragraph_535.npy deleted file mode 100644 index 2223e61c..00000000 Binary files a/embeddings/instruments/paragraph_535.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_536.npy b/embeddings/instruments/paragraph_536.npy deleted file mode 100644 index 4af50a57..00000000 Binary files a/embeddings/instruments/paragraph_536.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_537.npy b/embeddings/instruments/paragraph_537.npy deleted file mode 100644 index c57522c2..00000000 Binary files a/embeddings/instruments/paragraph_537.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_538.npy b/embeddings/instruments/paragraph_538.npy deleted file mode 100644 index d6df082f..00000000 Binary files a/embeddings/instruments/paragraph_538.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_539.npy b/embeddings/instruments/paragraph_539.npy deleted file mode 100644 index cdba2a4c..00000000 Binary files a/embeddings/instruments/paragraph_539.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_54.npy b/embeddings/instruments/paragraph_54.npy deleted file mode 100644 index 7c572e52..00000000 Binary files a/embeddings/instruments/paragraph_54.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_540.npy b/embeddings/instruments/paragraph_540.npy deleted file mode 100644 index e8851db0..00000000 Binary files a/embeddings/instruments/paragraph_540.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_541.npy b/embeddings/instruments/paragraph_541.npy deleted file mode 100644 index d94d074f..00000000 Binary files a/embeddings/instruments/paragraph_541.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_542.npy b/embeddings/instruments/paragraph_542.npy deleted file mode 100644 index bafb9b87..00000000 Binary files a/embeddings/instruments/paragraph_542.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_543.npy b/embeddings/instruments/paragraph_543.npy deleted file mode 100644 index c7bf6852..00000000 Binary files a/embeddings/instruments/paragraph_543.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_544.npy b/embeddings/instruments/paragraph_544.npy deleted file mode 100644 index cf589f7d..00000000 Binary files a/embeddings/instruments/paragraph_544.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_545.npy b/embeddings/instruments/paragraph_545.npy deleted file mode 100644 index 5996de0b..00000000 Binary files a/embeddings/instruments/paragraph_545.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_546.npy b/embeddings/instruments/paragraph_546.npy deleted file mode 100644 index 24a7577a..00000000 Binary files a/embeddings/instruments/paragraph_546.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_547.npy b/embeddings/instruments/paragraph_547.npy deleted file mode 100644 index a182c9f6..00000000 Binary files a/embeddings/instruments/paragraph_547.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_548.npy b/embeddings/instruments/paragraph_548.npy deleted file mode 100644 index 800aa59b..00000000 Binary files a/embeddings/instruments/paragraph_548.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_549.npy b/embeddings/instruments/paragraph_549.npy deleted file mode 100644 index 7c9690a8..00000000 Binary files a/embeddings/instruments/paragraph_549.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_55.npy b/embeddings/instruments/paragraph_55.npy deleted file mode 100644 index 1fc483f9..00000000 Binary files a/embeddings/instruments/paragraph_55.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_550.npy b/embeddings/instruments/paragraph_550.npy deleted file mode 100644 index 36f299e7..00000000 Binary files a/embeddings/instruments/paragraph_550.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_551.npy b/embeddings/instruments/paragraph_551.npy deleted file mode 100644 index 2b004707..00000000 Binary files a/embeddings/instruments/paragraph_551.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_56.npy b/embeddings/instruments/paragraph_56.npy deleted file mode 100644 index ba5d71ab..00000000 Binary files a/embeddings/instruments/paragraph_56.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_57.npy b/embeddings/instruments/paragraph_57.npy deleted file mode 100644 index 5209333e..00000000 Binary files a/embeddings/instruments/paragraph_57.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_58.npy b/embeddings/instruments/paragraph_58.npy deleted file mode 100644 index d7b5d253..00000000 Binary files a/embeddings/instruments/paragraph_58.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_59.npy b/embeddings/instruments/paragraph_59.npy deleted file mode 100644 index 3f39119d..00000000 Binary files a/embeddings/instruments/paragraph_59.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_6.npy b/embeddings/instruments/paragraph_6.npy deleted file mode 100644 index 28ccac22..00000000 Binary files a/embeddings/instruments/paragraph_6.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_60.npy b/embeddings/instruments/paragraph_60.npy deleted file mode 100644 index 439e17d8..00000000 Binary files a/embeddings/instruments/paragraph_60.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_61.npy b/embeddings/instruments/paragraph_61.npy deleted file mode 100644 index 476609de..00000000 Binary files a/embeddings/instruments/paragraph_61.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_62.npy b/embeddings/instruments/paragraph_62.npy deleted file mode 100644 index c6b39a69..00000000 Binary files a/embeddings/instruments/paragraph_62.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_63.npy b/embeddings/instruments/paragraph_63.npy deleted file mode 100644 index 5e76b779..00000000 Binary files a/embeddings/instruments/paragraph_63.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_64.npy b/embeddings/instruments/paragraph_64.npy deleted file mode 100644 index 469db77a..00000000 Binary files a/embeddings/instruments/paragraph_64.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_65.npy b/embeddings/instruments/paragraph_65.npy deleted file mode 100644 index 004032da..00000000 Binary files a/embeddings/instruments/paragraph_65.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_66.npy b/embeddings/instruments/paragraph_66.npy deleted file mode 100644 index 3b53e33b..00000000 Binary files a/embeddings/instruments/paragraph_66.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_67.npy b/embeddings/instruments/paragraph_67.npy deleted file mode 100644 index 7208e134..00000000 Binary files a/embeddings/instruments/paragraph_67.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_68.npy b/embeddings/instruments/paragraph_68.npy deleted file mode 100644 index c30c3cbb..00000000 Binary files a/embeddings/instruments/paragraph_68.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_69.npy b/embeddings/instruments/paragraph_69.npy deleted file mode 100644 index f6bc3a82..00000000 Binary files a/embeddings/instruments/paragraph_69.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_7.npy b/embeddings/instruments/paragraph_7.npy deleted file mode 100644 index 1b7b2450..00000000 Binary files a/embeddings/instruments/paragraph_7.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_70.npy b/embeddings/instruments/paragraph_70.npy deleted file mode 100644 index c40803ff..00000000 Binary files a/embeddings/instruments/paragraph_70.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_71.npy b/embeddings/instruments/paragraph_71.npy deleted file mode 100644 index bf1015c1..00000000 Binary files a/embeddings/instruments/paragraph_71.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_72.npy b/embeddings/instruments/paragraph_72.npy deleted file mode 100644 index 8dd8cbfa..00000000 Binary files a/embeddings/instruments/paragraph_72.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_73.npy b/embeddings/instruments/paragraph_73.npy deleted file mode 100644 index 9fb17dd5..00000000 Binary files a/embeddings/instruments/paragraph_73.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_74.npy b/embeddings/instruments/paragraph_74.npy deleted file mode 100644 index 088b732d..00000000 Binary files a/embeddings/instruments/paragraph_74.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_75.npy b/embeddings/instruments/paragraph_75.npy deleted file mode 100644 index dd905360..00000000 Binary files a/embeddings/instruments/paragraph_75.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_76.npy b/embeddings/instruments/paragraph_76.npy deleted file mode 100644 index 1a0b762a..00000000 Binary files a/embeddings/instruments/paragraph_76.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_77.npy b/embeddings/instruments/paragraph_77.npy deleted file mode 100644 index 54473f1a..00000000 Binary files a/embeddings/instruments/paragraph_77.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_78.npy b/embeddings/instruments/paragraph_78.npy deleted file mode 100644 index 5f50eaf1..00000000 Binary files a/embeddings/instruments/paragraph_78.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_79.npy b/embeddings/instruments/paragraph_79.npy deleted file mode 100644 index a39923e8..00000000 Binary files a/embeddings/instruments/paragraph_79.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_8.npy b/embeddings/instruments/paragraph_8.npy deleted file mode 100644 index 243594d4..00000000 Binary files a/embeddings/instruments/paragraph_8.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_80.npy b/embeddings/instruments/paragraph_80.npy deleted file mode 100644 index 930bc614..00000000 Binary files a/embeddings/instruments/paragraph_80.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_81.npy b/embeddings/instruments/paragraph_81.npy deleted file mode 100644 index 6aa57a07..00000000 Binary files a/embeddings/instruments/paragraph_81.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_82.npy b/embeddings/instruments/paragraph_82.npy deleted file mode 100644 index 475b3875..00000000 Binary files a/embeddings/instruments/paragraph_82.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_83.npy b/embeddings/instruments/paragraph_83.npy deleted file mode 100644 index 3e991e2c..00000000 Binary files a/embeddings/instruments/paragraph_83.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_84.npy b/embeddings/instruments/paragraph_84.npy deleted file mode 100644 index 078b3ead..00000000 Binary files a/embeddings/instruments/paragraph_84.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_85.npy b/embeddings/instruments/paragraph_85.npy deleted file mode 100644 index 4e7753e7..00000000 Binary files a/embeddings/instruments/paragraph_85.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_86.npy b/embeddings/instruments/paragraph_86.npy deleted file mode 100644 index 9e0b95b4..00000000 Binary files a/embeddings/instruments/paragraph_86.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_87.npy b/embeddings/instruments/paragraph_87.npy deleted file mode 100644 index 9d9d5d63..00000000 Binary files a/embeddings/instruments/paragraph_87.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_88.npy b/embeddings/instruments/paragraph_88.npy deleted file mode 100644 index 135d322b..00000000 Binary files a/embeddings/instruments/paragraph_88.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_89.npy b/embeddings/instruments/paragraph_89.npy deleted file mode 100644 index c9935a85..00000000 Binary files a/embeddings/instruments/paragraph_89.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_9.npy b/embeddings/instruments/paragraph_9.npy deleted file mode 100644 index c4065d6c..00000000 Binary files a/embeddings/instruments/paragraph_9.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_90.npy b/embeddings/instruments/paragraph_90.npy deleted file mode 100644 index deb0d360..00000000 Binary files a/embeddings/instruments/paragraph_90.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_91.npy b/embeddings/instruments/paragraph_91.npy deleted file mode 100644 index a3f26d2a..00000000 Binary files a/embeddings/instruments/paragraph_91.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_92.npy b/embeddings/instruments/paragraph_92.npy deleted file mode 100644 index 30dcf9b9..00000000 Binary files a/embeddings/instruments/paragraph_92.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_93.npy b/embeddings/instruments/paragraph_93.npy deleted file mode 100644 index ad45cfe0..00000000 Binary files a/embeddings/instruments/paragraph_93.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_94.npy b/embeddings/instruments/paragraph_94.npy deleted file mode 100644 index cfd78af1..00000000 Binary files a/embeddings/instruments/paragraph_94.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_95.npy b/embeddings/instruments/paragraph_95.npy deleted file mode 100644 index f5512704..00000000 Binary files a/embeddings/instruments/paragraph_95.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_96.npy b/embeddings/instruments/paragraph_96.npy deleted file mode 100644 index 0886f103..00000000 Binary files a/embeddings/instruments/paragraph_96.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_97.npy b/embeddings/instruments/paragraph_97.npy deleted file mode 100644 index 50078cf6..00000000 Binary files a/embeddings/instruments/paragraph_97.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_98.npy b/embeddings/instruments/paragraph_98.npy deleted file mode 100644 index 9416b25d..00000000 Binary files a/embeddings/instruments/paragraph_98.npy and /dev/null differ diff --git a/embeddings/instruments/paragraph_99.npy b/embeddings/instruments/paragraph_99.npy deleted file mode 100644 index a2d18bc5..00000000 Binary files a/embeddings/instruments/paragraph_99.npy and /dev/null differ diff --git a/embeddings/manuals/DOCS_SUMMARY.md b/embeddings/manuals/DOCS_SUMMARY.md new file mode 100644 index 00000000..ef1cdfb0 --- /dev/null +++ b/embeddings/manuals/DOCS_SUMMARY.md @@ -0,0 +1,61 @@ +# POEM Embeddings — Quick Reference + +Purpose +- Concise entrypoint for the embeddings subsystem: what it does, how to run it, and key operational gotchas. + +Quick start (dev machine) +1. Install editable package and extras: + +```powershell +pip install -e embeddings +pip install -e "embeddings[milvus]" # if you need Milvus +``` + +2. Run the pipeline (generate templates → embeddings): + +```powershell +python embeddings/Pipeline/generate_text_templates.py +python embeddings/Pipeline/generate_embeddings.py +``` + +3. Run the REST API (uses same core): + +```powershell +# use the MCP venv recommended for the API server +.\embeddings\MCP\.venv-mcp\Scripts\python.exe .\embeddings\API\api_server.py +# Open http://localhost:8000/docs +``` + +4. Optional: start local Milvus (Standalone) for `VECTOR_BACKEND=milvus`: + +```powershell +docker compose -f embeddings/docker/milvus-compose.yml up -d +$env:VECTOR_BACKEND = "milvus" +$env:MILVUS_URI = "http://localhost:19530" +``` + +Key components (one-paragraph each) +- `poem_core/` — shared core: config, embedding client, metrics, corpus loader, RDF graph loader, dedup, and vector-store factory (`get_store`). All serving surfaces import this package. +- `Pipeline/` — authoring and embedding: `generate_text_templates.py` → `generate_embeddings.py` → `.npy` arrays per section (the source of truth). `search_similarity.py` is the CLI consumer. +- `MCP/` — MCP server exposing two tools (`search`, `get_statements`) so LLM hosts can call POEM as a tool. Loads corpus + RDF graph at startup. Runs over stdio (local subprocess) by default, or containerized over HTTP (`MCP_TRANSPORT=http`, `MCP/Dockerfile`, `docker/mcp-compose.yml`) for network/remote deployment — see `MCP/MCP.md` "Container deployment". +- `API/` — FastAPI wrapper exposing `/search`, `/statements`, `/health` and the Swagger UI. +- `docker/` — Milvus compose and admin/check scripts to run or verify a local Milvus Standalone. + +Important operational notes +- Embedding model compatibility: the stored corpus is 4096-dim (`qwen3-embedding`). `EMBED_MODEL` must match the vectors or search results will break. +- Milvus behavior: FLAT indexes are used for exact parity with numpy. The pipeline currently rebuilds Milvus collections from the `.npy` corpus at startup or via admin push; consider adding an incremental ingestion path for large corpora. +- Resilience: `get_store()` falls back to the `NumpyVectorStore` if Milvus is unreachable or `pymilvus` is missing. +- Startup: Milvus Standalone has a long `start_period` (90s). Wait for `http://localhost:9091/healthz` before running parity checks. + +Where to look next (files) +- Overview: `embeddings/MAIN.md` +- Pipeline docs: `embeddings/Pipeline/PIPELINE_DOCS.md` +- Milvus integration: `embeddings/docker/MILVUS.md` +- API: `embeddings/API/API.md` +- MCP: `embeddings/MCP/MCP.md` +- Tests & runbook: `embeddings/TESTING.md` + +Troubleshooting cheatsheet +- `/search` returns 503: embedding endpoint unreachable (VPN or point `EMBED_BASE_URL` to a local embedder). +- `check_milvus.py` prints "fell back to numpy": Milvus not reachable; check `MILVUS_URI` and Docker containers. Run `python embeddings/docker/ensure_docker.py` first — it starts Docker Desktop and the Milvus stack for you if either isn't up. +- Dimension errors: query embedder returned non-4096 vectors — ensure `EMBED_MODEL` is `qwen3-embedding` unless you regenerate the corpus. diff --git a/embeddings/manuals/FINAL_REPORT.md b/embeddings/manuals/FINAL_REPORT.md new file mode 100644 index 00000000..d9028d81 --- /dev/null +++ b/embeddings/manuals/FINAL_REPORT.md @@ -0,0 +1,44 @@ +# Embeddings Documentation & Architecture Final Report + +## Work completed +- Moved the concise quick-start and troubleshooting manual to `embeddings/manuals/DOCS_SUMMARY.md`. +- Added `embeddings/manuals/README.md` to describe the manuals folder. +- Updated all embedding-related markdown docs under `embeddings/` to include a quick-reference link to the new manual. +- Verified coverage across the folder: all top-level docs in `embeddings/` now point to the manual summary. + +## What was updated +- `embeddings/MAIN.md` +- `embeddings/TESTING.md` +- `embeddings/ROADMAP.md` +- `embeddings/API/API.md` +- `embeddings/Pipeline/PIPELINE_DOCS.md` +- `embeddings/docker/MILVUS.md` +- `embeddings/docker/MILVUS_DEMO.md` +- `embeddings/MCP/MCP.md` +- `embeddings/MCP/LM_STUDIO.md` +- `embeddings/MCP/WORKLOG.md` +- `embeddings/agent/AGENT.md` +- `embeddings/Pipeline/evaluation_results/session_summary_2026-05-28.md` + +### Later pass (MCP deployability + accuracy pass) +- Fixed a broken relative link (`docker/MILVUS_DEMO.md`), a stale corpus-size + worked example and Python-version claim (`Pipeline/PIPELINE_DOCS.md`), stale + "out of scope" claims (`MCP/MCP.md`), and de-hardcoded `o:\POEM\...`-style + absolute paths across most docs in favor of repo-root-relative ones. +- Added a "Container deployment" section to `MCP/MCP.md` documenting the new + `MCP/Dockerfile` / `docker/mcp-compose.yml` / `MCP_TRANSPORT=http` path. + +## Key outcomes +- The `embeddings/manuals` folder now contains a maintained quick-start manual and a README describing its purpose. +- All major docs now drive readers to the same canonical summary, reducing duplication and making future changes easier. +- The `embeddings/` docs are now consistent and more discoverable. + +## Recommendations +1. Use `embeddings/manuals/DOCS_SUMMARY.md` as the canonical onboarding page for the embeddings subsystem. +2. Keep `.npy` embeddings as the canonical source of truth; treat Milvus as a rebuildable query accelerator. +3. **Done:** `embeddings/check_doc_pointers.py` checks every new markdown file under `embeddings/` for the manual pointer (and, as of this pass, that the reference actually resolves relative to the file's own location, not just a substring match). +4. Next engineering steps are tracked in `embeddings/ROADMAP.md`'s phases (RAG quality tuning, a streaming `/chat` endpoint, hardening) — that file, not this report, is the living source of truth for what's next. + +## Status +- All `embeddings` documentation updates are complete. +- The remaining todos have been finished. diff --git a/embeddings/manuals/README.md b/embeddings/manuals/README.md new file mode 100644 index 00000000..b71a2e24 --- /dev/null +++ b/embeddings/manuals/README.md @@ -0,0 +1,11 @@ +embeddings/manuals — Purpose + +This folder holds concise manuals and single-page quick references for the embeddings subsystem. + +Files: +- DOCS_SUMMARY.md — single-page quick-start, troubleshooting cheatsheet, and pointers to detailed docs. +- FINAL_REPORT.md — a record of the documentation-accuracy pass across `embeddings/`, and what it changed. + +Every other `.md` file under `embeddings/` links back to `DOCS_SUMMARY.md` as its +quick-reference (enforced by [`../check_doc_pointers.py`](../check_doc_pointers.py)); +this folder is where that shared entry point lives. diff --git a/embeddings/poem_core/__init__.py b/embeddings/poem_core/__init__.py new file mode 100644 index 00000000..4c69aa35 --- /dev/null +++ b/embeddings/poem_core/__init__.py @@ -0,0 +1,22 @@ +"""poem_core — shared core for the POEM embeddings + search stack. + +Single home for configuration, the embedding client, similarity metrics, the +corpus loader, the RDF graph loader, result deduplication, and the pluggable +vector store. Both the Pipeline scripts and the MCP server import from here so +there is exactly one implementation of each concern (no duplicated OpenAI +clients, metric tables, manifest readers, or cross-folder ``sys.path`` hacks). + +The thin modules under ``Pipeline/`` and ``MCP/`` re-export from this package to +preserve their existing public import surface. +""" + +__all__ = [ + "config", + "entities", + "metrics", + "embedding_client", + "corpus", + "dedup", + "graph", + "vector_store", +] diff --git a/embeddings/poem_core/config.py b/embeddings/poem_core/config.py new file mode 100644 index 00000000..167de241 --- /dev/null +++ b/embeddings/poem_core/config.py @@ -0,0 +1,79 @@ +"""Centralized configuration for the POEM embeddings stack. + +Single source of truth for filesystem paths, the embedding endpoint, batching, +and vector-store backend selection. Every value honors an environment-variable +override so deployments can retarget without code edits; the defaults reproduce +the original per-module behavior exactly. + +Previously these settings were copy-pasted as ``os.environ.get(...)`` calls +across ``search_similarity``, ``generate_embeddings``, ``evaluate_search``, +``generate_text_templates``, ``graph_lookup`` and ``mcp_server``. +""" +from __future__ import annotations + +import os + +# --- Repo layout ----------------------------------------------------------- +# This file lives at /embeddings/poem_core/config.py, so two parents up is +# the embeddings/ root and three is the project root. POEM_PROJECT_ROOT +# overrides the project root (the MCP graph layer sets it explicitly). +_THIS = os.path.dirname(os.path.abspath(__file__)) +EMBEDDINGS_ROOT = os.path.dirname(_THIS) # /embeddings +_DEFAULT_PROJECT_ROOT = os.path.dirname(EMBEDDINGS_ROOT) # + +PROJECT_ROOT = os.environ.get("POEM_PROJECT_ROOT", _DEFAULT_PROJECT_ROOT) +PIPELINE_DIR = os.path.join(EMBEDDINGS_ROOT, "Pipeline") + +# Where the stored ``.npy`` vectors live (one subfolder per section). +EMBEDDINGS_DIR = os.environ.get("EMBEDDINGS_DIR", PIPELINE_DIR) + +# Canonical instance-data folder for the RDF graph; ontology schema is layered +# on top by graph.load_graph(). +DATA_DIR = os.environ.get("POEM_DATA_DIR", os.path.join(PROJECT_ROOT, "poem-demo", "dist", "data")) + +# Template files (generated artifacts). TEMPLATES_PATH is the input that +# generate_embeddings reads; TEMPLATES_OUTPUT is where generate_text_templates +# writes. +TEMPLATES_PATH = os.environ.get("TEMPLATES_PATH", os.path.join(PIPELINE_DIR, "templates_official.txt")) +TEMPLATES_OUTPUT = os.environ.get("TEMPLATES_OUTPUT", os.path.join(PIPELINE_DIR, "templates.txt")) + +# --- Embedding endpoint (OpenAI-compatible) -------------------------------- +EMBED_BASE_URL = os.environ.get("EMBED_BASE_URL", "http://idea-llm-01.idea.rpi.edu:11435/v1") +EMBED_MODEL = os.environ.get("EMBED_MODEL", "qwen3-embedding") +EMBED_API_KEY = os.environ.get("EMBED_API_KEY", "not-needed") +EMBED_TIMEOUT = float(os.environ.get("EMBED_TIMEOUT", "60")) +EMBED_MAX_RETRIES = int(os.environ.get("EMBED_MAX_RETRIES", "2")) +BATCH_SIZE = int(os.environ.get("BATCH_SIZE", "50")) + +# --- Sections -------------------------------------------------------------- +# Known sections are listed first for stable output order; any other section +# folder found on disk is appended (auto-discovery). +PREFERRED_SECTION_ORDER = ["instruments", "scales", "collections"] + +# --- Vector store ---------------------------------------------------------- +# Milvus is the default engine (external Standalone server, separate process). +# It is exact (FLAT index) so results match the numpy backend; if the server is +# unreachable, get_store() transparently falls back to numpy. +DEFAULT_VECTOR_BACKEND = "milvus" + + +def vector_backend() -> str: + """Active backend, read live so tests/CLI can override via VECTOR_BACKEND.""" + return os.environ.get("VECTOR_BACKEND", DEFAULT_VECTOR_BACKEND).lower() + + +def milvus_uri() -> str: + """Milvus endpoint. Default targets a local external Standalone server. + + A ``http://host:19530`` URL works on any OS (incl. Windows). A bare path + (e.g. ``poem_milvus.db``) would select embedded Milvus Lite (Linux/macOS). + """ + return os.environ.get("MILVUS_URI", "http://localhost:19530") + + +def milvus_collection() -> str: + return os.environ.get("MILVUS_COLLECTION", "poem") + + +def milvus_token() -> str: + return os.environ.get("MILVUS_TOKEN", "") diff --git a/embeddings/poem_core/corpus.py b/embeddings/poem_core/corpus.py new file mode 100644 index 00000000..91407f2a --- /dev/null +++ b/embeddings/poem_core/corpus.py @@ -0,0 +1,150 @@ +"""Corpus on disk: section discovery, the manifest, and the vector loader. + +Merges what used to be split between ``generate_embeddings`` (manifest +read/write) and ``search_similarity`` (``discover_sections`` + the inline +manifest loader inside ``load_embeddings``). One implementation now both writes +and reads the content-hash manifest, so the two can never drift. +""" +from __future__ import annotations + +import os +import sys +import glob +import json + +import numpy as np + +from . import config + +MANIFEST_NAME = "manifest.json" + + +# --------------------------------------------------------------------------- +# Manifest +# --------------------------------------------------------------------------- + +def read_manifest(out_dir: str) -> list[dict]: + """Return the ordered ``[{"hash", "file"}, ...]`` manifest, or ``[]``.""" + path = os.path.join(out_dir, MANIFEST_NAME) + if not os.path.exists(path): + return [] + with open(path, encoding="utf-8") as f: + return json.load(f) + + +def write_manifest(out_dir: str, entries: list[dict]) -> None: + path = os.path.join(out_dir, MANIFEST_NAME) + with open(path, "w", encoding="utf-8") as f: + json.dump(entries, f, ensure_ascii=False, indent=0) + + +# --------------------------------------------------------------------------- +# Sections +# --------------------------------------------------------------------------- + +def discover_sections(embeddings_dir: str | None = None) -> list[str]: + """Return section names on disk (subfolders containing ``texts.npy``). + + Falls back to the preferred known sections if none are found yet (e.g. + before embeddings are generated) so callers always get a usable list. + """ + base = embeddings_dir or config.EMBEDDINGS_DIR + found: list[str] = [] + if os.path.isdir(base): + for name in sorted(os.listdir(base)): + d = os.path.join(base, name) + if os.path.isdir(d) and os.path.exists(os.path.join(d, "texts.npy")): + found.append(name) + preferred = config.PREFERRED_SECTION_ORDER + ordered = [s for s in preferred if s in found] + ordered += [s for s in found if s not in preferred] + return ordered or list(preferred) + + +# Discovered once at import (disk does not change between import and use), so +# ``from search_similarity import SECTIONS`` stays a stable module constant. +SECTIONS = discover_sections() + + +# --------------------------------------------------------------------------- +# Vector loading +# --------------------------------------------------------------------------- + +def load_embeddings( + filter_sections: list[str] | None = None, + embeddings_dir: str | None = None, +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """Load paragraph embeddings and source texts from disk. + + Args: + filter_sections: section names to load (e.g. ``["instruments"]``); None + loads all discovered sections. + embeddings_dir: base directory (defaults to ``config.EMBEDDINGS_DIR``). + + Returns ``(embeddings (N,dim) float32, texts (N,) object, sections (N,) object)``. + + Supports the content-hash ``manifest.json`` scheme (preferred) and the older + ``NNNN_slug.npy`` / ``paragraph_N.npy`` filename schemes (fallbacks). + """ + base = embeddings_dir or config.EMBEDDINGS_DIR + all_embeddings: list[np.ndarray] = [] + all_texts: list[np.ndarray] = [] + all_sections: list[np.ndarray] = [] + + sections_to_load = filter_sections if filter_sections is not None else SECTIONS + for section in sections_to_load: + section_dir = os.path.join(base, section) + if not os.path.isdir(section_dir): + print(f" Warning: section folder not found: {section_dir}") + print(f" Run generate_embeddings.py first to create embeddings.") + continue + + texts_path = os.path.join(section_dir, "texts.npy") + if not os.path.exists(texts_path): + print(f" Warning: texts.npy missing in {section_dir}") + continue + + texts = np.load(texts_path, allow_pickle=True) + + # Preferred: manifest.json maps each text row (in order) to its vector. + manifest_path = os.path.join(section_dir, MANIFEST_NAME) + if os.path.exists(manifest_path): + manifest = read_manifest(section_dir) + vec_paths = [os.path.join(section_dir, e["file"]) for e in manifest] + section_embeddings = np.stack([np.load(p) for p in vec_paths]) + n = min(len(vec_paths), len(texts)) + all_embeddings.append(section_embeddings[:n]) + all_texts.append(texts[:n]) + all_sections.append(np.array([section] * n, dtype=object)) + print(f" Loaded {n} paragraphs from '{section}' (manifest)") + continue + + # Fallback A: NNNN_entity-slug.npy + para_files = sorted( + glob.glob(os.path.join(section_dir, "????_*.npy")), + key=lambda p: int(os.path.splitext(os.path.basename(p))[0].split("_")[0]), + ) + # Fallback B: legacy paragraph_N.npy + if not para_files: + para_files = sorted( + glob.glob(os.path.join(section_dir, "paragraph_*.npy")), + key=lambda p: int(os.path.splitext(os.path.basename(p))[0].split("_")[1]), + ) + if not para_files: + print(f" Warning: no paragraph files found in {section_dir}") + continue + + section_embeddings = np.stack([np.load(p) for p in para_files]) + all_embeddings.append(section_embeddings) + all_texts.append(texts[: len(para_files)]) + all_sections.append(np.array([section] * len(para_files), dtype=object)) + print(f" Loaded {len(para_files)} paragraphs from '{section}'") + + if not all_embeddings: + print("No embeddings found. Run generate_embeddings.py first.") + sys.exit(1) + + embeddings = np.concatenate(all_embeddings, axis=0) + texts = np.concatenate(all_texts, axis=0) + sections = np.concatenate(all_sections, axis=0) + return embeddings, texts, sections diff --git a/embeddings/poem_core/dedup.py b/embeddings/poem_core/dedup.py new file mode 100644 index 00000000..71efb423 --- /dev/null +++ b/embeddings/poem_core/dedup.py @@ -0,0 +1,52 @@ +"""Deduplicate ranked search hits by entity. + +``get_unique_top_results`` used to live in ``evaluate_search`` and was imported +from there by ``mcp_server`` (forcing the MCP server to reach into the Pipeline +folder). It is a generic result-shaping helper with no evaluation-specific +state, so it lives in the core and both callers import it from here. +""" +from __future__ import annotations + +import numpy as np + +from .entities import extract_entity_name + + +def get_unique_top_results( + scores: np.ndarray, + texts: np.ndarray, + sections: np.ndarray, + top_k_search: int, + top_k_unique: int, +) -> list[dict]: + """Return up to ``top_k_unique`` results, deduplicated by entity name. + + Walks the ``top_k_search`` highest-scoring results in descending score + order; the first paragraph seen for each entity is kept and later paragraphs + from the same entity are skipped. ``raw_rank`` records the pre-dedup position. + """ + top_indices = np.argsort(scores)[::-1][:top_k_search] + seen_entities: set[str] = set() + unique_results: list[dict] = [] + + for raw_rank, idx in enumerate(top_indices, start=1): + entity = extract_entity_name(texts[idx]) + if entity in seen_entities: + continue + seen_entities.add(entity) + preview = texts[idx].replace("\n", " ") + if len(preview) > 120: + preview = preview[:117] + "..." + unique_results.append({ + "unique_rank": len(unique_results) + 1, + "raw_rank": raw_rank, + "idx": int(idx), + "entity": entity, + "section": sections[idx], + "score": float(scores[idx]), + "preview": preview, + }) + if len(unique_results) >= top_k_unique: + break + + return unique_results diff --git a/embeddings/poem_core/docker_preflight.py b/embeddings/poem_core/docker_preflight.py new file mode 100644 index 00000000..32e59880 --- /dev/null +++ b/embeddings/poem_core/docker_preflight.py @@ -0,0 +1,193 @@ +"""Self-healing preflight for the local Milvus Docker stack. + +``ensure_milvus_ready()`` is what makes "just start using Milvus" work without +a manual ``docker compose up -d`` after every reboot: + + 1. Confirm the Docker daemon answers ``docker info``; if not, launch Docker + Desktop (Windows/macOS; best-effort ``systemctl`` on Linux) and wait. + 2. Confirm the ``milvus-compose.yml`` stack is running; if not, run + ``docker compose up -d`` (the compose file's ``restart: unless-stopped`` + handles the common case of "Docker just came up" on its own — this covers + "Docker itself was never started"). + 3. Wait for the standalone container's ``/healthz`` to report ready. + +Called from ``vector_store.get_store()`` (only when the target is local — a +remote/cloud ``MILVUS_URI`` never triggers a local Docker launch) and from the +``docker/`` maintenance scripts. Never raises: callers treat a ``False`` +return the same way an unreachable server already works today — fall back to +numpy, or report the failure themselves. Set ``MILVUS_SKIP_ENSURE=1`` to +disable this entirely (CI, headless boxes, or Docker installed somewhere this +module doesn't know to look). +""" +from __future__ import annotations + +import json +import os +import platform +import subprocess +import sys +import time +import urllib.error +import urllib.request +from urllib.parse import urlparse + +_HERE = os.path.dirname(os.path.abspath(__file__)) +COMPOSE_FILE = os.path.join(os.path.dirname(_HERE), "docker", "milvus-compose.yml") +HEALTHZ_PATH = "/healthz" +HEALTHZ_PORT = 9091 + +_WINDOWS_DOCKER_DESKTOP_PATHS = [ + r"C:\Program Files\Docker\Docker\Docker Desktop.exe", + r"C:\Program Files (x86)\Docker\Docker\Docker Desktop.exe", +] + + +def is_local_uri(uri: str) -> bool: + """True if ``uri`` points at this machine (the only case we can self-heal).""" + host = urlparse(uri).hostname or "" + return host in ("localhost", "127.0.0.1", "::1") + + +def _run(cmd: list[str], timeout: float | None = None) -> subprocess.CompletedProcess: + return subprocess.run(cmd, capture_output=True, text=True, timeout=timeout) + + +def docker_daemon_alive(timeout: float = 5) -> bool: + try: + return _run(["docker", "info"], timeout=timeout).returncode == 0 + except (subprocess.TimeoutExpired, FileNotFoundError, OSError): + return False + + +def _find_docker_desktop_windows() -> str | None: + override = os.environ.get("DOCKER_DESKTOP_EXE") + if override and os.path.isfile(override): + return override + for path in _WINDOWS_DOCKER_DESKTOP_PATHS: + if os.path.isfile(path): + return path + return None + + +def start_docker_desktop(log=print) -> bool: + """Best-effort launch of the Docker daemon. Returns True iff a launch was attempted.""" + system = platform.system() + if system == "Windows": + exe = _find_docker_desktop_windows() + if not exe: + log("[docker_preflight] Docker Desktop.exe not found in standard install paths " + "(set DOCKER_DESKTOP_EXE to override). Start it manually.") + return False + log(f"[docker_preflight] Docker daemon unreachable; launching {exe} ...") + subprocess.Popen([exe], close_fds=True) + return True + if system == "Darwin": + log("[docker_preflight] Docker daemon unreachable; launching Docker Desktop ...") + subprocess.Popen(["open", "-a", "Docker"], close_fds=True) + return True + if system == "Linux": + log("[docker_preflight] Docker daemon unreachable; trying `systemctl start docker` ...") + try: + return _run(["systemctl", "start", "docker"], timeout=30).returncode == 0 + except (FileNotFoundError, OSError): + return False + log(f"[docker_preflight] Unrecognized platform '{system}'; start Docker manually.") + return False + + +def wait_for_docker(timeout: float = 150, interval: float = 5) -> bool: + deadline = time.monotonic() + timeout + while True: + if docker_daemon_alive(): + return True + if time.monotonic() >= deadline: + return False + time.sleep(interval) + + +def _compose(*args: str, timeout: float = 60) -> subprocess.CompletedProcess: + return _run(["docker", "compose", "-f", COMPOSE_FILE, *args], timeout=timeout) + + +def stack_running() -> bool: + """True iff every service in the compose file reports state 'running'.""" + try: + result = _compose("ps", "--format", "json", timeout=20) + except (subprocess.TimeoutExpired, FileNotFoundError, OSError): + return False + if result.returncode != 0 or not result.stdout.strip(): + return False + services = [] + for line in result.stdout.splitlines(): + line = line.strip() + if not line: + continue + try: + services.append(json.loads(line)) + except json.JSONDecodeError: + return False + return len(services) >= 3 and all(s.get("State") == "running" for s in services) + + +def start_stack(log=print) -> bool: + log("[docker_preflight] Bringing up the Milvus compose stack ...") + try: + result = _compose("up", "-d", timeout=180) + except (subprocess.TimeoutExpired, FileNotFoundError, OSError) as e: + log(f"[docker_preflight] `docker compose up -d` failed to run: {e}") + return False + if result.returncode != 0: + log(f"[docker_preflight] `docker compose up -d` failed:\n{result.stderr}") + return False + return True + + +def wait_for_healthz(timeout: float = 150, interval: float = 5) -> bool: + url = f"http://localhost:{HEALTHZ_PORT}{HEALTHZ_PATH}" + deadline = time.monotonic() + timeout + while True: + try: + with urllib.request.urlopen(url, timeout=5) as resp: + if resp.status == 200: + return True + except (urllib.error.URLError, OSError): + pass + if time.monotonic() >= deadline: + return False + time.sleep(interval) + + +def ensure_milvus_ready(daemon_timeout: float = 150, healthz_timeout: float = 150, quiet: bool = False) -> bool: + """Make sure the Docker daemon and the local Milvus stack are up and healthy. + + Returns True once Milvus is reachable, False if it gave up (never raises). + Skips everything (returns True) if MILVUS_SKIP_ENSURE is set. + """ + if os.environ.get("MILVUS_SKIP_ENSURE"): + return True + + log = (lambda *_: None) if quiet else print + + if not docker_daemon_alive(): + if not start_docker_desktop(log=log): + return False + log("[docker_preflight] Waiting for Docker daemon ...") + if not wait_for_docker(timeout=daemon_timeout): + log(f"[docker_preflight] Docker daemon did not come up within {daemon_timeout:.0f}s.") + return False + log("[docker_preflight] Docker daemon is up.") + + if not stack_running(): + if not start_stack(log=log): + return False + + log("[docker_preflight] Waiting for Milvus standalone health check ...") + if not wait_for_healthz(timeout=healthz_timeout): + log(f"[docker_preflight] Milvus did not report healthy within {healthz_timeout:.0f}s.") + return False + log("[docker_preflight] Milvus is up and healthy.") + return True + + +if __name__ == "__main__": + sys.exit(0 if ensure_milvus_ready() else 1) diff --git a/embeddings/poem_core/embedding_client.py b/embeddings/poem_core/embedding_client.py new file mode 100644 index 00000000..8a746c81 --- /dev/null +++ b/embeddings/poem_core/embedding_client.py @@ -0,0 +1,42 @@ +"""The one OpenAI-compatible embedding client for the whole stack. + +Previously an ``OpenAI(...)`` client was constructed (with the same base_url / +model env handling) in ``sample_embeddings``, ``generate_embeddings`` and +``search_similarity``, and primed again in ``mcp_server``. This module owns that +construction once, lazily (so importing it makes no network call), and adds a +request timeout + bounded retries for robustness — successful-path results are +unchanged. +""" +from __future__ import annotations + +import numpy as np +from openai import OpenAI + +from . import config + +_client: OpenAI | None = None + + +def get_client() -> OpenAI: + """Return the shared OpenAI-compatible client, built on first use.""" + global _client + if _client is None: + _client = OpenAI( + base_url=config.EMBED_BASE_URL, + api_key=config.EMBED_API_KEY, + timeout=config.EMBED_TIMEOUT, + max_retries=config.EMBED_MAX_RETRIES, + ) + return _client + + +def embed_texts(texts: list[str]) -> list[np.ndarray]: + """Embed a list of texts in a single request; returns float32 vectors.""" + response = get_client().embeddings.create(model=config.EMBED_MODEL, input=list(texts)) + return [np.array(d.embedding, dtype=np.float32) for d in response.data] + + +def embed_query(query: str) -> np.ndarray: + """Return a 1D float32 embedding for a single query string.""" + response = get_client().embeddings.create(model=config.EMBED_MODEL, input=[query]) + return np.array(response.data[0].embedding, dtype=np.float32) diff --git a/embeddings/poem_core/entities.py b/embeddings/poem_core/entities.py new file mode 100644 index 00000000..7f000a77 --- /dev/null +++ b/embeddings/poem_core/entities.py @@ -0,0 +1,55 @@ +"""Entity/URI naming helpers shared across the pipeline. + +Previously ``extract_entity_name`` lived in ``search_similarity``, +``readable_local_name`` in ``generate_text_templates``, and +``entity_slug_from_text`` in ``generate_embeddings`` — three modules parsing the +same "ENTITY. Attributes include:" template header and URI shapes. Centralized +here so the template format is interpreted in exactly one place. +""" +from __future__ import annotations + +import re + +_ATTR_MARKER = ". Attributes include:" + + +def _entity_header(text: str) -> str: + """The entity name from a paragraph's first line (before the attr marker).""" + first_line = text.split("\n")[0] + if _ATTR_MARKER in first_line: + return first_line.split(_ATTR_MARKER)[0].strip() + return first_line.strip() + + +def extract_entity_name(text: str) -> str: + """Extract the entity code/name from the first line of a paragraph block. + + Template format: ``"ENTITY_NAME. Attributes include: ..."`` + """ + return _entity_header(text) + + +def entity_slug_from_text(text: str) -> str: + """Filesystem-safe slug derived from the entity name in a text block. + + The slug is part of the ``.npy`` filename so the embeddings directory stays + human-browsable. + """ + name = _entity_header(text) + slug = re.sub(r"[^\w\-]", "-", name) # keep word chars and hyphens + slug = re.sub(r"-{2,}", "-", slug).strip("-") + return slug[:40] or "unknown" + + +def readable_local_name(uri: str) -> str: + """Derive a human-readable label from a URI when no rdfs:label exists. + + Extracts everything after the last ``/`` or ``#``, then splits camelCase into + words (``PsychometricQuestionnaire`` -> ``Psychometric Questionnaire``) and + replaces underscores with spaces. + """ + local = uri.split("#")[-1] if "#" in uri else uri.rstrip("/").split("/")[-1] + local = re.sub(r"([a-z])([A-Z])", r"\1 \2", local) # camelCase split + local = re.sub(r"([A-Z]+)([A-Z][a-z])", r"\1 \2", local) # e.g. SIOCode -> SIO Code + local = local.replace("_", " ") + return local.strip() diff --git a/embeddings/poem_core/graph.py b/embeddings/poem_core/graph.py new file mode 100644 index 00000000..7a604cec --- /dev/null +++ b/embeddings/poem_core/graph.py @@ -0,0 +1,109 @@ +"""POEM RDF graph loader (shared infrastructure). + +``load_graph`` and its file-discovery helpers used to live in +``generate_text_templates``; ``graph_lookup`` (the MCP server's graph access) +imported them from there via a cross-folder ``sys.path`` hack. They are pure +graph-loading infrastructure with no template-generation specifics, so they live +in the core and both the template generator and the MCP server import them here. + +Loads the priority instance-data folder first (``poem-demo/dist/data``), then +merges every other data TTL in the repo (triple-level dedup), then layers the +ontology schema (``ontology/*.ttl`` and ``POEM.rdf``) on top. +""" +from __future__ import annotations + +import os +import glob + +from rdflib import Graph + +from . import config + +# Path fragments that must never be crawled for data TTLs (dependency/vcs dirs +# may ship unrelated .ttl fixtures). +_EXCLUDE_FRAGMENTS = (".venv", "site-packages", "node_modules", ".git", os.sep + "ontology" + os.sep) + + +def _load_data_dir(g: Graph, data_dir: str) -> None: + """Load every TTL directly inside one input folder (the canonical data).""" + for ttl_file in sorted(glob.glob(os.path.join(data_dir, "*.ttl"))): + rel = os.path.relpath(ttl_file, config.PROJECT_ROOT) + print(f" Loading {rel}...") + try: + g.parse(ttl_file, format="turtle") + except Exception as e: + print(f" Warning: could not load {rel}: {e}") + + +def _load_legacy(g: Graph, skip_dir: str | None = None) -> None: + """Merge the rest of the repo's data TTLs so nothing is missing. + + Loads ``individualsFull.ttl`` plus every instrument/scale/collection TTL in + the repo (excluding the ``rcads/`` mapping files and dependency dirs). RDF + merges at the triple level, so files already loaded from the priority folder + contribute no new triples. ``skip_dir`` (the priority folder) is skipped. + """ + skip_abs = os.path.abspath(skip_dir) + os.sep if skip_dir else None + + full_path = os.path.join(config.PROJECT_ROOT, "individualsFull.ttl") + if os.path.exists(full_path): + print(f" Loading {os.path.basename(full_path)}...") + g.parse(full_path, format="turtle") + + KEYWORDS = ("collection", "instrument", "scale") + for ttl_file in glob.glob(os.path.join(config.PROJECT_ROOT, "**", "*.ttl"), recursive=True): + if any(frag in ttl_file for frag in _EXCLUDE_FRAGMENTS): + continue + if skip_abs and os.path.abspath(ttl_file).startswith(skip_abs): + continue + basename = os.path.basename(ttl_file).lower() + in_rcads = os.sep + "rcads" + os.sep in ttl_file + if any(kw in basename for kw in KEYWORDS) and not in_rcads: + rel = os.path.relpath(ttl_file, config.PROJECT_ROOT) + print(f" Loading {rel}...") + try: + g.parse(ttl_file, format="turtle") + except Exception as e: + print(f" Warning: could not load {rel}: {e}") + + +def load_graph(data_dir: str | None = None) -> Graph: + """Load the POEM graph: priority folder first, then repo data, then schema. + + Args: + data_dir: Priority folder of instance TTLs (default: ``config.DATA_DIR``, + i.e. ``poem-demo/dist/data``). + """ + g = Graph() + + data_dir = data_dir or config.DATA_DIR + # 1. Priority folder, loaded first. + if data_dir and os.path.isdir(data_dir): + print(f" Priority input folder: {os.path.relpath(data_dir, config.PROJECT_ROOT)}") + _load_data_dir(g, data_dir) + elif data_dir: + print(f" Priority input folder not found ({data_dir}); skipping to repo-wide load.") + + # 2. Everything else in the repo (triple-level dedup), skipping the priority folder. + _load_legacy(g, skip_dir=data_dir if (data_dir and os.path.isdir(data_dir)) else None) + + # 3. Ontology files (OWL, PROV, RDF Schema) — schema, always layered on top. + ontology_dir = os.path.join(config.PROJECT_ROOT, "ontology") + for ttl_file in glob.glob(os.path.join(ontology_dir, "*.ttl")): + print(f" Loading ontology/{os.path.basename(ttl_file)}...") + try: + g.parse(ttl_file, format="turtle") + except Exception as e: + print(f" Warning: could not load {ttl_file}: {e}") + + # 4. Main POEM ontology schema (class definitions). + poem_rdf = os.path.join(config.PROJECT_ROOT, "POEM.rdf") + if os.path.exists(poem_rdf): + print(f" Loading POEM.rdf...") + try: + g.parse(poem_rdf, format="xml") + except Exception as e: + print(f" Warning: could not load POEM.rdf: {e}") + + print(f" Total triples: {len(g)}\n") + return g diff --git a/embeddings/poem_core/metrics.py b/embeddings/poem_core/metrics.py new file mode 100644 index 00000000..3da9ee69 --- /dev/null +++ b/embeddings/poem_core/metrics.py @@ -0,0 +1,59 @@ +"""Similarity metrics — the single registry for the whole stack. + +Previously the metric functions + names lived in ``search_similarity.METRICS`` +while ``vector_store`` kept a separate ``_METRIC_TO_MILVUS`` table with the same +names spelled the same way but maintained independently. Both now derive from +this one module, so a metric is defined exactly once. + +All distance metrics are negated so that, for every metric, *higher = more +similar* — the convention the rest of the pipeline relies on. +""" +from __future__ import annotations + +import numpy as np + + +def cosine_similarity(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: + """Cosine similarity between query and every row in matrix. Range [-1, 1].""" + query_norm = query_vec / (np.linalg.norm(query_vec) + 1e-10) + matrix_norms = matrix / (np.linalg.norm(matrix, axis=1, keepdims=True) + 1e-10) + return matrix_norms @ query_norm + + +def dot_product(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: + """Raw dot product similarity. Higher is more similar.""" + return matrix @ query_vec + + +def euclidean_distance(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: + """Euclidean (L2) distance, negated so higher = more similar.""" + diff = matrix - query_vec + return -np.sqrt((diff ** 2).sum(axis=1)) + + +def manhattan_distance(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: + """Manhattan (L1) distance, negated so higher = more similar.""" + return -np.abs(matrix - query_vec).sum(axis=1) + + +METRICS = { + "Cosine Similarity": cosine_similarity, + "Dot Product": dot_product, + "Euclidean (L2)": euclidean_distance, + "Manhattan (L1)": manhattan_distance, +} + +# metric name -> Milvus metric type. ``None`` means Milvus has no native index +# for it (Manhattan/L1), so the milvus backend serves that metric via an exact +# numpy fallback instead. +MILVUS_METRIC_TYPE = { + "Cosine Similarity": "COSINE", + "Dot Product": "IP", + "Euclidean (L2)": "L2", + "Manhattan (L1)": None, +} + + +def milvus_metric_for(name: str) -> str | None: + """Milvus metric type for a metric name, or None if unsupported natively.""" + return MILVUS_METRIC_TYPE.get(name) diff --git a/embeddings/poem_core/test_docker_preflight.py b/embeddings/poem_core/test_docker_preflight.py new file mode 100644 index 00000000..5f253ab6 --- /dev/null +++ b/embeddings/poem_core/test_docker_preflight.py @@ -0,0 +1,417 @@ +#!/usr/bin/env python3 +"""Intensive tests for poem_core/docker_preflight.py -- the "Docker isn't +running" self-heal logic that vector_store.get_store() (and the docker/ +maintenance scripts) run automatically. + +Fully OFFLINE and fast: every subprocess/network call is mocked, so this +never actually launches Docker Desktop, runs `docker compose`, or hits a real +HTTP endpoint. Covers every branch of the Docker-daemon-down / +stack-not-running / never-becomes-healthy state machine, on every platform +branch (Windows/macOS/Linux/unknown), plus the MILVUS_SKIP_ENSURE escape hatch +and the local-vs-remote URI gating. + +Run with the MCP venv interpreter: + embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + embeddings\\poem_core\\test_docker_preflight.py -v +""" +from __future__ import annotations + +import subprocess +import time + +import pytest + +from poem_core import docker_preflight as dp + + +def cp(returncode: int = 0, stdout: str = "", stderr: str = "") -> subprocess.CompletedProcess: + """Build a fake subprocess.CompletedProcess for a scripted _run/_compose call.""" + return subprocess.CompletedProcess(args=[], returncode=returncode, stdout=stdout, stderr=stderr) + + +class Scripted: + """Stand-in for a mocked function: replays one result per call, in order. + + Each scripted item is either an exception *instance* (raised) or a plain + value (returned). Raises AssertionError if called more times than scripted + -- a signal the test's call-count expectation was wrong. + """ + + def __init__(self, *script): + self.script = list(script) + self.calls: list[tuple] = [] + + def __call__(self, *args, **kwargs): + self.calls.append((args, kwargs)) + if not self.script: + raise AssertionError(f"Scripted exhausted after {len(self.calls)} calls") + item = self.script.pop(0) + if isinstance(item, BaseException): + raise item + return item + + @property + def call_count(self) -> int: + return len(self.calls) + + +@pytest.fixture(autouse=True) +def _no_real_sleep(monkeypatch): + """Every test in this file runs with time.sleep patched to a no-op so + polling-loop tests (wait_for_docker, wait_for_healthz) never actually wait + in wall-clock time, regardless of the interval passed.""" + monkeypatch.setattr(dp.time, "sleep", lambda s: None) + + +# --------------------------------------------------------------------------- +# is_local_uri +# --------------------------------------------------------------------------- + +@pytest.mark.parametrize("uri,expected", [ + ("http://localhost:19530", True), + ("http://127.0.0.1:19530", True), + ("http://[::1]:19530", True), + ("http://LOCALHOST:19530", True), # hostname lowercased by urlparse + ("http://milvus-standalone:19530", False), # a compose service hostname, not local + ("http://192.168.1.5:19530", False), # a LAN IP is not "local" to this check + ("https://in03-abc.serverless.gcp-us-west1.cloud.zilliz.com:443", False), + ("", False), + ("not a uri at all", False), +]) +def test_is_local_uri(uri, expected): + assert dp.is_local_uri(uri) is expected + + +# --------------------------------------------------------------------------- +# docker_daemon_alive +# --------------------------------------------------------------------------- + +def test_docker_daemon_alive_true(monkeypatch): + monkeypatch.setattr(dp, "_run", Scripted(cp(returncode=0))) + assert dp.docker_daemon_alive() is True + + +def test_docker_daemon_alive_false_nonzero_exit(monkeypatch): + monkeypatch.setattr(dp, "_run", Scripted(cp(returncode=1))) + assert dp.docker_daemon_alive() is False + + +def test_docker_daemon_alive_false_docker_not_installed(monkeypatch): + monkeypatch.setattr(dp, "_run", Scripted(FileNotFoundError())) + assert dp.docker_daemon_alive() is False + + +def test_docker_daemon_alive_false_on_timeout(monkeypatch): + monkeypatch.setattr(dp, "_run", Scripted(subprocess.TimeoutExpired(cmd="docker info", timeout=5))) + assert dp.docker_daemon_alive() is False + + +def test_docker_daemon_alive_false_on_os_error(monkeypatch): + monkeypatch.setattr(dp, "_run", Scripted(OSError("permission denied"))) + assert dp.docker_daemon_alive() is False + + +# --------------------------------------------------------------------------- +# start_docker_desktop -- every platform branch +# --------------------------------------------------------------------------- + +def test_start_docker_desktop_windows_uses_env_override(monkeypatch, tmp_path): + fake_exe = tmp_path / "Docker Desktop.exe" + fake_exe.write_text("not a real exe") + monkeypatch.setattr(dp.platform, "system", lambda: "Windows") + monkeypatch.setenv("DOCKER_DESKTOP_EXE", str(fake_exe)) + popen = Scripted(None) + monkeypatch.setattr(dp.subprocess, "Popen", popen) + assert dp.start_docker_desktop(log=lambda *_: None) is True + assert popen.call_count == 1 + assert popen.calls[0][0] == ([str(fake_exe)],) + + +def test_start_docker_desktop_windows_finds_standard_path(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Windows") + monkeypatch.delenv("DOCKER_DESKTOP_EXE", raising=False) + standard = dp._WINDOWS_DOCKER_DESKTOP_PATHS[0] + monkeypatch.setattr(dp.os.path, "isfile", lambda p: p == standard) + popen = Scripted(None) + monkeypatch.setattr(dp.subprocess, "Popen", popen) + assert dp.start_docker_desktop(log=lambda *_: None) is True + assert popen.calls[0][0] == ([standard],) + + +def test_start_docker_desktop_windows_not_found(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Windows") + monkeypatch.delenv("DOCKER_DESKTOP_EXE", raising=False) + monkeypatch.setattr(dp.os.path, "isfile", lambda p: False) + popen = Scripted() + monkeypatch.setattr(dp.subprocess, "Popen", popen) + assert dp.start_docker_desktop(log=lambda *_: None) is False + assert popen.call_count == 0 + + +def test_start_docker_desktop_macos(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Darwin") + popen = Scripted(None) + monkeypatch.setattr(dp.subprocess, "Popen", popen) + assert dp.start_docker_desktop(log=lambda *_: None) is True + assert popen.calls[0][0] == (["open", "-a", "Docker"],) + + +def test_start_docker_desktop_linux_systemctl_succeeds(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Linux") + monkeypatch.setattr(dp, "_run", Scripted(cp(returncode=0))) + assert dp.start_docker_desktop(log=lambda *_: None) is True + + +def test_start_docker_desktop_linux_systemctl_fails(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Linux") + monkeypatch.setattr(dp, "_run", Scripted(cp(returncode=1))) + assert dp.start_docker_desktop(log=lambda *_: None) is False + + +def test_start_docker_desktop_linux_systemctl_missing(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "Linux") + monkeypatch.setattr(dp, "_run", Scripted(FileNotFoundError())) + assert dp.start_docker_desktop(log=lambda *_: None) is False + + +def test_start_docker_desktop_unknown_platform(monkeypatch): + monkeypatch.setattr(dp.platform, "system", lambda: "FreeBSD") + popen = Scripted() + monkeypatch.setattr(dp.subprocess, "Popen", popen) + assert dp.start_docker_desktop(log=lambda *_: None) is False + assert popen.call_count == 0 + + +# --------------------------------------------------------------------------- +# wait_for_docker +# --------------------------------------------------------------------------- + +def test_wait_for_docker_comes_up_after_n_polls(monkeypatch): + counter = {"n": 0} + + def fake_alive(timeout: float = 5) -> bool: + counter["n"] += 1 + return counter["n"] >= 3 + + monkeypatch.setattr(dp, "docker_daemon_alive", fake_alive) + assert dp.wait_for_docker(timeout=100, interval=0.01) is True + assert counter["n"] == 3 + + +def test_wait_for_docker_times_out(monkeypatch): + monkeypatch.setattr(dp, "docker_daemon_alive", lambda timeout=5: False) + assert dp.wait_for_docker(timeout=0.05, interval=0.01) is False + + +# --------------------------------------------------------------------------- +# stack_running +# --------------------------------------------------------------------------- + +def _services_json(*states: str) -> str: + return "\n".join(f'{{"State": "{s}"}}' for s in states) + + +def test_stack_running_all_three_running(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(stdout=_services_json("running", "running", "running")))) + assert dp.stack_running() is True + + +def test_stack_running_one_not_running(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(stdout=_services_json("running", "running", "exited")))) + assert dp.stack_running() is False + + +def test_stack_running_fewer_than_three_services(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(stdout=_services_json("running", "running")))) + assert dp.stack_running() is False + + +def test_stack_running_more_than_three_all_running(monkeypatch): + monkeypatch.setattr(dp, "_compose", + Scripted(cp(stdout=_services_json("running", "running", "running", "running")))) + assert dp.stack_running() is True + + +def test_stack_running_empty_stdout(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(stdout=""))) + assert dp.stack_running() is False + + +def test_stack_running_malformed_json(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(stdout="not json\nnot json either\nnope"))) + assert dp.stack_running() is False + + +def test_stack_running_nonzero_returncode(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(returncode=1, stdout=_services_json("running", "running", "running")))) + assert dp.stack_running() is False + + +def test_stack_running_compose_timeout(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(subprocess.TimeoutExpired(cmd="docker compose ps", timeout=20))) + assert dp.stack_running() is False + + +def test_stack_running_docker_not_installed(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(FileNotFoundError())) + assert dp.stack_running() is False + + +# --------------------------------------------------------------------------- +# start_stack +# --------------------------------------------------------------------------- + +def test_start_stack_succeeds(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(returncode=0))) + assert dp.start_stack(log=lambda *_: None) is True + + +def test_start_stack_nonzero_exit(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(cp(returncode=1, stderr="some compose error"))) + assert dp.start_stack(log=lambda *_: None) is False + + +def test_start_stack_timeout(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(subprocess.TimeoutExpired(cmd="docker compose up -d", timeout=180))) + assert dp.start_stack(log=lambda *_: None) is False + + +def test_start_stack_docker_not_installed(monkeypatch): + monkeypatch.setattr(dp, "_compose", Scripted(FileNotFoundError())) + assert dp.start_stack(log=lambda *_: None) is False + + +# --------------------------------------------------------------------------- +# wait_for_healthz +# --------------------------------------------------------------------------- + +class _FakeResponse: + def __init__(self, status: int): + self.status = status + + def __enter__(self): + return self + + def __exit__(self, *exc): + return False + + +def test_wait_for_healthz_immediate_200(monkeypatch): + monkeypatch.setattr(dp.urllib.request, "urlopen", Scripted(_FakeResponse(200))) + assert dp.wait_for_healthz(timeout=10, interval=0.01) is True + + +def test_wait_for_healthz_never_ready(monkeypatch): + monkeypatch.setattr(dp.urllib.request, "urlopen", + lambda url, timeout=5: (_ for _ in ()).throw(dp.urllib.error.URLError("refused"))) + assert dp.wait_for_healthz(timeout=0.05, interval=0.01) is False + + +def test_wait_for_healthz_ready_after_n_polls(monkeypatch): + responses = Scripted( + dp.urllib.error.URLError("refused"), + dp.urllib.error.URLError("refused"), + _FakeResponse(200), + ) + + def fake_urlopen(url, timeout=5): + result = responses(url, timeout=timeout) + return result + + monkeypatch.setattr(dp.urllib.request, "urlopen", fake_urlopen) + assert dp.wait_for_healthz(timeout=10, interval=0.01) is True + assert responses.call_count == 3 + + +# --------------------------------------------------------------------------- +# ensure_milvus_ready -- the full "Docker not running" orchestration matrix. +# Each sub-function is mocked, so this exercises only ensure_milvus_ready's +# own branching, not the internals already covered above. +# --------------------------------------------------------------------------- + +def test_ensure_milvus_ready_skip_env_short_circuits(monkeypatch): + monkeypatch.setenv("MILVUS_SKIP_ENSURE", "1") + start_desktop = Scripted() + monkeypatch.setattr(dp, "start_docker_desktop", start_desktop) + monkeypatch.setattr(dp, "docker_daemon_alive", Scripted()) + assert dp.ensure_milvus_ready(quiet=True) is True + assert start_desktop.call_count == 0 # never even checked + + +def test_ensure_milvus_ready_everything_already_up(monkeypatch): + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + start_desktop = Scripted() + start_stack = Scripted() + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: True) + monkeypatch.setattr(dp, "start_docker_desktop", start_desktop) + monkeypatch.setattr(dp, "stack_running", lambda: True) + monkeypatch.setattr(dp, "start_stack", start_stack) + monkeypatch.setattr(dp, "wait_for_healthz", Scripted(True)) + assert dp.ensure_milvus_ready(quiet=True) is True + assert start_desktop.call_count == 0 + assert start_stack.call_count == 0 + + +def test_ensure_milvus_ready_daemon_down_launch_fails(monkeypatch): + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: False) + monkeypatch.setattr(dp, "start_docker_desktop", lambda log=print: False) + wait_for_docker = Scripted() + monkeypatch.setattr(dp, "wait_for_docker", wait_for_docker) + assert dp.ensure_milvus_ready(quiet=True) is False + assert wait_for_docker.call_count == 0 # short-circuited before waiting + + +def test_ensure_milvus_ready_daemon_down_never_comes_up(monkeypatch): + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: False) + monkeypatch.setattr(dp, "start_docker_desktop", lambda log=print: True) + monkeypatch.setattr(dp, "wait_for_docker", lambda timeout=150: False) + stack_running = Scripted() + monkeypatch.setattr(dp, "stack_running", stack_running) + assert dp.ensure_milvus_ready(quiet=True) is False + assert stack_running.call_count == 0 + + +def test_ensure_milvus_ready_stack_down_start_fails(monkeypatch): + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: True) + monkeypatch.setattr(dp, "stack_running", lambda: False) + monkeypatch.setattr(dp, "start_stack", lambda log=print: False) + wait_for_healthz = Scripted() + monkeypatch.setattr(dp, "wait_for_healthz", wait_for_healthz) + assert dp.ensure_milvus_ready(quiet=True) is False + assert wait_for_healthz.call_count == 0 + + +def test_ensure_milvus_ready_stack_starts_but_never_healthy(monkeypatch): + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: True) + monkeypatch.setattr(dp, "stack_running", lambda: False) + monkeypatch.setattr(dp, "start_stack", lambda log=print: True) + monkeypatch.setattr(dp, "wait_for_healthz", lambda timeout=150: False) + assert dp.ensure_milvus_ready(quiet=True) is False + + +def test_ensure_milvus_ready_full_cold_start_happy_path(monkeypatch): + """The complete "Docker isn't running at all" scenario: daemon down -> + launched -> comes up -> stack not running -> started -> becomes healthy.""" + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + daemon_state = {"alive": False} + monkeypatch.setattr(dp, "docker_daemon_alive", lambda: daemon_state["alive"]) + + def fake_start_desktop(log=print): + daemon_state["alive"] = True # simulate Docker Desktop finishing boot + return True + + monkeypatch.setattr(dp, "start_docker_desktop", fake_start_desktop) + monkeypatch.setattr(dp, "wait_for_docker", lambda timeout=150: daemon_state["alive"]) + monkeypatch.setattr(dp, "stack_running", lambda: False) + monkeypatch.setattr(dp, "start_stack", lambda log=print: True) + monkeypatch.setattr(dp, "wait_for_healthz", lambda timeout=150: True) + assert dp.ensure_milvus_ready(quiet=True) is True + + +if __name__ == "__main__": + import sys + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/poem_core/test_vector_store.py b/embeddings/poem_core/test_vector_store.py new file mode 100644 index 00000000..ec8777b2 --- /dev/null +++ b/embeddings/poem_core/test_vector_store.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +"""Intensive tests for poem_core/vector_store.py's backend-selection and +Milvus-unreachable-to-numpy fallback logic -- complements +test_docker_preflight.py by proving *this module's* wiring to the Docker +self-heal (local URI -> triggered; remote URI -> skipped) and its graceful +degradation when Milvus is genuinely unreachable (the "Docker isn't running" +scenario, one layer up from docker_preflight's own unit tests). + +Fully OFFLINE and fast: MilvusVectorStore construction is mocked throughout, +so this never opens a real network connection or shells out to Docker. + +Run with the MCP venv interpreter: + embeddings\\MCP\\.venv-mcp\\Scripts\\python.exe -m pytest \\ + embeddings\\poem_core\\test_vector_store.py -v +""" +from __future__ import annotations + +import numpy as np +import pytest + +from poem_core import docker_preflight, vector_store + + +@pytest.fixture +def corpus(): + rng = np.random.default_rng(0) + emb = rng.random((5, 8), dtype=np.float32) + texts = np.array([f"text {i}" for i in range(5)], dtype=object) + sections = np.array(["instruments"] * 5, dtype=object) + return emb, texts, sections + + +@pytest.fixture(autouse=True) +def _clean_env(monkeypatch): + monkeypatch.delenv("VECTOR_BACKEND", raising=False) + monkeypatch.delenv("MILVUS_URI", raising=False) + monkeypatch.delenv("MILVUS_SKIP_ENSURE", raising=False) + + +def _spy(return_value=True): + def fn(*args, **kwargs): + fn.calls += 1 + return return_value + fn.calls = 0 + return fn + + +def test_get_store_numpy_when_backend_is_numpy(corpus, monkeypatch): + monkeypatch.setenv("VECTOR_BACKEND", "numpy") + ensure = _spy() + monkeypatch.setattr(docker_preflight, "ensure_milvus_ready", ensure) + store = vector_store.get_store(*corpus) + assert isinstance(store, vector_store.NumpyVectorStore) + assert ensure.calls == 0 # numpy path never even looks at Docker/Milvus + + +def test_get_store_falls_back_to_numpy_on_milvus_connection_error(corpus, monkeypatch, capsys): + monkeypatch.setenv("VECTOR_BACKEND", "milvus") + monkeypatch.setenv("MILVUS_URI", "http://milvus.example.invalid:19530") # non-local + + def boom(*args, **kwargs): + raise ConnectionError("could not connect to Milvus") + + monkeypatch.setattr(vector_store, "MilvusVectorStore", boom) + store = vector_store.get_store(*corpus) + assert isinstance(store, vector_store.NumpyVectorStore) + assert "falling back to numpy" in capsys.readouterr().err + + +def test_get_store_falls_back_to_numpy_when_pymilvus_missing(corpus, monkeypatch, capsys): + monkeypatch.setenv("VECTOR_BACKEND", "milvus") + monkeypatch.setenv("MILVUS_URI", "http://milvus.example.invalid:19530") + + def boom(*args, **kwargs): + raise ImportError("No module named 'pymilvus'") + + monkeypatch.setattr(vector_store, "MilvusVectorStore", boom) + store = vector_store.get_store(*corpus) + assert isinstance(store, vector_store.NumpyVectorStore) + assert "ImportError" in capsys.readouterr().err + + +def test_get_store_triggers_docker_preflight_for_local_uri(corpus, monkeypatch): + monkeypatch.setenv("VECTOR_BACKEND", "milvus") + monkeypatch.setenv("MILVUS_URI", "http://localhost:19530") + ensure = _spy(return_value=True) + monkeypatch.setattr(docker_preflight, "ensure_milvus_ready", ensure) + monkeypatch.setattr(vector_store, "MilvusVectorStore", lambda *a, **kw: object()) + vector_store.get_store(*corpus) + assert ensure.calls == 1 + + +def test_get_store_skips_docker_preflight_for_remote_uri(corpus, monkeypatch): + monkeypatch.setenv("VECTOR_BACKEND", "milvus") + monkeypatch.setenv("MILVUS_URI", "https://in03-abc.serverless.gcp-us-west1.cloud.zilliz.com:443") + ensure = _spy(return_value=True) + monkeypatch.setattr(docker_preflight, "ensure_milvus_ready", ensure) + monkeypatch.setattr(vector_store, "MilvusVectorStore", lambda *a, **kw: object()) + vector_store.get_store(*corpus) + assert ensure.calls == 0 + + +def test_get_store_docker_never_comes_up_still_falls_back_to_numpy(corpus, monkeypatch, capsys): + """The end-to-end "Docker really isn't running" scenario at this layer: + ensure_milvus_ready gives up (False, e.g. Docker Desktop never started), + but get_store still attempts the real connection per its own + "best-effort" contract -- which then also fails -- and the overall result + is still a clean numpy fallback, not a crash.""" + monkeypatch.setenv("VECTOR_BACKEND", "milvus") + monkeypatch.setenv("MILVUS_URI", "http://localhost:19530") + monkeypatch.setattr(docker_preflight, "ensure_milvus_ready", _spy(return_value=False)) + + def boom(*args, **kwargs): + raise ConnectionRefusedError("Milvus still unreachable") + + monkeypatch.setattr(vector_store, "MilvusVectorStore", boom) + store = vector_store.get_store(*corpus) + assert isinstance(store, vector_store.NumpyVectorStore) + assert "falling back to numpy" in capsys.readouterr().err + + +if __name__ == "__main__": + import sys + sys.exit(pytest.main([__file__, "-v"])) diff --git a/embeddings/poem_core/vector_store.py b/embeddings/poem_core/vector_store.py new file mode 100644 index 00000000..01273db5 --- /dev/null +++ b/embeddings/poem_core/vector_store.py @@ -0,0 +1,228 @@ +"""Pluggable vector store for POEM search. + +Decouples *how vectors are stored and searched* from the rest of the pipeline: + + * ``NumpyVectorStore`` — all vectors in one numpy array, scored by the metric + functions in ``poem_core.metrics``. Zero extra dependencies. Cosine reuses a + once-computed row-normalized matrix instead of renormalizing every query. + + * ``MilvusVectorStore`` — an external Milvus server (Standalone, separate + process). Each supported metric is materialized as its own collection with + an explicit **FLAT** index, so results are *exact* (not approximate) and + match the numpy backend. Manhattan (L1), which Milvus has no native metric + for, is served by an internal exact numpy fallback. The collection is built + from the in-memory vectors at startup and loaded into memory for search. + +``get_store`` selects the backend from ``VECTOR_BACKEND`` (default ``milvus``) +and, if Milvus is unreachable or pymilvus is missing, transparently falls back +to numpy so offline/dev use and tests keep working. + +Both backends expose one method: + + top_candidates(query_vec, metric, section, k) -> (scores, texts, sections) + +The numpy backend returns the full (optionally section-masked) corpus so the +existing dedup-by-entity in ``poem_core.dedup`` is exact; the milvus backend +returns its top-k. Callers run the same dedup helper over either. +""" +from __future__ import annotations + +import os +import sys + +import numpy as np + +from . import config +from .metrics import METRICS, MILVUS_METRIC_TYPE, milvus_metric_for + +# Back-compat: the old module exposed this name (supported metrics only). +_METRIC_TO_MILVUS = {k: v for k, v in MILVUS_METRIC_TYPE.items() if v is not None} + + +class NumpyVectorStore: + """In-process numpy store — the default-equivalent, exact for every metric.""" + + def __init__(self, embeddings: np.ndarray, texts: np.ndarray, sections: np.ndarray): + self.emb = embeddings + self.texts = texts + self.sections = sections + self._normed: np.ndarray | None = None # row-normalized matrix, lazy + + def _normed_matrix(self) -> np.ndarray: + if self._normed is None: + self._normed = self.emb / (np.linalg.norm(self.emb, axis=1, keepdims=True) + 1e-10) + return self._normed + + def top_candidates(self, query_vec, metric, section, k=None): + # k is unused: numpy scores the whole (optionally section-masked) corpus, + # preserving the exact ranking the pipeline always produced. + if section is not None: + mask = (self.sections == section) + txt, sec = self.texts[mask], self.sections[mask] + if metric == "Cosine Similarity": + normed = self._normed_matrix()[mask] + else: + emb = self.emb[mask] + else: + txt, sec = self.texts, self.sections + if metric == "Cosine Similarity": + normed = self._normed_matrix() + else: + emb = self.emb + + if metric == "Cosine Similarity": + q = query_vec / (np.linalg.norm(query_vec) + 1e-10) + scores = normed @ q + else: + scores = METRICS[metric](query_vec, emb) + return scores, txt, sec + + +class MilvusVectorStore: + """External-Milvus backed store: exact (FLAT) and multi-metric. + + One FLAT collection per supported metric is built lazily and cached; the + default (Cosine) is warmed at construction so an unreachable server / missing + pymilvus surfaces immediately and ``get_store`` can fall back to numpy. + Manhattan (L1) is served from an internal NumpyVectorStore. + """ + + def __init__( + self, + embeddings: np.ndarray, + texts: np.ndarray, + sections: np.ndarray, + uri: str | None = None, + collection: str | None = None, + token: str | None = None, + rebuild: bool = False, + metric: str | None = None, # accepted for back-compat; no longer fixed + ): + from pymilvus import MilvusClient # lazy: only needed for this backend + + self.emb = embeddings + self.texts = texts + self.sections = sections + self.uri = uri or config.milvus_uri() + self.base = collection or config.milvus_collection() + self.rebuild = rebuild + self._dim = int(embeddings.shape[1]) + self._built: set[str] = set() # metric types already materialized + self._numpy = NumpyVectorStore(embeddings, texts, sections) # L1 + safety + + token = token if token is not None else config.milvus_token() + self.client = MilvusClient(uri=self.uri, token=token) if token else MilvusClient(uri=self.uri) + # Probe connectivity now so a down server triggers fallback in get_store. + self.client.list_collections() + # Warm the default metric (validates the full build path against the server). + self._ensure(MILVUS_METRIC_TYPE["Cosine Similarity"]) + + def _collection_name(self, metric_type: str) -> str: + return f"{self.base}_{metric_type.lower()}" + + def _ensure(self, metric_type: str) -> str: + """Build (or reuse) the FLAT collection for one Milvus metric type.""" + from pymilvus import DataType + + name = self._collection_name(metric_type) + if metric_type in self._built: + return name + + if self.client.has_collection(name): + # Reuse the collection only if it already holds every row. NOTE: + # get_collection_stats' row_count counts *sealed* segments only, so it + # reads 0 until a flush — against a server that hasn't flushed (e.g. + # Zilliz Cloud right after insert) that made this guard rebuild the + # whole collection on every startup. An exact count(*) query is + # accurate regardless of flush state. (query requires the collection + # loaded, so load first; that load is what we want on the reuse path.) + reuse = False + if not self.rebuild: + try: + self.client.load_collection(name) + res = self.client.query(collection_name=name, filter="id >= 0", + output_fields=["count(*)"]) + count = int(res[0]["count(*)"]) if res else 0 + reuse = count == len(self.texts) + except Exception: + reuse = False + if reuse: + self._built.add(metric_type) + return name + self.client.drop_collection(name) + + # Explicit schema + FLAT index => exact nearest neighbors (parity with numpy). + schema = self.client.create_schema(auto_id=False, enable_dynamic_field=True) + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("vector", DataType.FLOAT_VECTOR, dim=self._dim) + + index_params = self.client.prepare_index_params() + index_params.add_index(field_name="vector", index_type="FLAT", metric_type=metric_type) + + self.client.create_collection(collection_name=name, schema=schema, index_params=index_params) + + rows = [ + {"id": i, "vector": self.emb[i].tolist(), + "text": str(self.texts[i]), "section": str(self.sections[i])} + for i in range(len(self.texts)) + ] + for i in range(0, len(rows), 1000): + self.client.insert(name, rows[i:i + 1000]) + self.client.load_collection(name) + self._built.add(metric_type) + return name + + def top_candidates(self, query_vec, metric, section, k): + metric_type = milvus_metric_for(metric) + if metric_type is None: + # Manhattan (L1) etc.: Milvus has no native metric — exact numpy. + return self._numpy.top_candidates(query_vec, metric, section, k) + + name = self._ensure(metric_type) + flt = f'section == "{section}"' if section else "" + res = self.client.search( + collection_name=name, + data=[query_vec.tolist()], + limit=int(k), + filter=flt, + output_fields=["text", "section"], + search_params={"metric_type": metric_type}, + ) + hits = res[0] + # COSINE/IP: higher = more similar. L2: smaller = closer, so negate to + # keep the pipeline's "higher = better" convention. + sign = -1.0 if metric_type == "L2" else 1.0 + scores = np.array([sign * h["distance"] for h in hits], dtype=np.float32) + txt = np.array([h["entity"]["text"] for h in hits], dtype=object) + sec = np.array([h["entity"]["section"] for h in hits], dtype=object) + return scores, txt, sec + + +def get_store(embeddings, texts, sections): + """Build the configured backend from already-loaded corpus arrays. + + ``VECTOR_BACKEND=milvus`` (default) uses the external Milvus server; if it is + unreachable or pymilvus is not installed, this logs a warning to stderr and + falls back to the numpy backend so the system still works offline. + + For a *local* ``MILVUS_URI``, this first runs ``docker_preflight.ensure_milvus_ready()`` + (start Docker Desktop / the compose stack if either is down), so the Milvus + path self-heals across reboots instead of silently falling back. Set + ``MILVUS_SKIP_ENSURE=1`` to disable. A remote/cloud URI never triggers this. + """ + backend = config.vector_backend() + if backend == "milvus": + try: + uri = config.milvus_uri() + from .docker_preflight import is_local_uri + if is_local_uri(uri): + from .docker_preflight import ensure_milvus_ready + ensure_milvus_ready(quiet=True) # best-effort; a still-down server just falls through below + return MilvusVectorStore(embeddings, texts, sections) + except Exception as e: # ImportError (no pymilvus) or any connection error + sys.stderr.write( + f"[vector_store] Milvus backend unavailable ({type(e).__name__}: {e}); " + f"falling back to numpy.\n" + ) + return NumpyVectorStore(embeddings, texts, sections) + return NumpyVectorStore(embeddings, texts, sections) diff --git a/embeddings/pyproject.toml b/embeddings/pyproject.toml new file mode 100644 index 00000000..fb9e59f3 --- /dev/null +++ b/embeddings/pyproject.toml @@ -0,0 +1,42 @@ +[build-system] +requires = ["setuptools>=61"] +build-backend = "setuptools.build_meta" + +[project] +name = "poem-embeddings" +version = "0.1.0" +description = "POEM semantic-search core: config, embedding client, metrics, corpus loader, RDF graph loader, and pluggable vector store (numpy / external Milvus)." +readme = "MAIN.md" +# NOTE: this floor (3.8) is for the *base* package only (poem_core + the +# Pipeline scripts, which still run under Python 3.8 -- see TESTING.md's +# `tutorial_env`). The `mcp` extra below pulls in fastmcp, which itself +# requires Python >= 3.10; `pip install -e ".[mcp]"` must be run under a +# >=3.10 interpreter (the shipped .venv-mcp uses 3.12). Standard pyproject +# metadata has no way to express a per-extra requires-python, so this is +# documented here and in MCP/MCP.md's Prerequisites section instead. +requires-python = ">=3.8" +dependencies = [ + "openai>=2.0.0,<3.0.0", + "numpy>=2.0.0,<3.0.0", + "rdflib>=6.0.0,<8.0.0", +] + +[project.optional-dependencies] +# External Milvus vector backend (VECTOR_BACKEND=milvus). +milvus = ["pymilvus>=3.0.0,<4.0.0"] +# MCP server (Python >= 3.10 -- see the NOTE above requires-python). +mcp = ["fastmcp>=3.4.2,<4.0.0"] +dev = ["pytest>=7.0.0,<10.0.0"] + +[tool.setuptools] +# The shared core package. The Pipeline/ and MCP/ entry scripts re-export from it. +packages = ["poem_core"] + +[tool.pytest.ini_options] +# "slow" marks tests that spawn a real mcp_server.py subprocess (each redoes +# the full ~778-vector corpus + 142k-triple RDF graph load, ~15-30s apiece) -- +# see TESTING.md "Fast vs. full test runs". Registered here so `-m slow` / +# `-m "not slow"` don't warn about an unknown marker. +markers = [ + "slow: spawns a real mcp_server.py subprocess; excluded by `-m \"not slow\"`", +] diff --git a/embeddings/requirements.txt b/embeddings/requirements.txt deleted file mode 100644 index e3a7ae8f..00000000 --- a/embeddings/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -openai>=1.0.0 -numpy>=1.24.0 -rdflib>=6.0.0 -pytest>=7.0.0 diff --git a/embeddings/sample_embeddings.py b/embeddings/sample_embeddings.py deleted file mode 100644 index 6e412f45..00000000 --- a/embeddings/sample_embeddings.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python3 -"""Sample: generate embeddings using the provided OpenAI-compatible endpoint. - -Reads a few blocks from templates.txt and prints the embedding size for each. -Run this first to verify the endpoint is reachable and working. - -Usage: - python embeddings/sample_embeddings.py -""" - -import os -import re - -from openai import OpenAI - -# --------------------------------------------------------------------------- -# Load a handful of template blocks from templates.txt -# --------------------------------------------------------------------------- -_HERE = os.path.dirname(os.path.abspath(__file__)) -TEMPLATES_PATH = os.environ.get("TEMPLATES_PATH", os.path.join(_HERE, "templates.txt")) - -with open(TEMPLATES_PATH, encoding="utf-8") as f: - raw = f.read() - -all_blocks = [b.strip() for b in re.split(r"\n\n+", raw)] -all_blocks = [b for b in all_blocks if b and not b.startswith("===")] - -# Take just the first 3 blocks as a sample -texts = all_blocks[:3] - -# --------------------------------------------------------------------------- -# Call the embeddings endpoint (exactly as provided) -# --------------------------------------------------------------------------- -_BASE_URL = os.environ.get("EMBED_BASE_URL", "http://idea-llm-02.idea.rpi.edu:1234/v1") -_MODEL = os.environ.get("EMBED_MODEL", "qwen3-embedding:latest") -client = OpenAI(base_url=_BASE_URL, api_key="not-needed") - -response = client.embeddings.create( - model=_MODEL, - input=texts -) - -# Print embedding size for each sentence -for i, emb in enumerate(response.data): - print(f"Text {i} embedding length:", len(emb.embedding)) - print(f" Preview: {texts[i][:80]}...") - print() - print(emb.embedding) diff --git a/embeddings/scales/paragraph_0.npy b/embeddings/scales/paragraph_0.npy deleted file mode 100644 index 108a1a7e..00000000 Binary files a/embeddings/scales/paragraph_0.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_1.npy b/embeddings/scales/paragraph_1.npy deleted file mode 100644 index 2b2c838a..00000000 Binary files a/embeddings/scales/paragraph_1.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_10.npy b/embeddings/scales/paragraph_10.npy deleted file mode 100644 index 2ba20014..00000000 Binary files a/embeddings/scales/paragraph_10.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_100.npy b/embeddings/scales/paragraph_100.npy deleted file mode 100644 index 49cb45d8..00000000 Binary files a/embeddings/scales/paragraph_100.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_101.npy b/embeddings/scales/paragraph_101.npy deleted file mode 100644 index 24aad1b4..00000000 Binary files a/embeddings/scales/paragraph_101.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_102.npy b/embeddings/scales/paragraph_102.npy deleted file mode 100644 index 1c04433c..00000000 Binary files a/embeddings/scales/paragraph_102.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_103.npy b/embeddings/scales/paragraph_103.npy deleted file mode 100644 index e25b5890..00000000 Binary files a/embeddings/scales/paragraph_103.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_104.npy b/embeddings/scales/paragraph_104.npy deleted file mode 100644 index e64fca0f..00000000 Binary files a/embeddings/scales/paragraph_104.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_105.npy b/embeddings/scales/paragraph_105.npy deleted file mode 100644 index e535a8e6..00000000 Binary files a/embeddings/scales/paragraph_105.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_106.npy b/embeddings/scales/paragraph_106.npy deleted file mode 100644 index f3543c9e..00000000 Binary files a/embeddings/scales/paragraph_106.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_107.npy b/embeddings/scales/paragraph_107.npy deleted file mode 100644 index 8f35da93..00000000 Binary files a/embeddings/scales/paragraph_107.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_108.npy b/embeddings/scales/paragraph_108.npy deleted file mode 100644 index 3761dd97..00000000 Binary files a/embeddings/scales/paragraph_108.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_109.npy b/embeddings/scales/paragraph_109.npy deleted file mode 100644 index bcdb2a09..00000000 Binary files a/embeddings/scales/paragraph_109.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_11.npy b/embeddings/scales/paragraph_11.npy deleted file mode 100644 index aafed0f2..00000000 Binary files a/embeddings/scales/paragraph_11.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_110.npy b/embeddings/scales/paragraph_110.npy deleted file mode 100644 index ccf52a4a..00000000 Binary files a/embeddings/scales/paragraph_110.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_111.npy b/embeddings/scales/paragraph_111.npy deleted file mode 100644 index a9643685..00000000 Binary files a/embeddings/scales/paragraph_111.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_112.npy b/embeddings/scales/paragraph_112.npy deleted file mode 100644 index 43e3af39..00000000 Binary files a/embeddings/scales/paragraph_112.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_113.npy b/embeddings/scales/paragraph_113.npy deleted file mode 100644 index 55b12412..00000000 Binary files a/embeddings/scales/paragraph_113.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_114.npy b/embeddings/scales/paragraph_114.npy deleted file mode 100644 index 68b5bfc8..00000000 Binary files a/embeddings/scales/paragraph_114.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_115.npy b/embeddings/scales/paragraph_115.npy deleted file mode 100644 index b1df62c3..00000000 Binary files a/embeddings/scales/paragraph_115.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_116.npy b/embeddings/scales/paragraph_116.npy deleted file mode 100644 index cd52a9e9..00000000 Binary files a/embeddings/scales/paragraph_116.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_117.npy b/embeddings/scales/paragraph_117.npy deleted file mode 100644 index eae0ce80..00000000 Binary files a/embeddings/scales/paragraph_117.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_118.npy b/embeddings/scales/paragraph_118.npy deleted file mode 100644 index 0b9b6d69..00000000 Binary files a/embeddings/scales/paragraph_118.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_119.npy b/embeddings/scales/paragraph_119.npy deleted file mode 100644 index 9d6144a1..00000000 Binary files a/embeddings/scales/paragraph_119.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_12.npy b/embeddings/scales/paragraph_12.npy deleted file mode 100644 index f41f4657..00000000 Binary files a/embeddings/scales/paragraph_12.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_120.npy b/embeddings/scales/paragraph_120.npy deleted file mode 100644 index 226c273a..00000000 Binary files a/embeddings/scales/paragraph_120.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_121.npy b/embeddings/scales/paragraph_121.npy deleted file mode 100644 index 995f986e..00000000 Binary files a/embeddings/scales/paragraph_121.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_122.npy b/embeddings/scales/paragraph_122.npy deleted file mode 100644 index 8ec246de..00000000 Binary files a/embeddings/scales/paragraph_122.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_123.npy b/embeddings/scales/paragraph_123.npy deleted file mode 100644 index 5984a50d..00000000 Binary files a/embeddings/scales/paragraph_123.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_124.npy b/embeddings/scales/paragraph_124.npy deleted file mode 100644 index 58730e96..00000000 Binary files a/embeddings/scales/paragraph_124.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_125.npy b/embeddings/scales/paragraph_125.npy deleted file mode 100644 index a5f4c700..00000000 Binary files a/embeddings/scales/paragraph_125.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_126.npy b/embeddings/scales/paragraph_126.npy deleted file mode 100644 index d6dde284..00000000 Binary files a/embeddings/scales/paragraph_126.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_127.npy b/embeddings/scales/paragraph_127.npy deleted file mode 100644 index ad3f3bf4..00000000 Binary files a/embeddings/scales/paragraph_127.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_128.npy b/embeddings/scales/paragraph_128.npy deleted file mode 100644 index 82c9270b..00000000 Binary files a/embeddings/scales/paragraph_128.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_129.npy b/embeddings/scales/paragraph_129.npy deleted file mode 100644 index f589485d..00000000 Binary files a/embeddings/scales/paragraph_129.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_13.npy b/embeddings/scales/paragraph_13.npy deleted file mode 100644 index 34466bd2..00000000 Binary files a/embeddings/scales/paragraph_13.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_130.npy b/embeddings/scales/paragraph_130.npy deleted file mode 100644 index 4ad8b56a..00000000 Binary files a/embeddings/scales/paragraph_130.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_131.npy b/embeddings/scales/paragraph_131.npy deleted file mode 100644 index 043ca535..00000000 Binary files a/embeddings/scales/paragraph_131.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_132.npy b/embeddings/scales/paragraph_132.npy deleted file mode 100644 index 4d5db771..00000000 Binary files a/embeddings/scales/paragraph_132.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_133.npy b/embeddings/scales/paragraph_133.npy deleted file mode 100644 index 45e5a8c9..00000000 Binary files a/embeddings/scales/paragraph_133.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_134.npy b/embeddings/scales/paragraph_134.npy deleted file mode 100644 index 26772c15..00000000 Binary files a/embeddings/scales/paragraph_134.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_135.npy b/embeddings/scales/paragraph_135.npy deleted file mode 100644 index f0dc70e0..00000000 Binary files a/embeddings/scales/paragraph_135.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_136.npy b/embeddings/scales/paragraph_136.npy deleted file mode 100644 index f06d5493..00000000 Binary files a/embeddings/scales/paragraph_136.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_137.npy b/embeddings/scales/paragraph_137.npy deleted file mode 100644 index 885eb7ef..00000000 Binary files a/embeddings/scales/paragraph_137.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_138.npy b/embeddings/scales/paragraph_138.npy deleted file mode 100644 index 1cd2c1d8..00000000 Binary files a/embeddings/scales/paragraph_138.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_139.npy b/embeddings/scales/paragraph_139.npy deleted file mode 100644 index d6102253..00000000 Binary files a/embeddings/scales/paragraph_139.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_14.npy b/embeddings/scales/paragraph_14.npy deleted file mode 100644 index 1c5eec8b..00000000 Binary files a/embeddings/scales/paragraph_14.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_140.npy b/embeddings/scales/paragraph_140.npy deleted file mode 100644 index 9c935aa9..00000000 Binary files a/embeddings/scales/paragraph_140.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_141.npy b/embeddings/scales/paragraph_141.npy deleted file mode 100644 index 6d905475..00000000 Binary files a/embeddings/scales/paragraph_141.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_142.npy b/embeddings/scales/paragraph_142.npy deleted file mode 100644 index 87936c14..00000000 Binary files a/embeddings/scales/paragraph_142.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_143.npy b/embeddings/scales/paragraph_143.npy deleted file mode 100644 index 6729b002..00000000 Binary files a/embeddings/scales/paragraph_143.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_144.npy b/embeddings/scales/paragraph_144.npy deleted file mode 100644 index b20e677b..00000000 Binary files a/embeddings/scales/paragraph_144.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_145.npy b/embeddings/scales/paragraph_145.npy deleted file mode 100644 index a98184c9..00000000 Binary files a/embeddings/scales/paragraph_145.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_146.npy b/embeddings/scales/paragraph_146.npy deleted file mode 100644 index 999bde91..00000000 Binary files a/embeddings/scales/paragraph_146.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_147.npy b/embeddings/scales/paragraph_147.npy deleted file mode 100644 index 26a07bcb..00000000 Binary files a/embeddings/scales/paragraph_147.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_148.npy b/embeddings/scales/paragraph_148.npy deleted file mode 100644 index 587c828e..00000000 Binary files a/embeddings/scales/paragraph_148.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_149.npy b/embeddings/scales/paragraph_149.npy deleted file mode 100644 index 08c24e02..00000000 Binary files a/embeddings/scales/paragraph_149.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_15.npy b/embeddings/scales/paragraph_15.npy deleted file mode 100644 index 9cf859a5..00000000 Binary files a/embeddings/scales/paragraph_15.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_150.npy b/embeddings/scales/paragraph_150.npy deleted file mode 100644 index 54ba2e89..00000000 Binary files a/embeddings/scales/paragraph_150.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_151.npy b/embeddings/scales/paragraph_151.npy deleted file mode 100644 index 459a9e0e..00000000 Binary files a/embeddings/scales/paragraph_151.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_152.npy b/embeddings/scales/paragraph_152.npy deleted file mode 100644 index 870a16b8..00000000 Binary files a/embeddings/scales/paragraph_152.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_153.npy b/embeddings/scales/paragraph_153.npy deleted file mode 100644 index fef14805..00000000 Binary files a/embeddings/scales/paragraph_153.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_154.npy b/embeddings/scales/paragraph_154.npy deleted file mode 100644 index 9cab77fb..00000000 Binary files a/embeddings/scales/paragraph_154.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_155.npy b/embeddings/scales/paragraph_155.npy deleted file mode 100644 index bd3754c8..00000000 Binary files a/embeddings/scales/paragraph_155.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_156.npy b/embeddings/scales/paragraph_156.npy deleted file mode 100644 index a9112bdf..00000000 Binary files a/embeddings/scales/paragraph_156.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_157.npy b/embeddings/scales/paragraph_157.npy deleted file mode 100644 index 3cf7ea3a..00000000 Binary files a/embeddings/scales/paragraph_157.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_158.npy b/embeddings/scales/paragraph_158.npy deleted file mode 100644 index caf42f69..00000000 Binary files a/embeddings/scales/paragraph_158.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_159.npy b/embeddings/scales/paragraph_159.npy deleted file mode 100644 index de8ec49d..00000000 Binary files a/embeddings/scales/paragraph_159.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_16.npy b/embeddings/scales/paragraph_16.npy deleted file mode 100644 index 5768ab6b..00000000 Binary files a/embeddings/scales/paragraph_16.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_160.npy b/embeddings/scales/paragraph_160.npy deleted file mode 100644 index b9c2517e..00000000 Binary files a/embeddings/scales/paragraph_160.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_161.npy b/embeddings/scales/paragraph_161.npy deleted file mode 100644 index 1ffb8309..00000000 Binary files a/embeddings/scales/paragraph_161.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_162.npy b/embeddings/scales/paragraph_162.npy deleted file mode 100644 index 2cb42308..00000000 Binary files a/embeddings/scales/paragraph_162.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_163.npy b/embeddings/scales/paragraph_163.npy deleted file mode 100644 index ac4aa6ce..00000000 Binary files a/embeddings/scales/paragraph_163.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_164.npy b/embeddings/scales/paragraph_164.npy deleted file mode 100644 index 9b56ce81..00000000 Binary files a/embeddings/scales/paragraph_164.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_165.npy b/embeddings/scales/paragraph_165.npy deleted file mode 100644 index eaae090f..00000000 Binary files a/embeddings/scales/paragraph_165.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_166.npy b/embeddings/scales/paragraph_166.npy deleted file mode 100644 index 22a1f344..00000000 Binary files a/embeddings/scales/paragraph_166.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_167.npy b/embeddings/scales/paragraph_167.npy deleted file mode 100644 index 80297071..00000000 Binary files a/embeddings/scales/paragraph_167.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_168.npy b/embeddings/scales/paragraph_168.npy deleted file mode 100644 index 2aced029..00000000 Binary files a/embeddings/scales/paragraph_168.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_169.npy b/embeddings/scales/paragraph_169.npy deleted file mode 100644 index 7bc64cb2..00000000 Binary files a/embeddings/scales/paragraph_169.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_17.npy b/embeddings/scales/paragraph_17.npy deleted file mode 100644 index 5f7947dd..00000000 Binary files a/embeddings/scales/paragraph_17.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_170.npy b/embeddings/scales/paragraph_170.npy deleted file mode 100644 index e36031d1..00000000 Binary files a/embeddings/scales/paragraph_170.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_171.npy b/embeddings/scales/paragraph_171.npy deleted file mode 100644 index 57060642..00000000 Binary files a/embeddings/scales/paragraph_171.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_172.npy b/embeddings/scales/paragraph_172.npy deleted file mode 100644 index c321c9e2..00000000 Binary files a/embeddings/scales/paragraph_172.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_173.npy b/embeddings/scales/paragraph_173.npy deleted file mode 100644 index b3435329..00000000 Binary files a/embeddings/scales/paragraph_173.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_174.npy b/embeddings/scales/paragraph_174.npy deleted file mode 100644 index 2277f6f3..00000000 Binary files a/embeddings/scales/paragraph_174.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_175.npy b/embeddings/scales/paragraph_175.npy deleted file mode 100644 index b063e0db..00000000 Binary files a/embeddings/scales/paragraph_175.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_176.npy b/embeddings/scales/paragraph_176.npy deleted file mode 100644 index 72faee1d..00000000 Binary files a/embeddings/scales/paragraph_176.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_177.npy b/embeddings/scales/paragraph_177.npy deleted file mode 100644 index 13fe0e72..00000000 Binary files a/embeddings/scales/paragraph_177.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_178.npy b/embeddings/scales/paragraph_178.npy deleted file mode 100644 index a6061a07..00000000 Binary files a/embeddings/scales/paragraph_178.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_179.npy b/embeddings/scales/paragraph_179.npy deleted file mode 100644 index c2e9d3bb..00000000 Binary files a/embeddings/scales/paragraph_179.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_18.npy b/embeddings/scales/paragraph_18.npy deleted file mode 100644 index b1c8bec9..00000000 Binary files a/embeddings/scales/paragraph_18.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_180.npy b/embeddings/scales/paragraph_180.npy deleted file mode 100644 index fe24e52f..00000000 Binary files a/embeddings/scales/paragraph_180.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_181.npy b/embeddings/scales/paragraph_181.npy deleted file mode 100644 index 276d78d0..00000000 Binary files a/embeddings/scales/paragraph_181.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_182.npy b/embeddings/scales/paragraph_182.npy deleted file mode 100644 index 55f376cf..00000000 Binary files a/embeddings/scales/paragraph_182.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_183.npy b/embeddings/scales/paragraph_183.npy deleted file mode 100644 index 3f5979cc..00000000 Binary files a/embeddings/scales/paragraph_183.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_184.npy b/embeddings/scales/paragraph_184.npy deleted file mode 100644 index ef9e0be3..00000000 Binary files a/embeddings/scales/paragraph_184.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_185.npy b/embeddings/scales/paragraph_185.npy deleted file mode 100644 index 02f28868..00000000 Binary files a/embeddings/scales/paragraph_185.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_186.npy b/embeddings/scales/paragraph_186.npy deleted file mode 100644 index b6e52504..00000000 Binary files a/embeddings/scales/paragraph_186.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_187.npy b/embeddings/scales/paragraph_187.npy deleted file mode 100644 index b672476f..00000000 Binary files a/embeddings/scales/paragraph_187.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_188.npy b/embeddings/scales/paragraph_188.npy deleted file mode 100644 index f8dbae2e..00000000 Binary files a/embeddings/scales/paragraph_188.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_189.npy b/embeddings/scales/paragraph_189.npy deleted file mode 100644 index 8f9d919b..00000000 Binary files a/embeddings/scales/paragraph_189.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_19.npy b/embeddings/scales/paragraph_19.npy deleted file mode 100644 index 6cdd2e75..00000000 Binary files a/embeddings/scales/paragraph_19.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_190.npy b/embeddings/scales/paragraph_190.npy deleted file mode 100644 index 3fcaddde..00000000 Binary files a/embeddings/scales/paragraph_190.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_191.npy b/embeddings/scales/paragraph_191.npy deleted file mode 100644 index 03ada3fb..00000000 Binary files a/embeddings/scales/paragraph_191.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_192.npy b/embeddings/scales/paragraph_192.npy deleted file mode 100644 index d091c8c0..00000000 Binary files a/embeddings/scales/paragraph_192.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_193.npy b/embeddings/scales/paragraph_193.npy deleted file mode 100644 index 36615ed3..00000000 Binary files a/embeddings/scales/paragraph_193.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_194.npy b/embeddings/scales/paragraph_194.npy deleted file mode 100644 index 13b36f90..00000000 Binary files a/embeddings/scales/paragraph_194.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_195.npy b/embeddings/scales/paragraph_195.npy deleted file mode 100644 index 892b109f..00000000 Binary files a/embeddings/scales/paragraph_195.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_196.npy b/embeddings/scales/paragraph_196.npy deleted file mode 100644 index 0dd71cd2..00000000 Binary files a/embeddings/scales/paragraph_196.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_197.npy b/embeddings/scales/paragraph_197.npy deleted file mode 100644 index 37ce3812..00000000 Binary files a/embeddings/scales/paragraph_197.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_198.npy b/embeddings/scales/paragraph_198.npy deleted file mode 100644 index 5c346194..00000000 Binary files a/embeddings/scales/paragraph_198.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_199.npy b/embeddings/scales/paragraph_199.npy deleted file mode 100644 index b5e27c08..00000000 Binary files a/embeddings/scales/paragraph_199.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_2.npy b/embeddings/scales/paragraph_2.npy deleted file mode 100644 index adc5799e..00000000 Binary files a/embeddings/scales/paragraph_2.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_20.npy b/embeddings/scales/paragraph_20.npy deleted file mode 100644 index e90f781d..00000000 Binary files a/embeddings/scales/paragraph_20.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_200.npy b/embeddings/scales/paragraph_200.npy deleted file mode 100644 index 433eebc6..00000000 Binary files a/embeddings/scales/paragraph_200.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_201.npy b/embeddings/scales/paragraph_201.npy deleted file mode 100644 index 815696c1..00000000 Binary files a/embeddings/scales/paragraph_201.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_202.npy b/embeddings/scales/paragraph_202.npy deleted file mode 100644 index 092ed6a8..00000000 Binary files a/embeddings/scales/paragraph_202.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_203.npy b/embeddings/scales/paragraph_203.npy deleted file mode 100644 index ed17b3c2..00000000 Binary files a/embeddings/scales/paragraph_203.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_204.npy b/embeddings/scales/paragraph_204.npy deleted file mode 100644 index 526d226c..00000000 Binary files a/embeddings/scales/paragraph_204.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_205.npy b/embeddings/scales/paragraph_205.npy deleted file mode 100644 index ccddf350..00000000 Binary files a/embeddings/scales/paragraph_205.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_206.npy b/embeddings/scales/paragraph_206.npy deleted file mode 100644 index 0293e2a8..00000000 Binary files a/embeddings/scales/paragraph_206.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_207.npy b/embeddings/scales/paragraph_207.npy deleted file mode 100644 index 2ebe4d17..00000000 Binary files a/embeddings/scales/paragraph_207.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_208.npy b/embeddings/scales/paragraph_208.npy deleted file mode 100644 index 9f98a242..00000000 Binary files a/embeddings/scales/paragraph_208.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_209.npy b/embeddings/scales/paragraph_209.npy deleted file mode 100644 index a32e88f7..00000000 Binary files a/embeddings/scales/paragraph_209.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_21.npy b/embeddings/scales/paragraph_21.npy deleted file mode 100644 index 5f79f714..00000000 Binary files a/embeddings/scales/paragraph_21.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_210.npy b/embeddings/scales/paragraph_210.npy deleted file mode 100644 index 652498d6..00000000 Binary files a/embeddings/scales/paragraph_210.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_211.npy b/embeddings/scales/paragraph_211.npy deleted file mode 100644 index c73f398c..00000000 Binary files a/embeddings/scales/paragraph_211.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_212.npy b/embeddings/scales/paragraph_212.npy deleted file mode 100644 index 44282b7c..00000000 Binary files a/embeddings/scales/paragraph_212.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_213.npy b/embeddings/scales/paragraph_213.npy deleted file mode 100644 index 50ed92ca..00000000 Binary files a/embeddings/scales/paragraph_213.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_214.npy b/embeddings/scales/paragraph_214.npy deleted file mode 100644 index 161ee85b..00000000 Binary files a/embeddings/scales/paragraph_214.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_215.npy b/embeddings/scales/paragraph_215.npy deleted file mode 100644 index fa945da3..00000000 Binary files a/embeddings/scales/paragraph_215.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_216.npy b/embeddings/scales/paragraph_216.npy deleted file mode 100644 index dbf83702..00000000 Binary files a/embeddings/scales/paragraph_216.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_22.npy b/embeddings/scales/paragraph_22.npy deleted file mode 100644 index d39f3fae..00000000 Binary files a/embeddings/scales/paragraph_22.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_23.npy b/embeddings/scales/paragraph_23.npy deleted file mode 100644 index 0a60adcf..00000000 Binary files a/embeddings/scales/paragraph_23.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_24.npy b/embeddings/scales/paragraph_24.npy deleted file mode 100644 index 5fa693b8..00000000 Binary files a/embeddings/scales/paragraph_24.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_25.npy b/embeddings/scales/paragraph_25.npy deleted file mode 100644 index 6721c95b..00000000 Binary files a/embeddings/scales/paragraph_25.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_26.npy b/embeddings/scales/paragraph_26.npy deleted file mode 100644 index 5702bcbd..00000000 Binary files a/embeddings/scales/paragraph_26.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_27.npy b/embeddings/scales/paragraph_27.npy deleted file mode 100644 index b77e65ae..00000000 Binary files a/embeddings/scales/paragraph_27.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_28.npy b/embeddings/scales/paragraph_28.npy deleted file mode 100644 index d65b6768..00000000 Binary files a/embeddings/scales/paragraph_28.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_29.npy b/embeddings/scales/paragraph_29.npy deleted file mode 100644 index ee2c61d1..00000000 Binary files a/embeddings/scales/paragraph_29.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_3.npy b/embeddings/scales/paragraph_3.npy deleted file mode 100644 index f727bd77..00000000 Binary files a/embeddings/scales/paragraph_3.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_30.npy b/embeddings/scales/paragraph_30.npy deleted file mode 100644 index 6cddd9ff..00000000 Binary files a/embeddings/scales/paragraph_30.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_31.npy b/embeddings/scales/paragraph_31.npy deleted file mode 100644 index ab79cef7..00000000 Binary files a/embeddings/scales/paragraph_31.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_32.npy b/embeddings/scales/paragraph_32.npy deleted file mode 100644 index 2fa86cc2..00000000 Binary files a/embeddings/scales/paragraph_32.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_33.npy b/embeddings/scales/paragraph_33.npy deleted file mode 100644 index faccb4c0..00000000 Binary files a/embeddings/scales/paragraph_33.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_34.npy b/embeddings/scales/paragraph_34.npy deleted file mode 100644 index 5ad0dc97..00000000 Binary files a/embeddings/scales/paragraph_34.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_35.npy b/embeddings/scales/paragraph_35.npy deleted file mode 100644 index a22dbd6d..00000000 Binary files a/embeddings/scales/paragraph_35.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_36.npy b/embeddings/scales/paragraph_36.npy deleted file mode 100644 index c0f401b1..00000000 Binary files a/embeddings/scales/paragraph_36.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_37.npy b/embeddings/scales/paragraph_37.npy deleted file mode 100644 index 39f04c16..00000000 Binary files a/embeddings/scales/paragraph_37.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_38.npy b/embeddings/scales/paragraph_38.npy deleted file mode 100644 index 479e2ca3..00000000 Binary files a/embeddings/scales/paragraph_38.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_39.npy b/embeddings/scales/paragraph_39.npy deleted file mode 100644 index 95176f0c..00000000 Binary files a/embeddings/scales/paragraph_39.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_4.npy b/embeddings/scales/paragraph_4.npy deleted file mode 100644 index 15cc2808..00000000 Binary files a/embeddings/scales/paragraph_4.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_40.npy b/embeddings/scales/paragraph_40.npy deleted file mode 100644 index a6070b90..00000000 Binary files a/embeddings/scales/paragraph_40.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_41.npy b/embeddings/scales/paragraph_41.npy deleted file mode 100644 index b742d4c6..00000000 Binary files a/embeddings/scales/paragraph_41.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_42.npy b/embeddings/scales/paragraph_42.npy deleted file mode 100644 index 11562d7f..00000000 Binary files a/embeddings/scales/paragraph_42.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_43.npy b/embeddings/scales/paragraph_43.npy deleted file mode 100644 index f1d91c97..00000000 Binary files a/embeddings/scales/paragraph_43.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_44.npy b/embeddings/scales/paragraph_44.npy deleted file mode 100644 index d76b8ee2..00000000 Binary files a/embeddings/scales/paragraph_44.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_45.npy b/embeddings/scales/paragraph_45.npy deleted file mode 100644 index 52429c92..00000000 Binary files a/embeddings/scales/paragraph_45.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_46.npy b/embeddings/scales/paragraph_46.npy deleted file mode 100644 index e2a3645d..00000000 Binary files a/embeddings/scales/paragraph_46.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_47.npy b/embeddings/scales/paragraph_47.npy deleted file mode 100644 index 1fbb5e39..00000000 Binary files a/embeddings/scales/paragraph_47.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_48.npy b/embeddings/scales/paragraph_48.npy deleted file mode 100644 index 27a88a4e..00000000 Binary files a/embeddings/scales/paragraph_48.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_49.npy b/embeddings/scales/paragraph_49.npy deleted file mode 100644 index aa63ccf8..00000000 Binary files a/embeddings/scales/paragraph_49.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_5.npy b/embeddings/scales/paragraph_5.npy deleted file mode 100644 index dc48ddcf..00000000 Binary files a/embeddings/scales/paragraph_5.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_50.npy b/embeddings/scales/paragraph_50.npy deleted file mode 100644 index 21358ade..00000000 Binary files a/embeddings/scales/paragraph_50.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_51.npy b/embeddings/scales/paragraph_51.npy deleted file mode 100644 index b953fe77..00000000 Binary files a/embeddings/scales/paragraph_51.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_52.npy b/embeddings/scales/paragraph_52.npy deleted file mode 100644 index cdc02918..00000000 Binary files a/embeddings/scales/paragraph_52.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_53.npy b/embeddings/scales/paragraph_53.npy deleted file mode 100644 index 95a777bb..00000000 Binary files a/embeddings/scales/paragraph_53.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_54.npy b/embeddings/scales/paragraph_54.npy deleted file mode 100644 index 16f58c0d..00000000 Binary files a/embeddings/scales/paragraph_54.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_55.npy b/embeddings/scales/paragraph_55.npy deleted file mode 100644 index 1644b1e5..00000000 Binary files a/embeddings/scales/paragraph_55.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_56.npy b/embeddings/scales/paragraph_56.npy deleted file mode 100644 index 7400e474..00000000 Binary files a/embeddings/scales/paragraph_56.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_57.npy b/embeddings/scales/paragraph_57.npy deleted file mode 100644 index 3f901b9f..00000000 Binary files a/embeddings/scales/paragraph_57.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_58.npy b/embeddings/scales/paragraph_58.npy deleted file mode 100644 index 9190b65f..00000000 Binary files a/embeddings/scales/paragraph_58.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_59.npy b/embeddings/scales/paragraph_59.npy deleted file mode 100644 index cf52a5e2..00000000 Binary files a/embeddings/scales/paragraph_59.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_6.npy b/embeddings/scales/paragraph_6.npy deleted file mode 100644 index 38b81b46..00000000 Binary files a/embeddings/scales/paragraph_6.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_60.npy b/embeddings/scales/paragraph_60.npy deleted file mode 100644 index 996d7faa..00000000 Binary files a/embeddings/scales/paragraph_60.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_61.npy b/embeddings/scales/paragraph_61.npy deleted file mode 100644 index 312c2291..00000000 Binary files a/embeddings/scales/paragraph_61.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_62.npy b/embeddings/scales/paragraph_62.npy deleted file mode 100644 index 9211638c..00000000 Binary files a/embeddings/scales/paragraph_62.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_63.npy b/embeddings/scales/paragraph_63.npy deleted file mode 100644 index 1ffd4630..00000000 Binary files a/embeddings/scales/paragraph_63.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_64.npy b/embeddings/scales/paragraph_64.npy deleted file mode 100644 index 04062382..00000000 Binary files a/embeddings/scales/paragraph_64.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_65.npy b/embeddings/scales/paragraph_65.npy deleted file mode 100644 index 790dc1d1..00000000 Binary files a/embeddings/scales/paragraph_65.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_66.npy b/embeddings/scales/paragraph_66.npy deleted file mode 100644 index 15c028bb..00000000 Binary files a/embeddings/scales/paragraph_66.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_67.npy b/embeddings/scales/paragraph_67.npy deleted file mode 100644 index 5c2b33b3..00000000 Binary files a/embeddings/scales/paragraph_67.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_68.npy b/embeddings/scales/paragraph_68.npy deleted file mode 100644 index cffc7da0..00000000 Binary files a/embeddings/scales/paragraph_68.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_69.npy b/embeddings/scales/paragraph_69.npy deleted file mode 100644 index 48821e4b..00000000 Binary files a/embeddings/scales/paragraph_69.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_7.npy b/embeddings/scales/paragraph_7.npy deleted file mode 100644 index c87a414b..00000000 Binary files a/embeddings/scales/paragraph_7.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_70.npy b/embeddings/scales/paragraph_70.npy deleted file mode 100644 index 6c64dd0d..00000000 Binary files a/embeddings/scales/paragraph_70.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_71.npy b/embeddings/scales/paragraph_71.npy deleted file mode 100644 index 8ae523b7..00000000 Binary files a/embeddings/scales/paragraph_71.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_72.npy b/embeddings/scales/paragraph_72.npy deleted file mode 100644 index 5c168897..00000000 Binary files a/embeddings/scales/paragraph_72.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_73.npy b/embeddings/scales/paragraph_73.npy deleted file mode 100644 index bc499436..00000000 Binary files a/embeddings/scales/paragraph_73.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_74.npy b/embeddings/scales/paragraph_74.npy deleted file mode 100644 index 529bf0be..00000000 Binary files a/embeddings/scales/paragraph_74.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_75.npy b/embeddings/scales/paragraph_75.npy deleted file mode 100644 index 6f9c32c8..00000000 Binary files a/embeddings/scales/paragraph_75.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_76.npy b/embeddings/scales/paragraph_76.npy deleted file mode 100644 index b5a43708..00000000 Binary files a/embeddings/scales/paragraph_76.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_77.npy b/embeddings/scales/paragraph_77.npy deleted file mode 100644 index a3a7aa64..00000000 Binary files a/embeddings/scales/paragraph_77.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_78.npy b/embeddings/scales/paragraph_78.npy deleted file mode 100644 index ab746926..00000000 Binary files a/embeddings/scales/paragraph_78.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_79.npy b/embeddings/scales/paragraph_79.npy deleted file mode 100644 index fbeacd7f..00000000 Binary files a/embeddings/scales/paragraph_79.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_8.npy b/embeddings/scales/paragraph_8.npy deleted file mode 100644 index 9a5448e4..00000000 Binary files a/embeddings/scales/paragraph_8.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_80.npy b/embeddings/scales/paragraph_80.npy deleted file mode 100644 index 92fa51a2..00000000 Binary files a/embeddings/scales/paragraph_80.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_81.npy b/embeddings/scales/paragraph_81.npy deleted file mode 100644 index e1473510..00000000 Binary files a/embeddings/scales/paragraph_81.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_82.npy b/embeddings/scales/paragraph_82.npy deleted file mode 100644 index 243fb5a3..00000000 Binary files a/embeddings/scales/paragraph_82.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_83.npy b/embeddings/scales/paragraph_83.npy deleted file mode 100644 index a7de955c..00000000 Binary files a/embeddings/scales/paragraph_83.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_84.npy b/embeddings/scales/paragraph_84.npy deleted file mode 100644 index 27034e39..00000000 Binary files a/embeddings/scales/paragraph_84.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_85.npy b/embeddings/scales/paragraph_85.npy deleted file mode 100644 index bd4d313b..00000000 Binary files a/embeddings/scales/paragraph_85.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_86.npy b/embeddings/scales/paragraph_86.npy deleted file mode 100644 index 8180ce17..00000000 Binary files a/embeddings/scales/paragraph_86.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_87.npy b/embeddings/scales/paragraph_87.npy deleted file mode 100644 index 35c30476..00000000 Binary files a/embeddings/scales/paragraph_87.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_88.npy b/embeddings/scales/paragraph_88.npy deleted file mode 100644 index f2438c36..00000000 Binary files a/embeddings/scales/paragraph_88.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_89.npy b/embeddings/scales/paragraph_89.npy deleted file mode 100644 index d535361b..00000000 Binary files a/embeddings/scales/paragraph_89.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_9.npy b/embeddings/scales/paragraph_9.npy deleted file mode 100644 index 3d7a0447..00000000 Binary files a/embeddings/scales/paragraph_9.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_90.npy b/embeddings/scales/paragraph_90.npy deleted file mode 100644 index 52eb01d5..00000000 Binary files a/embeddings/scales/paragraph_90.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_91.npy b/embeddings/scales/paragraph_91.npy deleted file mode 100644 index 5659dbdf..00000000 Binary files a/embeddings/scales/paragraph_91.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_92.npy b/embeddings/scales/paragraph_92.npy deleted file mode 100644 index 7c084375..00000000 Binary files a/embeddings/scales/paragraph_92.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_93.npy b/embeddings/scales/paragraph_93.npy deleted file mode 100644 index bc417f6a..00000000 Binary files a/embeddings/scales/paragraph_93.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_94.npy b/embeddings/scales/paragraph_94.npy deleted file mode 100644 index f04038b6..00000000 Binary files a/embeddings/scales/paragraph_94.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_95.npy b/embeddings/scales/paragraph_95.npy deleted file mode 100644 index 13f933ad..00000000 Binary files a/embeddings/scales/paragraph_95.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_96.npy b/embeddings/scales/paragraph_96.npy deleted file mode 100644 index fb74f142..00000000 Binary files a/embeddings/scales/paragraph_96.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_97.npy b/embeddings/scales/paragraph_97.npy deleted file mode 100644 index 2dfa16cf..00000000 Binary files a/embeddings/scales/paragraph_97.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_98.npy b/embeddings/scales/paragraph_98.npy deleted file mode 100644 index a79c5883..00000000 Binary files a/embeddings/scales/paragraph_98.npy and /dev/null differ diff --git a/embeddings/scales/paragraph_99.npy b/embeddings/scales/paragraph_99.npy deleted file mode 100644 index 1379c0c0..00000000 Binary files a/embeddings/scales/paragraph_99.npy and /dev/null differ diff --git a/embeddings/search_similarity.py b/embeddings/search_similarity.py deleted file mode 100644 index e87348e1..00000000 --- a/embeddings/search_similarity.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python3 -"""Semantic similarity search over stored POEM embeddings. - -Given a query sentence, embeds it and compares it against all stored -paragraph embeddings using multiple similarity metrics. - -Usage: - # Interactive mode - python embeddings/search_similarity.py - - # Single query from command line - python embeddings/search_similarity.py "instruments that measure anxiety in children" - - # Control number of results returned per metric - python embeddings/search_similarity.py "caregiver therapy attendance" --top-k 10 -""" - -import os -import sys -import argparse -import glob - -import numpy as np -from openai import OpenAI - -# --------------------------------------------------------------------------- -# Config -# --------------------------------------------------------------------------- -_HERE = os.path.dirname(os.path.abspath(__file__)) -SECTIONS = ["instruments", "scales", "collections"] -DEFAULT_TOP_K = 5 -EMBEDDINGS_DIR = os.environ.get("EMBEDDINGS_DIR", _HERE) - -_BASE_URL = os.environ.get("EMBED_BASE_URL", "http://idea-llm-02.idea.rpi.edu:1234/v1") -_MODEL = os.environ.get("EMBED_MODEL", "qwen3-embedding:latest") -client = OpenAI(base_url=_BASE_URL, api_key="not-needed") - -# --------------------------------------------------------------------------- -# Load all stored embeddings and texts -# --------------------------------------------------------------------------- - -def load_embeddings() -> tuple[np.ndarray, np.ndarray, np.ndarray]: - """Load all paragraph embeddings and their source texts from disk. - - Returns: - embeddings : float32 array of shape (N, dim) - texts : object array of shape (N,) with source text strings - sections : object array of shape (N,) with section name per paragraph - """ - all_embeddings = [] - all_texts = [] - all_sections = [] - - for section in SECTIONS: - section_dir = os.path.join(EMBEDDINGS_DIR, section) - if not os.path.isdir(section_dir): - print(f" Warning: section folder not found: {section_dir}") - print(f" Run generate_embeddings.py first to create embeddings.") - continue - - texts_path = os.path.join(section_dir, "texts.npy") - if not os.path.exists(texts_path): - print(f" Warning: texts.npy missing in {section_dir}") - continue - - texts = np.load(texts_path, allow_pickle=True) - - # Load paragraph_0.npy, paragraph_1.npy, ... in order - para_files = sorted( - glob.glob(os.path.join(section_dir, "paragraph_*.npy")), - key=lambda p: int(os.path.splitext(os.path.basename(p))[0].split("_")[1]) - ) - - if not para_files: - print(f" Warning: no paragraph files found in {section_dir}") - continue - - section_embeddings = np.stack([np.load(p) for p in para_files]) # (N, dim) - - all_embeddings.append(section_embeddings) - all_texts.append(texts[:len(para_files)]) - all_sections.append(np.array([section] * len(para_files), dtype=object)) - - print(f" Loaded {len(para_files)} paragraphs from '{section}'") - - if not all_embeddings: - print("No embeddings found. Run generate_embeddings.py first.") - sys.exit(1) - - embeddings = np.concatenate(all_embeddings, axis=0) # (N_total, dim) - texts = np.concatenate(all_texts, axis=0) # (N_total,) - sections = np.concatenate(all_sections, axis=0) # (N_total,) - return embeddings, texts, sections - - -# --------------------------------------------------------------------------- -# Embed the query sentence -# --------------------------------------------------------------------------- - -def embed_query(query: str) -> np.ndarray: - """Return a 1D float32 embedding for the query string.""" - response = client.embeddings.create( - model=_MODEL, - input=[query] - ) - return np.array(response.data[0].embedding, dtype=np.float32) - - -# --------------------------------------------------------------------------- -# Similarity metrics -# --------------------------------------------------------------------------- - -def cosine_similarity(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: - """Cosine similarity between query and every row in matrix. - Range: [-1, 1]. Higher is more similar. - """ - query_norm = query_vec / (np.linalg.norm(query_vec) + 1e-10) - matrix_norms = matrix / (np.linalg.norm(matrix, axis=1, keepdims=True) + 1e-10) - return matrix_norms @ query_norm - - -def dot_product(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: - """Raw dot product similarity. Higher is more similar.""" - return matrix @ query_vec - - -def euclidean_distance(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: - """Euclidean (L2) distance. Lower is more similar. - Returned as negative so higher = more similar (consistent with other metrics). - """ - diff = matrix - query_vec - return -np.sqrt((diff ** 2).sum(axis=1)) - - -def manhattan_distance(query_vec: np.ndarray, matrix: np.ndarray) -> np.ndarray: - """Manhattan (L1) distance. Lower is more similar. - Returned as negative so higher = more similar. - """ - return -np.abs(matrix - query_vec).sum(axis=1) - - -METRICS = { - "Cosine Similarity": cosine_similarity, - "Dot Product": dot_product, - "Euclidean (L2)": euclidean_distance, - "Manhattan (L1)": manhattan_distance, -} - - -# --------------------------------------------------------------------------- -# Display results -# --------------------------------------------------------------------------- - -def print_results( - metric_name: str, - scores: np.ndarray, - texts: np.ndarray, - sections: np.ndarray, - top_k: int, -): - top_indices = np.argsort(scores)[::-1][:top_k] - print(f"\n{'='*70}") - print(f" {metric_name} — Top {top_k} results") - print(f"{'='*70}") - for rank, idx in enumerate(top_indices, start=1): - score = scores[idx] - section = sections[idx] - text_preview = texts[idx].replace("\n", " ") - if len(text_preview) > 120: - text_preview = text_preview[:117] + "..." - print(f" #{rank:2d} [{section:12s}] score={score:+.4f}") - print(f" {text_preview}") - print() - - -# --------------------------------------------------------------------------- -# Main -# --------------------------------------------------------------------------- - -def run_search(query: str, top_k: int, embeddings: np.ndarray, texts: np.ndarray, sections: np.ndarray): - print(f'\nQuery: "{query}"') - print("Embedding query...") - query_vec = embed_query(query) - - for metric_name, metric_fn in METRICS.items(): - scores = metric_fn(query_vec, embeddings) - print_results(metric_name, scores, texts, sections, top_k) - - -def main(): - parser = argparse.ArgumentParser(description="Search POEM embeddings with multiple similarity metrics.") - parser.add_argument("query", nargs="?", default=None, help="Query sentence (omit for interactive mode)") - parser.add_argument("--top-k", type=int, default=DEFAULT_TOP_K, help=f"Number of results per metric (default: {DEFAULT_TOP_K})") - args = parser.parse_args() - - print("Loading embeddings...") - embeddings, texts, sections = load_embeddings() - print(f"Total paragraphs loaded: {len(texts)}") - - if args.query: - run_search(args.query, args.top_k, embeddings, texts, sections) - else: - print("\nInteractive mode — type a sentence and press Enter. Type 'quit' to exit.\n") - while True: - try: - query = input("Query> ").strip() - except (EOFError, KeyboardInterrupt): - print("\nExiting.") - break - if not query: - continue - if query.lower() in ("quit", "exit", "q"): - break - run_search(query, args.top_k, embeddings, texts, sections) - - -if __name__ == "__main__": - main() diff --git a/embeddings/templates.txt b/embeddings/templates.txt deleted file mode 100644 index d6dbcf2b..00000000 --- a/embeddings/templates.txt +++ /dev/null @@ -1 +0,0 @@ -My name is Armaan Shivpuri \ No newline at end of file