def prompt_to_intel(
self,
prompt: PromptOrStr,
intel_class: type[IntelType] | None = None,
intel_object: IntelType | None = None,
images: list[str] | None = None,
image_files: List[str | Path] | None = None,
include_fields: IncEx | None = None,
exclude_fields: IncEx | None = None,
postfix_system_prompt: PromptOrStrOrNone = None,
message_history: MessageHistory | None = None,
) -> IntelType:
if intel_class and intel_object:
message = 'Cannot specify both intel_class and intel_object.'
raise LlmCriticalException(message)
if intel_class is None and intel_object is None:
if self.obj_class.llm_intel_class:
intel_class = self.obj_class.llm_intel_class
else:
raise LlmCriticalException(
'Must specify either intel_class, intel_object or llm_intel_class on the processor.')
if image_files:
images = [] if images is None else images
for image_file in image_files:
images.append(encode_file_to_base64(image_file))
self._intel = intel_class or intel_object
self._intel_json_schema = IntelFactory.intel_to_json_inc_ex_schema(
intel=self._intel,
include=include_fields,
exclude=exclude_fields
)
self._request_body.set_format_to_json_schema(
self._intel_json_schema
)
self._request_body.add_message(
role='system',
content=self._generate_system_prompt_str(postfix_system_prompt)
)
if message_history:
for message in message_history.messages:
self._request_body.add_message(
role=message.role,
content=message.content,
images=message.images
)
self._request_body.add_message(
role='user',
content=service_user_prompt(
prompt if isinstance(prompt, Prompt) else Prompt(prompt)
).to_str(),
images=images,
)
return self._request_to_intel()