File size: 730 Bytes
6835659
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from __future__ import annotations

from pathlib import Path

from src.planner.ollama_llm import OllamaPlannerLLM
from src.planner.schema import SemanticPlan
from src.planner.validation import validate_semantic_plan_dict


class VisualPlannerLLM:
    name = "VisualPlannerOllama"

    def __init__(self, prompt_path: str = "src/planner/prompts/visual.txt"):
        self.llm = OllamaPlannerLLM()
        self.prompt_template = Path(prompt_path).read_text(encoding="utf-8")

    def plan(self, user_prompt: str) -> SemanticPlan:
        prompt = self.prompt_template.replace("{{USER_PROMPT}}", user_prompt)
        data = self.llm.generate_json(prompt)
        validate_semantic_plan_dict(data)
        return SemanticPlan(**data)