hibam1
add script to run dynamic tool agent
df07284
Raw History Blame Contribute Delete
1.52 kB
import json
from typing import Any
from pydantic import BaseModel, Field
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage
from dotenv import load_dotenv
from .state import AgentState, parameter_catalog
load_dotenv()
class ExtractedParameter(BaseModel):
name: str = Field(
description="Parameter name from the global catalog"
)
value: str | int | float | bool | None = Field(
description="Extracted parameter value"
)
class ExtractionResult(BaseModel):
parameters: list[ExtractedParameter] = Field(
default_factory=list
)
llm = ChatOpenAI(model="gpt-4o")
extractor_llm = llm.with_structured_output(
ExtractionResult
)
def extract_parameters(state: AgentState):
system_prompt = f"""
You are a parameter extraction agent.
Extract parameters from the user conversation.
Available parameter catalog:
{json.dumps(parameter_catalog)}
Rules:
- Only extract parameters defined in the catalog.
- Use conversation context to understand references.
- Do not invent missing values.
- Return only new or corrected values.
- Do not decide which tool to execute.
"""
result = extractor_llm.invoke([
SystemMessage(content=system_prompt),
*state["messages"]
])
extracted = {
param.name: param.value
for param in result.parameters
if param.name in parameter_catalog
}
return {
"global_params": extracted
}