|
import json |
|
from typing import List, Optional |
|
from pydantic import BaseModel, Field |
|
from src.llm_factory import get_llm |
|
|
|
class PlanStep(BaseModel): |
|
"""Details about a single step in the plan.""" |
|
step_title: str = Field( |
|
description="What does this step do briefly. Without formatted text." |
|
) |
|
detailed_instructions: str = Field( |
|
description="What does this step do in great detail" |
|
) |
|
|
|
class DocumentDetails(BaseModel): |
|
"""A description of what problem needs to be solved.""" |
|
step_items: list[PlanStep] = Field( |
|
description="A list with the steps of the plan" |
|
) |
|
|
|
llm = get_llm("ollama-llama3.1") |
|
sllm = llm.as_structured_llm(DocumentDetails) |
|
|
|
text = """ |
|
You are an expert at breaking down complex problems into smaller, more manageable parts. |
|
|
|
Create a rough plan for how to solve an ARC (Abstraction & Reasoning Corpus) puzzle. |
|
You have the input and output of the puzzle as a list of 2D arrays. |
|
|
|
Ideas to include in the plan: |
|
- Input/Output Analysis, look for clues within the input or output, are the shapes always square? |
|
- Hypothesis Generation, is this a sorting problem? are there things that has to be counted? |
|
- Refinement and Iteration |
|
- Document your thought process |
|
- Failure Analysis, did one of the step miss something crucial? |
|
- Solution Verification |
|
""" |
|
|
|
response = sllm.complete(text) |
|
|
|
json_response = json.loads(response.text) |
|
print(json.dumps(json_response, indent=2)) |
|
|