Redesign Python AI engine (#5991)

# Description of Changes
Redesign the Python AI engine to be properly agentic and make use of
`pydantic-ai` instead of `langchain` for correctness and ergonomics.
This should be a good foundation for us to build our AI engine on going
forwards.
This commit is contained in:
James Brunton
2026-03-26 10:35:47 +00:00
committed by GitHub
parent 9500acd69f
commit e10c5f6283
211 changed files with 3891 additions and 27744 deletions
+32
View File
@@ -0,0 +1,32 @@
from __future__ import annotations
from typing import Literal
from pydantic import model_validator
from stirling.models import OPERATIONS, ApiModel, OperationId, ParamToolModel
class ConversationMessage(ApiModel):
role: str
content: str
class PdfTextSelection(ApiModel):
page_number: int | None = None
text: str
class ToolOperationStep(ApiModel):
kind: Literal["tool"] = "tool"
tool: OperationId
parameters: ParamToolModel
@model_validator(mode="after")
def validate_tool_parameter_pairing(self) -> ToolOperationStep:
expected_type = OPERATIONS[self.tool]
if not isinstance(self.parameters, expected_type):
actual_type = type(self.parameters).__name__
expected_type_name = expected_type.__name__
raise ValueError(f"Parameters for tool {self.tool.value} must be {expected_type_name}, got {actual_type}.")
return self