Ruurd commited on
Commit
7c142c4
·
verified ·
1 Parent(s): 015d05a

Use Jev initial decisions and values-only semantic queries

Browse files
Files changed (2) hide show
  1. backend/app.py +2 -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", "openai")
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 the EDF subset used for semantic embedding matching."""
 
 
 
 
 
 
 
 
 
 
 
 
 
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}")