File size: 1,622 Bytes
5a3b322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from __future__ import annotations

from typing import Dict, Optional

from retrieval.query_rewriter import rewrite_query
from schemas.query_plan import QueryPlan, DurationConstraint


def build_query_plan(raw_text: str, vocab: Optional[Dict] = None, llm_extractor=None) -> QueryPlan:
    """Plan builder using the rule-based rewriter; optional llm_extractor (e.g., NuExtract)."""
    rw = rewrite_query(raw_text, catalog_vocab=vocab, llm_extractor=llm_extractor)
    print("inside build query plan", rw)
    dur = None
    if rw.constraints and rw.constraints.duration:
        dur = DurationConstraint(mode=rw.constraints.duration.mode, minutes=rw.constraints.duration.minutes)
    language = rw.constraints.languages[0] if rw.constraints.languages else None
    plan_source = "deterministic"
    if rw.llm_debug:
        if rw.llm_debug.get("error"):
            plan_source = rw.llm_debug.get("model", "llm_error")
        else:
            plan_source = rw.llm_debug.get("model", "llm")
    
    print("plan source is", plan_source)

    plan = QueryPlan(
        intent=rw.intent,
        role_title=" ".join(rw.role_terms) if rw.role_terms else None,
        must_have_skills=rw.must_have_skills,
        soft_skills=rw.soft_skills,
        duration=dur,
        language=language,
        flags=rw.constraints.flags if rw.constraints else {},
        bm25_query=rw.retrieval_query,
        vec_query=rw.retrieval_query,
        rerank_query=rw.rerank_query,
        needs_clarification=False,
        clarifying_question=None,
        plan_source=plan_source,
        llm_debug=rw.llm_debug,
    )
    return plan