Skip to content

refactor(api): type LLM generator results with TypedDict#34621

Merged
asukaminato0721 merged 1 commit intolanggenius:mainfrom
statxc:refactor/typed-dict-llm-generator-results
Apr 7, 2026
Merged

refactor(api): type LLM generator results with TypedDict#34621
asukaminato0721 merged 1 commit intolanggenius:mainfrom
statxc:refactor/typed-dict-llm-generator-results

Conversation

@statxc
Copy link
Copy Markdown
Contributor

@statxc statxc commented Apr 7, 2026

Part of #32863 (api/core/llm_generator/llm_generator.py)

Summary

  • Add CodeGenerateResultDict TypedDict with keys code, language, error
  • Add StructuredOutputResultDict TypedDict with keys output, error
  • Annotate return types of LLMGenerator.generate_code and LLMGenerator.generate_structured_output

Why this change

generate_code and generate_structured_output return dicts with well-known fixed keys but had no return type annotations. The TypedDicts make the shape explicit.

Changes

  • api/core/llm_generator/llm_generator.py: Define 2 TypedDicts, update 2 method signatures

@statxc statxc requested a review from QuantumGhost as a code owner April 7, 2026 00:11
@dosubot dosubot Bot added size:S This PR changes 10-29 lines, ignoring generated files. refactor labels Apr 7, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 7, 2026

Pyrefly Diff

base → PR
--- /tmp/pyrefly_base.txt	2026-04-07 00:13:02.225351788 +0000
+++ /tmp/pyrefly_pr.txt	2026-04-07 00:12:53.746314899 +0000
@@ -23,23 +23,23 @@
 ERROR `defaultdict[str, dict[Unknown, Unknown]]` is not assignable to `defaultdict[ModelType, dict[str, ModelSettings]]` [bad-assignment]
     --> core/entities/provider_configuration.py:1531:79
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, int], stream=Literal[False]) [no-matching-overload]
-  --> core/llm_generator/llm_generator.py:74:60
+  --> core/llm_generator/llm_generator.py:85:60
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, float | int], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:137:60
+   --> core/llm_generator/llm_generator.py:148:60
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:186:64
+   --> core/llm_generator/llm_generator.py:197:64
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:234:70
+   --> core/llm_generator/llm_generator.py:245:70
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:265:73
+   --> core/llm_generator/llm_generator.py:276:73
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:274:73
+   --> core/llm_generator/llm_generator.py:285:73
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:321:60
+   --> core/llm_generator/llm_generator.py:332:60
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[SystemPromptMessage | UserPromptMessage], model_parameters=dict[str, Any], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:381:60
+   --> core/llm_generator/llm_generator.py:394:60
 ERROR No matching overload found for function `core.model_manager.ModelInstance.invoke_llm` called with arguments: (prompt_messages=list[SystemPromptMessage | UserPromptMessage], model_parameters=dict[str, float], stream=Literal[False]) [no-matching-overload]
-   --> core/llm_generator/llm_generator.py:569:60
+   --> core/llm_generator/llm_generator.py:582:60
 ERROR Argument `dict[str, list[str] | str | None]` is not assignable to parameter `attributes` with type `dict[str, str] | None` in function `mlflow.tracing.fluent.start_span_no_context` [bad-argument-type]
    --> core/ops/mlflow_trace/mlflow_trace.py:271:24
 ERROR Argument `dict[str, dict[str, Any] | str | None]` is not assignable to parameter `attributes` with type `dict[str, str] | None` in function `mlflow.tracing.fluent.start_span_no_context` [bad-argument-type]

@statxc
Copy link
Copy Markdown
Contributor Author

statxc commented Apr 7, 2026

Hi @asukaminato0721 How are you? Could you help me with passing CI test failure?

@asukaminato0721 asukaminato0721 added this pull request to the merge queue Apr 7, 2026
@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Apr 7, 2026
@statxc
Copy link
Copy Markdown
Contributor Author

statxc commented Apr 7, 2026

Thank you @asukaminato0721

Merged via the queue into langgenius:main with commit 0bce6b3 Apr 7, 2026
26 of 27 checks passed
HanqingZ pushed a commit to HanqingZ/dify that referenced this pull request Apr 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer refactor size:S This PR changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants