Mao Jiayi created FLINK-40572:
---------------------------------
Summary: Support dynamic model selection for AI functions
Key: FLINK-40572
URL: https://issues.apache.org/jira/browse/FLINK-40572
Project: Flink
Issue Type: Improvement
Components: Flink CDC
Reporter: Mao Jiayi
AI functions currently require the model argument to be a compile-time string
literal:
{code:sql}
AI_COMPLETE('default_model', content, prompt)
{code}
During expression compilation, {{TransformParser}} resolves and validates the
model name, while {{JaninoCompiler}} rewrites the string literal into an
injected {{AiModelClient}} parameter.
This introduces AI-specific handling in the expression compiler and prevents
dynamic model selection, for example:
{code:sql}
AI_COMPLETE(
IF(priority = 'high', 'powerful_model', 'cheap_model'),
content,
prompt
)
{code}
The model argument should instead be evaluated as a regular string expression.
The corresponding {{AiModelClient}} should be resolved at evaluation time, with
model existence and capability checks performed by {{impl.AiFunctions}}.
The change should apply to the complete AI function family introduced by PR
#4512 and PR #4520, including text generation, text embedding, image
completion, and image embedding functions.
h3. Expected changes
* Allow the model argument to be any valid string expression.
* Resolve the evaluated model name when processing a {{DataChangeEvent}}.
* Move model existence and capability validation to {{AiFunctions}}.
* Remove the compile-time literal restriction and model-argument rewriting from
{{JaninoCompiler}}.
* Avoid injecting every model client as a separately named Janino parameter.
* Preserve support for literal model names.
* Preserve the existing {{NULL}} input short-circuit behavior.
* Preserve precedence for user-defined functions with the same names.
* Provide clear runtime errors for unknown models and incompatible model
capabilities.
After the change, both static and dynamic model selection should be supported:
{code:sql}
AI_COMPLETE('default_model', content, prompt)
{code}
{code:sql}
AI_COMPLETE(
IF(priority = 'high', 'powerful_model', 'cheap_model'),
content,
prompt
)
{code}
This is a follow-up to the review discussion in PR #4520.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)