Skip to content

Commit 27f409c

Browse files
authored
refactor(py/genkit): genkit.core.typing -> genkit.typing to avoid manual re-exporting (#2542)
1 parent 4be7620 commit 27f409c

File tree

66 files changed

+176
-208
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+176
-208
lines changed

py/bin/generate_schema_typing

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ while [[ $# -gt 0 ]]; do
3838
done
3939

4040
TOP_DIR=$(git rev-parse --show-toplevel)
41-
TYPING_FILE="${TOP_DIR}/py/packages/genkit-ai/src/genkit/core/typing.py"
41+
TYPING_FILE="${TOP_DIR}/py/packages/genkit-ai/src/genkit/typing.py"
4242

4343
# If in CI mode and the file exists, make a backup copy to compare later.
4444
BACKUP_FILE=""
45-
if [[ "$CI_ENABLED" == "true" ]] && [[ -f "$TYPING_FILE" ]]; then
45+
if [[ $CI_ENABLED == "true" ]] && [[ -f $TYPING_FILE ]]; then
4646
BACKUP_FILE="${TYPING_FILE}.backup"
4747
cp "$TYPING_FILE" "$BACKUP_FILE"
4848
fi
@@ -63,7 +63,7 @@ uv run --directory "${TOP_DIR}/py" \
6363

6464
# We want to detect and raise an error when this file changes in our hooks or in
6565
# CI.
66-
if [[ "$CI_ENABLED" == "true" ]] && [[ -f "$BACKUP_FILE" ]]; then
66+
if [[ $CI_ENABLED == "true" ]] && [[ -f $BACKUP_FILE ]]; then
6767
if ! diff -q "$BACKUP_FILE" "$TYPING_FILE" >/dev/null; then
6868
echo "Error: Generated schema typing file differs from the existing one."
6969
echo "Please run './py/bin/generate_schema_typing' locally and commit the changes."
@@ -73,6 +73,6 @@ if [[ "$CI_ENABLED" == "true" ]] && [[ -f "$BACKUP_FILE" ]]; then
7373
fi
7474

7575
# Remove the backup file if it exists.
76-
if [[ -f "$BACKUP_FILE" ]]; then
76+
if [[ -f $BACKUP_FILE ]]; then
7777
rm "$BACKUP_FILE"
7878
fi

py/bin/publish_pypi.sh

+12-13
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
set -euo pipefail
2020

2121
if ((EUID == 0)); then
22-
echo "Please do not run as root"
23-
exit 1
22+
echo "Please do not run as root"
23+
exit 1
2424
fi
2525

2626
# Navigate to the correct project directory
@@ -37,14 +37,14 @@ response=$(curl -s "https://test.pypi.org/pypi/$PACKAGE_NAME/json" || echo "{}")
3737
LATEST_VERSION=$(echo $response | jq --raw-output "select(.releases != null) | .releases | keys_unsorted | last")
3838

3939
if [ -z "$LATEST_VERSION" ]; then
40-
echo "Package not found on PyPI."
41-
LATEST_VERSION="0.0.0"
40+
echo "Package not found on PyPI."
41+
LATEST_VERSION="0.0.0"
4242
else
43-
echo "Latest version on PyPI: $LATEST_VERSION"
44-
if [ "$(printf '%s\n' "$LATEST_VERSION" "$NEW_VERSION" | sort -rV | head -n 1)" != "$NEW_VERSION" ] || [ "$NEW_VERSION" == "$LATEST_VERSION" ]; then
45-
echo "The new version $NEW_VERSION is not greater than the latest version $LATEST_VERSION on PyPI."
46-
exit 1
47-
fi
43+
echo "Latest version on PyPI: $LATEST_VERSION"
44+
if [ "$(printf '%s\n' "$LATEST_VERSION" "$NEW_VERSION" | sort -rV | head -n 1)" != "$NEW_VERSION" ] || [ "$NEW_VERSION" == "$LATEST_VERSION" ]; then
45+
echo "The new version $NEW_VERSION is not greater than the latest version $LATEST_VERSION on PyPI."
46+
exit 1
47+
fi
4848
fi
4949

5050
# Build distributions for the specific project
@@ -56,9 +56,8 @@ TWINE_CHECK=$(twine check "${TOP_DIR}/py/dist/*")
5656
echo "$TWINE_CHECK"
5757

5858
if echo "$TWINE_CHECK" | grep -q "FAIL"; then
59-
echo "Twine check failed"
60-
exit 1
59+
echo "Twine check failed"
60+
exit 1
6161
else
62-
echo "Twine passed"
62+
echo "Twine passed"
6363
fi
64-

py/bin/sanitize_schema_typing.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919

2020
"""Standalone convenience script used to massage the typing.py.
2121
22-
The `py/packages/genkit-ai/src/genkit/core/typing.py` file is generated by
23-
datamodel-codegen. However, since the tool doesn't currently provide options to
24-
generate exactly the kind of code we need, we use this convenience script to
25-
parse the Python source code, walk the AST, modify it to include the bits we
26-
need and regenerate the code for eventual use within our codebase.
22+
The `genkit/typing.py` file is generated by datamodel-codegen. However, since
23+
the tool doesn't currently provide options to generate exactly the kind of code
24+
we need, we use this convenience script to parse the Python source code, walk
25+
the AST, modify it to include the bits we need and regenerate the code for
26+
eventual use within our codebase.
2727
2828
Transformations applied:
2929
- We remove the model_config attribute from classes that ineherit from
@@ -69,7 +69,8 @@ def create_model_config(
6969
) -> ast.Assign:
7070
"""Create or update a model_config assignment.
7171
72-
Ensures populate_by_name=True and extra='forbid', keeping other existing settings.
72+
Ensures populate_by_name=True and extra='forbid', keeping other existing
73+
settings.
7374
"""
7475
keywords = []
7576
found_populate = False
@@ -116,7 +117,7 @@ def create_model_config(
116117
)
117118

118119
def has_model_config(self, node: ast.ClassDef) -> ast.Assign | None:
119-
"""Check if a class already has a model_config assignment and return it."""
120+
"""Check if class already has model_config assignment and return it."""
120121
for item in node.body:
121122
if isinstance(item, ast.Assign):
122123
targets = item.targets

py/packages/genkit-ai/src/genkit/ai/__init__.py

+1-55
Original file line numberDiff line numberDiff line change
@@ -26,68 +26,14 @@
2626
from genkit.blocks.document import Document
2727
from genkit.blocks.tools import ToolRunContext, tool_response
2828
from genkit.core.action import ActionKind, ActionRunContext
29-
from genkit.core.typing import (
30-
CustomPart,
31-
DataPart,
32-
Embedding,
33-
EmbedRequest,
34-
EmbedResponse,
35-
GenerateRequest,
36-
GenerateResponse,
37-
GenerateResponseChunk,
38-
GenerationCommonConfig,
39-
GenerationUsage,
40-
Media,
41-
MediaPart,
42-
Message,
43-
ModelInfo,
44-
Part,
45-
RetrieverRequest,
46-
RetrieverResponse,
47-
Role,
48-
Stage,
49-
Supports,
50-
TextPart,
51-
ToolDefinition,
52-
ToolRequest,
53-
ToolRequestPart,
54-
ToolResponse,
55-
ToolResponsePart,
56-
)
5729

5830
__all__ = [
31+
ActionKind.__name__,
5932
ActionRunContext.__name__,
6033
Document.__name__,
61-
Embedding.__name__,
62-
EmbedRequest.__name__,
63-
EmbedResponse.__name__,
64-
GenerateRequest.__name__,
65-
GenerateResponse.__name__,
66-
GenerateResponseChunk.__name__,
6734
Genkit.__name__,
6835
GenkitRegistry.__name__,
69-
Media.__name__,
70-
Message.__name__,
7136
Plugin.__name__,
72-
RetrieverRequest.__name__,
73-
RetrieverResponse.__name__,
74-
Role.__name__,
7537
ToolRunContext.__name__,
76-
ToolResponse.__name__,
77-
ToolRequest.__name__,
78-
Part.__name__,
79-
ModelInfo.__name__,
80-
Supports.__name__,
81-
ActionKind.__name__,
82-
TextPart.__name__,
83-
MediaPart.__name__,
84-
DataPart.__name__,
85-
CustomPart.__name__,
86-
ToolRequestPart.__name__,
87-
ToolResponsePart.__name__,
88-
GenerationCommonConfig.__name__,
89-
GenerationUsage.__name__,
90-
ToolDefinition.__name__,
9138
tool_response.__name__,
92-
Stage.__name__,
9339
]

py/packages/genkit-ai/src/genkit/ai/registry.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
from genkit.core.action import Action, ActionKind
5555
from genkit.core.registry import Registry
5656
from genkit.core.schema import to_json_schema
57-
from genkit.core.typing import (
57+
from genkit.typing import (
5858
GenerationCommonConfig,
5959
Message,
6060
ModelInfo,

py/packages/genkit-ai/src/genkit/ai/veneer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ async def foo(...):
118118
from genkit.core.action import ActionKind, ActionRunContext
119119
from genkit.core.environment import is_dev_environment
120120
from genkit.core.reflection import make_reflection_server
121-
from genkit.core.typing import (
121+
from genkit.typing import (
122122
DocumentData,
123123
GenerationCommonConfig,
124124
Message,

py/packages/genkit-ai/src/genkit/blocks/document.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from copy import deepcopy
2626
from typing import Any
2727

28-
from genkit.core.typing import (
28+
from genkit.typing import (
2929
DocumentData,
3030
DocumentPart,
3131
Embedding,

py/packages/genkit-ai/src/genkit/blocks/embedding.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616

1717
from collections.abc import Callable
1818

19-
from genkit.core.typing import EmbedRequest, EmbedResponse
19+
from genkit.typing import EmbedRequest, EmbedResponse
2020

2121
type EmbedderFn = Callable[[EmbedRequest], EmbedResponse]

py/packages/genkit-ai/src/genkit/blocks/formats/types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
GenerateResponseChunkWrapper,
2525
MessageWrapper,
2626
)
27-
from genkit.core.typing import (
27+
from genkit.typing import (
2828
OutputConfig,
2929
)
3030

py/packages/genkit-ai/src/genkit/blocks/generate.py

+16-10
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from genkit.core.action import ActionRunContext
3636
from genkit.core.error import GenkitError, StatusName
3737
from genkit.core.registry import Action, ActionKind, Registry
38-
from genkit.core.typing import (
38+
from genkit.typing import (
3939
GenerateActionOptions,
4040
GenerateRequest,
4141
GenerateResponse,
@@ -617,9 +617,11 @@ async def _resolve_tool_request(
617617
if tool_request_part.metadata
618618
else {}
619619
),
620-
'interrupt': interrupt_error.metadata
621-
if interrupt_error.metadata
622-
else True,
620+
'interrupt': (
621+
interrupt_error.metadata
622+
if interrupt_error.metadata
623+
else True
624+
),
623625
},
624626
),
625627
)
@@ -686,9 +688,11 @@ async def _resolve_resume_options(
686688
role=Role.TOOL,
687689
content=tool_responses,
688690
metadata={
689-
'resumed': raw_request.resume.metadata
690-
if raw_request.resume.metadata
691-
else True
691+
'resumed': (
692+
raw_request.resume.metadata
693+
if raw_request.resume.metadata
694+
else True
695+
)
692696
},
693697
)
694698

@@ -724,9 +728,11 @@ def _resolve_resumed_tool_request(
724728

725729
# if there's a corresponding reply, append it to toolResponses
726730
provided_response = _find_corresponding_tool_response(
727-
raw_request.resume.respond
728-
if raw_request.resume and raw_request.resume.respond
729-
else [],
731+
(
732+
raw_request.resume.respond
733+
if raw_request.resume and raw_request.resume.respond
734+
else []
735+
),
730736
tool_request_part.root,
731737
)
732738
if provided_response:

py/packages/genkit-ai/src/genkit/blocks/messages.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
"""Utilities for working with messages."""
1818

19-
from genkit.core.typing import (
19+
from genkit.typing import (
2020
Message,
2121
Metadata,
2222
Part,

py/packages/genkit-ai/src/genkit/blocks/middleware.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
text_from_content,
2727
)
2828
from genkit.core.action import ActionRunContext
29-
from genkit.core.typing import (
29+
from genkit.typing import (
3030
DocumentData,
3131
GenerateRequest,
3232
GenerateResponse,

py/packages/genkit-ai/src/genkit/blocks/model.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def my_model(request: GenerateRequest) -> GenerateResponse:
3636

3737
from genkit.core.action import ActionRunContext
3838
from genkit.core.extract import extract_json
39-
from genkit.core.typing import (
39+
from genkit.typing import (
4040
Candidate,
4141
DocumentPart,
4242
GenerateRequest,

py/packages/genkit-ai/src/genkit/blocks/prompt.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
from genkit.core.action import ActionRunContext
4040
from genkit.core.registry import Registry
4141
from genkit.core.schema import to_json_schema
42-
from genkit.core.typing import (
42+
from genkit.typing import (
4343
DocumentData,
4444
GenerateActionOptions,
4545
GenerateActionOutputConfig,

py/packages/genkit-ai/src/genkit/blocks/retriever.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from collections.abc import Callable
2626

2727
from genkit.blocks.document import Document
28-
from genkit.core.typing import RetrieverResponse
28+
from genkit.typing import RetrieverResponse
2929

3030
# User-provided retriever function that queries the datastore
3131
type RetrieverFn[T] = Callable[[Document, T], RetrieverResponse]

py/packages/genkit-ai/src/genkit/blocks/tools.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from typing import Any
1818

1919
from genkit.core.action import ActionRunContext
20-
from genkit.core.typing import Part, ToolRequestPart, ToolResponse
20+
from genkit.typing import Part, ToolRequestPart, ToolResponse
2121

2222

2323
class ToolRunContext(ActionRunContext):

py/packages/genkit-ai/src/genkit/testing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from genkit.ai import Genkit
99
from genkit.codec import dump_json
1010
from genkit.core.action import ActionRunContext
11-
from genkit.core.typing import (
11+
from genkit.typing import (
1212
GenerateRequest,
1313
GenerateResponse,
1414
GenerateResponseChunk,

py/packages/genkit-ai/src/genkit/core/typing.py renamed to py/packages/genkit-ai/src/genkit/typing.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ class DataPart(BaseModel):
568568
"""Model for datapart data."""
569569

570570
model_config = ConfigDict(extra='forbid', populate_by_name=True)
571-
text: Text | None = None
571+
text: str | None = None
572572
media: MediaModel | None = None
573573
tool_request: ToolRequestModel | None = Field(None, alias='toolRequest')
574574
tool_response: ToolResponseModel | None = Field(None, alias='toolResponse')
@@ -581,7 +581,7 @@ class MediaPart(BaseModel):
581581
"""Model for mediapart data."""
582582

583583
model_config = ConfigDict(extra='forbid', populate_by_name=True)
584-
text: Text | None = None
584+
text: str | None = None
585585
media: Media
586586
tool_request: ToolRequestModel | None = Field(None, alias='toolRequest')
587587
tool_response: ToolResponseModel | None = Field(None, alias='toolResponse')
@@ -607,7 +607,7 @@ class ToolRequestPart(BaseModel):
607607
"""Model for toolrequestpart data."""
608608

609609
model_config = ConfigDict(extra='forbid', populate_by_name=True)
610-
text: Text | None = None
610+
text: str | None = None
611611
media: MediaModel | None = None
612612
tool_request: ToolRequest = Field(..., alias='toolRequest')
613613
tool_response: ToolResponseModel | None = Field(None, alias='toolResponse')
@@ -620,7 +620,7 @@ class ToolResponsePart(BaseModel):
620620
"""Model for toolresponsepart data."""
621621

622622
model_config = ConfigDict(extra='forbid', populate_by_name=True)
623-
text: Text | None = None
623+
text: str | None = None
624624
media: MediaModel | None = None
625625
tool_request: ToolRequestModel | None = Field(None, alias='toolRequest')
626626
tool_response: ToolResponse = Field(..., alias='toolResponse')

py/packages/genkit-ai/tests/genkit/blocks/document_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"""Tests for Genkit document."""
1818

1919
from genkit.blocks.document import Document
20-
from genkit.core.typing import (
20+
from genkit.typing import (
2121
DocumentData,
2222
DocumentPart,
2323
Embedding,

py/packages/genkit-ai/tests/genkit/blocks/formats/json_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from genkit.blocks.formats import JsonFormat
99
from genkit.blocks.model import GenerateResponseChunkWrapper, MessageWrapper
10-
from genkit.core.typing import GenerateResponseChunk, Message, TextPart
10+
from genkit.typing import GenerateResponseChunk, Message, TextPart
1111

1212

1313
def test_json_format() -> None:

0 commit comments

Comments
 (0)