mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-10 00:28:31 +00:00
fix: ensure response models checked before parsing attempt
final answer was incorrectly trying to parse response models
This commit is contained in:
@@ -10,7 +10,7 @@ from collections.abc import Callable
|
|||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING, Any, Literal, cast
|
from typing import TYPE_CHECKING, Any, Literal, cast
|
||||||
|
|
||||||
from pydantic import BaseModel, GetCoreSchemaHandler
|
from pydantic import BaseModel, GetCoreSchemaHandler, ValidationError
|
||||||
from pydantic_core import CoreSchema, core_schema
|
from pydantic_core import CoreSchema, core_schema
|
||||||
|
|
||||||
from crewai.agents.agent_builder.base_agent_executor_mixin import CrewAgentExecutorMixin
|
from crewai.agents.agent_builder.base_agent_executor_mixin import CrewAgentExecutorMixin
|
||||||
@@ -244,7 +244,20 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
|
|||||||
response_model=self.response_model,
|
response_model=self.response_model,
|
||||||
executor_context=self,
|
executor_context=self,
|
||||||
)
|
)
|
||||||
formatted_answer = process_llm_response(answer, self.use_stop_words) # type: ignore[assignment]
|
if self.response_model is not None:
|
||||||
|
try:
|
||||||
|
self.response_model.model_validate_json(answer)
|
||||||
|
formatted_answer = AgentFinish(
|
||||||
|
thought="",
|
||||||
|
output=answer,
|
||||||
|
text=answer,
|
||||||
|
)
|
||||||
|
except ValidationError:
|
||||||
|
formatted_answer = process_llm_response(
|
||||||
|
answer, self.use_stop_words
|
||||||
|
) # type: ignore[assignment]
|
||||||
|
else:
|
||||||
|
formatted_answer = process_llm_response(answer, self.use_stop_words) # type: ignore[assignment]
|
||||||
|
|
||||||
if isinstance(formatted_answer, AgentAction):
|
if isinstance(formatted_answer, AgentAction):
|
||||||
# Extract agent fingerprint if available
|
# Extract agent fingerprint if available
|
||||||
@@ -278,7 +291,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self._invoke_step_callback(formatted_answer) # type: ignore[arg-type]
|
self._invoke_step_callback(formatted_answer) # type: ignore[arg-type]
|
||||||
self._append_message(formatted_answer.text) # type: ignore[union-attr,attr-defined]
|
self._append_message(formatted_answer.text) # type: ignore[union-attr]
|
||||||
|
|
||||||
except OutputParserError as e:
|
except OutputParserError as e:
|
||||||
formatted_answer = handle_output_parser_exception( # type: ignore[assignment]
|
formatted_answer = handle_output_parser_exception( # type: ignore[assignment]
|
||||||
@@ -398,7 +411,21 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
|
|||||||
response_model=self.response_model,
|
response_model=self.response_model,
|
||||||
executor_context=self,
|
executor_context=self,
|
||||||
)
|
)
|
||||||
formatted_answer = process_llm_response(answer, self.use_stop_words) # type: ignore[assignment]
|
|
||||||
|
if self.response_model is not None:
|
||||||
|
try:
|
||||||
|
self.response_model.model_validate_json(answer)
|
||||||
|
formatted_answer = AgentFinish(
|
||||||
|
thought="",
|
||||||
|
output=answer,
|
||||||
|
text=answer,
|
||||||
|
)
|
||||||
|
except ValidationError:
|
||||||
|
formatted_answer = process_llm_response(
|
||||||
|
answer, self.use_stop_words
|
||||||
|
) # type: ignore[assignment]
|
||||||
|
else:
|
||||||
|
formatted_answer = process_llm_response(answer, self.use_stop_words) # type: ignore[assignment]
|
||||||
|
|
||||||
if isinstance(formatted_answer, AgentAction):
|
if isinstance(formatted_answer, AgentAction):
|
||||||
fingerprint_context = {}
|
fingerprint_context = {}
|
||||||
@@ -431,7 +458,7 @@ class CrewAgentExecutor(CrewAgentExecutorMixin):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self._invoke_step_callback(formatted_answer) # type: ignore[arg-type]
|
self._invoke_step_callback(formatted_answer) # type: ignore[arg-type]
|
||||||
self._append_message(formatted_answer.text) # type: ignore[union-attr,attr-defined]
|
self._append_message(formatted_answer.text) # type: ignore[union-attr]
|
||||||
|
|
||||||
except OutputParserError as e:
|
except OutputParserError as e:
|
||||||
formatted_answer = handle_output_parser_exception( # type: ignore[assignment]
|
formatted_answer = handle_output_parser_exception( # type: ignore[assignment]
|
||||||
|
|||||||
Reference in New Issue
Block a user