Spaces:
Sleeping
Sleeping
Use Jev initial decisions and values-only semantic queries
Browse files- backend/app.py +2 -2
- src/data/loaders.py +15 -2
backend/app.py
CHANGED
|
@@ -203,7 +203,7 @@ def terminology_asset(asset_path: str):
|
|
| 203 |
|
| 204 |
|
| 205 |
def classify_batch(batch: Batch, review: bool):
|
| 206 |
-
provider = "openai" if review else os.getenv("PIPELINE_CLASSIFIER_PROVIDER", "
|
| 207 |
if provider not in {"jev", "openai", "anthropic", "google"}:
|
| 208 |
raise HTTPException(503, "The classification provider is not configured correctly.")
|
| 209 |
model = os.getenv("PIPELINE_REVIEW_MODEL" if review else "PIPELINE_CLASSIFIER_MODEL") or default_model_for(provider)
|
|
@@ -244,7 +244,7 @@ def review(batch: Batch):
|
|
| 244 |
@app.post("/api/embed", dependencies=[Depends(authorize), Depends(model_rate_limit)])
|
| 245 |
def embed(event: EventRequest):
|
| 246 |
"""Encode one EDF query; terminology vectors are always precomputed."""
|
| 247 |
-
query = EventDefinitionForm(name="browser-edf", **event.edf).to_embedding_query()
|
| 248 |
try:
|
| 249 |
response = _get_openai_client().embeddings.create(
|
| 250 |
model="text-embedding-3-large", input=query, dimensions=3072, encoding_format="float")
|
|
|
|
| 203 |
|
| 204 |
|
| 205 |
def classify_batch(batch: Batch, review: bool):
|
| 206 |
+
provider = "openai" if review else os.getenv("PIPELINE_CLASSIFIER_PROVIDER", "jev")
|
| 207 |
if provider not in {"jev", "openai", "anthropic", "google"}:
|
| 208 |
raise HTTPException(503, "The classification provider is not configured correctly.")
|
| 209 |
model = os.getenv("PIPELINE_REVIEW_MODEL" if review else "PIPELINE_CLASSIFIER_MODEL") or default_model_for(provider)
|
|
|
|
| 244 |
@app.post("/api/embed", dependencies=[Depends(authorize), Depends(model_rate_limit)])
|
| 245 |
def embed(event: EventRequest):
|
| 246 |
"""Encode one EDF query; terminology vectors are always precomputed."""
|
| 247 |
+
query = EventDefinitionForm(name="browser-edf", **event.edf).to_embedding_query(include_labels=False)
|
| 248 |
try:
|
| 249 |
response = _get_openai_client().embeddings.create(
|
| 250 |
model="text-embedding-3-large", input=query, dimensions=3072, encoding_format="float")
|
src/data/loaders.py
CHANGED
|
@@ -97,8 +97,21 @@ class EventDefinitionForm:
|
|
| 97 |
terms = [self.preferred_name.strip(), *(term.strip() for term in self.synonyms)]
|
| 98 |
return " ".join(dict.fromkeys(term for term in terms if term))
|
| 99 |
|
| 100 |
-
def to_embedding_query(self) -> str:
|
| 101 |
-
"""Render
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
lines = [f"Preferred name: {self.preferred_name}"]
|
| 103 |
if self.narrow_definition:
|
| 104 |
lines.append(f"Narrow definition: {self.narrow_definition}")
|
|
|
|
| 97 |
terms = [self.preferred_name.strip(), *(term.strip() for term in self.synonyms)]
|
| 98 |
return " ".join(dict.fromkeys(term for term in terms if term))
|
| 99 |
|
| 100 |
+
def to_embedding_query(self, *, include_labels: bool = True) -> str:
|
| 101 |
+
"""Render retrieval fields; retain labeled defaults for study compatibility."""
|
| 102 |
+
if not include_labels:
|
| 103 |
+
values = [self.preferred_name]
|
| 104 |
+
if self.narrow_definition:
|
| 105 |
+
values.append(self.narrow_definition)
|
| 106 |
+
if self.synonyms:
|
| 107 |
+
values.append(", ".join(self.synonyms))
|
| 108 |
+
values.extend(self.narrow_decision_rules)
|
| 109 |
+
values.extend(self.candidate_anchor_codes)
|
| 110 |
+
if self.morphology:
|
| 111 |
+
values.append(self.morphology)
|
| 112 |
+
if self.anatomical_location:
|
| 113 |
+
values.append(self.anatomical_location)
|
| 114 |
+
return "\n".join(str(value) for value in values)
|
| 115 |
lines = [f"Preferred name: {self.preferred_name}"]
|
| 116 |
if self.narrow_definition:
|
| 117 |
lines.append(f"Narrow definition: {self.narrow_definition}")
|