semantic-search-cwicr
Semantic search in the DDC CWICR construction cost database using vector embeddings (BGE-M3, 1024-dim, per-language Qdrant collections). Find similar work items and resources for cost estimation across 8 national bases and 30 markets in 26 languages.
Install / Use
npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill semantic-search-cwicrInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AI & Machine LearningSupported Platforms
Our assessment of semantic-search-cwicr
semantic-search-cwicr scores 89/100 on our quality scale, 449th of 963 AI & Machine Learning skills we index (top 47%).
Its SKILL.md is 6.9 KB long, well organised into 20 sections with 4 code examples: a thorough specification that gives an agent plenty to work with.
It has 333 GitHub stars, a meaningful sign that others use it.
Maintenance, license and trust
- The repository was last updated about 2 months ago, so semantic-search-cwicr is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-10-17. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
semantic-search-cwicr compared with similar skills
All 4 of these similar skills score higher than semantic-search-cwicr; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| semantic-search-cwicr (this skill)by datadrivenconstruction | 89 | 333 | 56d ago | SKILL.md |
| claude-memby thedotmack | 100 | 101.3k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 98.3k | 2d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 86.7k | 5d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 75.5k | today | CLAUDE.md |
Frequently asked questions
- How do I install semantic-search-cwicr?
- Run
npx skills add datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill semantic-search-cwicr. The install tabs above show the steps for each supported agent. - Which AI agents does semantic-search-cwicr work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is semantic-search-cwicr safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is semantic-search-cwicr still maintained?
- The repository was last updated about 2 months ago, so semantic-search-cwicr is actively maintained.
Skill content
View source on GitHubname: "semantic-search-cwicr" description: "Semantic search in the DDC CWICR construction cost database using vector embeddings (BGE-M3, 1024-dim, per-language Qdrant collections). Find similar work items and resources for cost estimation across 8 national bases and 30 markets in 26 languages." homepage: "https://datadrivenconstruction.io" metadata: {"openclaw": {"emoji": "🗄️", "os": ["darwin", "linux", "win32"], "homepage": "https://datadrivenconstruction.io", "requires": {"bins": ["python3"], "env": ["QDRANT_URL"]}, "primaryEnv": "QDRANT_URL"}}
Semantic Search in DDC CWICR Database
Business Case
Problem Statement
Construction cost estimation requires finding relevant work items from large databases. Traditional keyword search fails when:
- Users describe work in natural language
- Terminology varies across regions and languages
- Similar work items have different naming conventions
Solution
DDC CWICR provides pre-computed embeddings (BAAI/bge-m3, 1024 dimensions) enabling multilingual semantic search across 8 national bases (78,228 positions) plus the 30-market global base in 26 languages, with 48 PPP-repriced market catalogs per national base.
Business Value
- 90% faster work item lookup compared to manual search
- Multi-language: Arabic, Bulgarian, Chinese, Croatian, Czech, Danish, Dutch, English, Finnish, French, German, Hindi, Indonesian, Italian, Japanese, Korean, Mongolian, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Thai, Turkish, Vietnamese
- Higher accuracy by finding semantically similar items, not just keyword matches
Data landscape (2026)
| National base | Region id | Positions |
|---|---|---|
| Turkey (Birim Fiyat) | TR_NATIONAL | 22,704 |
| China (Beijing Dinge + Bole) | ZH_CHINA | 11,312 |
| Brazil (SINAPI) | BR_NATIONAL | 9,723 |
| Spain (BCCA Andalucía) | ES_ANDALUCIA | 6,453 |
| Italy (Prezzario Toscana) | IT_TOSCANA | 5,836 |
| Vietnam (Dinh Muc) | VN_NATIONAL | 4,299 |
| Indonesia (AHSP) | ID_NATIONAL | 2,784 |
| Greece (GGDE) | GR_NATIONAL | 2,647 |
Each base ships the 95-column CWICR master schema (rate_code, rate_original_name, rate_final_name, rate_unit, total_cost_per_position, classification hierarchy collection/department/section/subsection/category, resource_* component lines with is_material/is_machine/is_labor flags) plus 26 language editions and 48 markets/*.csv catalogs.
Latest data release: v0.4.0 (see releases).
Technical Implementation
Prerequisites
pip install qdrant-client pandas sentence-transformers
Collections (2026)
The vector store uses BAAI/bge-m3 (1024-dim dense + sparse + colbert in one forward pass, MIT license, 100+ languages). Production collections are named cwicr_{LANG}_v3 (e.g. cwicr_tr_v3, cwicr_zh_v3). An ONNX-int8 variant (gpahal/bge-m3-onnx-int8, ~700 MB) is used on VPS-sized hosts.
Python Implementation
import pandas as pd
from qdrant_client import QdrantClient
from sentence_transformers import SentenceTransformer
class CWICRSemanticSearch:
def __init__(self, host="localhost", port=6333, lang="en"):
self.client = QdrantClient(host=host, port=port)
self.collection = f"cwicr_{lang}_v3"
self.model = SentenceTransformer("BAAI/bge-m3")
def search_work_items(self, query, limit=10):
vec = self.model.encode(query).tolist()
hits = self.client.search(
collection_name=self.collection,
query_vector=vec,
limit=limit,
)
return pd.DataFrame([{**h.payload, "score": h.score} for h in hits])
def search_by_category(self, query, category, limit=10):
vec = self.model.encode(query).tolist()
hits = self.client.search(
collection_name=self.collection,
query_vector=vec,
query_filter={"must": [{"key": "category", "match": {"value": category}}]},
limit=limit,
)
return pd.DataFrame([{**h.payload, "score": h.score} for h in hits])
Inside OpenConstructionERP
The platform's costs module already exposes semantic matching:
POST /api/v1/costs/suggest-for-element— rank cost items for a BIM element body./qdrant-search— multilingual candidate retrieval for a query.- The SQL fallback (
GET /api/v1/costs/?q=...) works without Qdrant.
Database Schema (95-column master)
Key fields the payload carries:
| Field | Type | Description |
|-------|------|-------------|
| rate_code | string | Unique work item code (e.g. 15.115.1008) |
| rate_original_name | string | Source-language description |
| rate_final_name | string | Display/translated description |
| rate_unit | string | m², m³, m, kg, Ad, Sa… |
| total_cost_per_position | float | Total unit price |
| total_resource_cost_per_position | float | Resource sum (before markup) |
| collection_name / department_name / section_name / subsection_name | string | Classification hierarchy |
| category_type | string | Normalized category (e.g. CONSTRUCTION WORK) |
| resource_name / resource_quantity / resource_price_per_unit_current / resource_cost | mixed | Component lines |
| is_material / is_machine / is_labor | bool | Component nature flags |
Usage Examples
Basic Search
search = CWICRSemanticSearch(lang="tr")
# Natural language query
results = search.search_work_items("tuğla duvar örülmesi")
print(results[["rate_code", "rate_original_name", "total_cost_per_position", "score"]])
Cost Estimation
# Find work items for foundation work
foundation = search.search_work_items("reinforced concrete foundation", limit=20)
# Estimate with quantities (BIM takeoff)
quantities = {"15.115.1008": 150.0} # m³
total = sum(quantities[c] * row["total_cost_per_position"]
for _, row in foundation.iterrows() if row["rate_code"] in quantities)
print(f"Estimated: {total:,.2f} TRY")
Best Practices
- Use specific queries - "reinforced concrete slab 200mm" beats "concrete"
- Filter by category - Narrow results to relevant work types
- Check similarity scores - Low scores need manual verification
- Combine with QTO - Use BIM quantities for automated estimation
- Mind the coefficient bases - Vietnam and Indonesia have no prices (rate 0); price them via a market resource sheet
- Trust the source column -
rate_original_nameholds the source wording; translations live inrate_final_name
Resources
- GitHub: OpenConstructionEstimate-DDC-CWICR
- Releases: v0.4.0
- Platform: OpenConstructionERP
- Qdrant Docs: https://qdrant.tech/documentation/
Related Skills
claude-mem
101.3kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
98.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
86.7kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
75.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
