Skip to content

Commit 0eae811

Browse files
chore(py): Update generated schema typing files after local changes
1 parent 0a11e57 commit 0eae811

File tree

10 files changed

+54
-141
lines changed

10 files changed

+54
-141
lines changed

py/packages/genkit/src/genkit/ai/_aio.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,24 +338,23 @@ async def retrieve(
338338

339339
async def embed(
340340
self,
341-
embedder: str | EmbedderRef | None = None, # Allow EmbedderRef
341+
embedder: str | EmbedderRef | None = None,
342342
documents: list[Document] | None = None,
343343
options: dict[str, Any] | None = None,
344344
) -> EmbedResponse:
345-
346345
embedder_name: str
347346
embedder_config: dict[str, Any] = {}
348347

349348
if isinstance(embedder, EmbedderRef):
350349
embedder_name = embedder.name
351350
embedder_config = embedder.config or {}
352351
if embedder.version:
353-
embedder_config['version'] = embedder.version # Handle version from ref
352+
embedder_config['version'] = embedder.version # Handle version from ref
354353
elif isinstance(embedder, str):
355354
embedder_name = embedder
356355
else:
357356
# Handle case where embedder is None
358-
raise ValueError("Embedder must be specified as a string name or an EmbedderRef.")
357+
raise ValueError('Embedder must be specified as a string name or an EmbedderRef.')
359358

360359
# Merge options passed to embed() with config from EmbedderRef
361360
final_options = {**(embedder_config or {}), **(options or {})}

py/packages/genkit/src/genkit/ai/_registry.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -478,12 +478,12 @@ def define_embedder(
478478
if options.dimensions:
479479
embedder_metadata['embedder']['dimensions'] = options.dimensions
480480
if options.supports:
481-
embedder_metadata['embedder']['supports'] = options.supports.model_dump(exclude_none=True,
482-
by_alias=True)
481+
embedder_metadata['embedder']['supports'] = options.supports.model_dump(
482+
exclude_none=True, by_alias=True
483+
)
483484
if options.config_schema:
484485
embedder_metadata['embedder']['customOptions'] = to_json_schema(options.config_schema)
485486

486-
# Fallback to default if 'embedder' key doesn't exist
487487
if 'embedder' not in embedder_metadata:
488488
embedder_metadata['embedder'] = {}
489489

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

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,33 +22,14 @@
2222
from genkit.ai import ActionKind
2323
from genkit.core.action import ActionMetadata
2424
from genkit.core.schema import to_json_schema
25-
from genkit.core.typing import EmbedRequest, EmbedResponse, EmbedderOptions, EmbedderRef, EmbedderSupports,EmbedderFn
25+
from genkit.core.typing import EmbedRequest, EmbedResponse, EmbedderOptions, EmbedderRef, EmbedderSupports, EmbedderFn
2626
from pydantic import BaseModel
27-
# type EmbedderFn = Callable[[EmbedRequest], EmbedResponse]
28-
# EmbedderFn = Callable[[EmbedRequest], EmbedResponse]
2927

3028

31-
# def embedder_action_metadata(
32-
# name: str,
33-
# info: dict[str, Any] | None = None,
34-
# config_schema: Any | None = None,
35-
# ) -> ActionMetadata:
36-
# """Generates an ActionMetadata for embedders."""
37-
# info = info if info is not None else {}
38-
# return ActionMetadata(
39-
# kind=ActionKind.EMBEDDER,
40-
# name=name,
41-
# input_json_schema=to_json_schema(EmbedRequest),
42-
# output_json_schema=to_json_schema(EmbedResponse),
43-
# metadata={'embedder': {**info, 'customOptions': to_json_schema(config_schema) if config_schema else None}},
44-
# )
45-
4629
def embedder_action_metadata(
4730
name: str,
48-
#info: dict[str, Any] | None = None,
4931
options: EmbedderOptions | None = None,
5032
) -> ActionMetadata:
51-
5233
options = options if options is not None else EmbedderOptions()
5334
embedder_metadata_dict = {'embedder': {}}
5435

@@ -60,18 +41,19 @@ def embedder_action_metadata(
6041
if options.supports:
6142
embedder_metadata_dict['embedder']['supports'] = options.supports.model_dump(exclude_none=True, by_alias=True)
6243

63-
embedder_metadata_dict['embedder']['customOptions'] = to_json_schema(options.config_schema) if options.config_schema else None
44+
embedder_metadata_dict['embedder']['customOptions'] = (
45+
to_json_schema(options.config_schema) if options.config_schema else None
46+
)
6447

6548
return ActionMetadata(
6649
kind=ActionKind.EMBEDDER,
6750
name=name,
6851
input_json_schema=to_json_schema(EmbedRequest),
6952
output_json_schema=to_json_schema(EmbedResponse),
7053
metadata=embedder_metadata_dict,
71-
7254
)
7355

74-
# New helper function
56+
7557
def create_embedder_ref(name: str, config: dict[str, Any] | None = None, version: str | None = None) -> EmbedderRef:
7658
"""Creates an EmbedderRef instance."""
7759
return EmbedderRef(name=name, config=config, version=version)

py/packages/genkit/src/genkit/core/typing.py

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from enum import StrEnum # noqa
3434

3535

36-
from typing import Any, Awaitable, Callable, Protocol, TypeVar
36+
from typing import Any
3737

3838
from pydantic import BaseModel, ConfigDict, Field, RootModel
3939

@@ -1013,47 +1013,3 @@ class ModelResponse(BaseModel):
10131013
raw: Raw | None = None
10141014
request: Request | None = None
10151015
operation: Operation | None = None
1016-
1017-
T = TypeVar('T')
1018-
P = TypeVar('P')
1019-
1020-
class EmbedderFn(Protocol[T, P]):
1021-
"""Protocol for embedder function."""
1022-
1023-
def __call__(
1024-
self,
1025-
request: EmbedRequest,
1026-
options: dict[str, Any] | None = None,
1027-
) -> Awaitable[EmbedResponse]:
1028-
"""Embeds a list of documents.
1029-
1030-
Args:
1031-
request: The embed request.
1032-
options: Configuration options for the embedder.
1033-
1034-
Returns:
1035-
The embed response.
1036-
"""
1037-
...
1038-
1039-
class EmbedderRef(BaseModel):
1040-
1041-
model_config = ConfigDict(extra='forbid', populate_by_name=True)
1042-
name: str
1043-
config: dict[str, Any] | None = None
1044-
version: str | None = None
1045-
1046-
class EmbedderSupports(BaseModel):
1047-
1048-
model_config = ConfigDict(extra='forbid', populate_by_name=True)
1049-
input: list[str] | None = None
1050-
multilingual: bool | None = None
1051-
1052-
class EmbedderOptions(BaseModel):
1053-
1054-
model_config = ConfigDict(extra='forbid', populate_by_name=True)
1055-
dimensions: int | None = None
1056-
label: str | None = None
1057-
supports: EmbedderSupports | None = None
1058-
config_schema: dict[str, Any] | None = Field(None, alias='configSchema')
1059-

py/packages/genkit/tests/genkit/blocks/embedding_test.py

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,15 @@
1818

1919
from genkit.blocks.embedding import embedder_action_metadata, create_embedder_ref
2020
from genkit.core.action import ActionMetadata, Action
21-
from genkit.core.typing import EmbedderOptions, EmbedderSupports, EmbedderRef, EmbedRequest, EmbedResponse, Embedding, Part
21+
from genkit.core.typing import (
22+
EmbedderOptions,
23+
EmbedderSupports,
24+
EmbedderRef,
25+
EmbedRequest,
26+
EmbedResponse,
27+
Embedding,
28+
Part,
29+
)
2230
from genkit.blocks.document import Document
2331
from genkit.core.schema import to_json_schema
2432
from genkit.core.action.types import ActionResponse
@@ -28,19 +36,6 @@
2836
from pydantic import BaseModel
2937

3038

31-
# def test_embedder_action_metadata():
32-
# """Test for embedder_action_metadata."""
33-
# action_metadata = embedder_action_metadata(
34-
# name='test_model',
35-
# info={'label': 'test_label'},
36-
# config_schema=None,
37-
# )
38-
#
39-
# assert isinstance(action_metadata, ActionMetadata)
40-
# assert action_metadata.input_json_schema is not None
41-
# assert action_metadata.output_json_schema is not None
42-
# assert action_metadata.metadata == {'embedder': {'customOptions': None, 'label': 'test_label'}}
43-
4439
def test_embedder_action_metadata():
4540
"""Test for embedder_action_metadata with basic options."""
4641
options = EmbedderOptions(label='Test Embedder', dimensions=128)
@@ -60,8 +55,10 @@ def test_embedder_action_metadata():
6055
}
6156
}
6257

58+
6359
def test_embedder_action_metadata_with_supports_and_config_schema():
6460
"""Test for embedder_action_metadata with supports and config_schema."""
61+
6562
class CustomConfig(BaseModel):
6663
param1: str
6764
param2: int
@@ -70,7 +67,7 @@ class CustomConfig(BaseModel):
7067
label='Advanced Embedder',
7168
dimensions=256,
7269
supports=EmbedderSupports(input=['text', 'image'], multilingual=True),
73-
config_schema=to_json_schema(CustomConfig) # Pass the JSON schema directly
70+
config_schema=to_json_schema(CustomConfig), # Pass the JSON schema directly
7471
)
7572
action_metadata = embedder_action_metadata(
7673
name='advanced_model',
@@ -94,19 +91,22 @@ class CustomConfig(BaseModel):
9491
'required': ['param1', 'param2'],
9592
}
9693

94+
9795
def test_embedder_action_metadata_no_options():
9896
"""Test embedder_action_metadata when no options are provided."""
9997
action_metadata = embedder_action_metadata(name='default_model')
10098
assert isinstance(action_metadata, ActionMetadata)
10199
assert action_metadata.metadata == {'embedder': {'customOptions': None, 'dimensions': None}}
102100

101+
103102
def test_create_embedder_ref_basic():
104103
"""Test basic creation of EmbedderRef."""
105104
ref = create_embedder_ref('my-embedder')
106105
assert ref.name == 'my-embedder'
107106
assert ref.config is None
108107
assert ref.version is None
109108

109+
110110
def test_create_embedder_ref_with_config():
111111
"""Test creation of EmbedderRef with configuration."""
112112
config = {'temperature': 0.5, 'max_tokens': 100}
@@ -115,13 +115,15 @@ def test_create_embedder_ref_with_config():
115115
assert ref.config == config
116116
assert ref.version is None
117117

118+
118119
def test_create_embedder_ref_with_version():
119120
"""Test creation of EmbedderRef with a version."""
120121
ref = create_embedder_ref('versioned-embedder', version='v1.0')
121122
assert ref.name == 'versioned-embedder'
122123
assert ref.config is None
123124
assert ref.version == 'v1.0'
124125

126+
125127
def test_create_embedder_ref_with_config_and_version():
126128
"""Test creation of EmbedderRef with both config and version."""
127129
config = {'task_type': 'retrieval'}
@@ -130,8 +132,10 @@ def test_create_embedder_ref_with_config_and_version():
130132
assert ref.config == config
131133
assert ref.version == 'beta'
132134

135+
133136
class MockGenkitRegistry:
134137
"""A mock registry to simulate action lookup."""
138+
135139
def __init__(self):
136140
self.actions = {}
137141

@@ -145,7 +149,7 @@ def register_action(self, name, kind, fn, metadata, description):
145149
async def mock_arun_side_effect(request, *args, **kwargs):
146150
# Call the actual (fake) embedder function directly
147151
embed_response = await fn(request)
148-
return ActionResponse(response=embed_response, trace_id="mock_trace_id")
152+
return ActionResponse(response=embed_response, trace_id='mock_trace_id')
149153

150154
mock_action.arun = AsyncMock(side_effect=mock_arun_side_effect)
151155
self.actions[(kind, name)] = mock_action
@@ -154,62 +158,52 @@ async def mock_arun_side_effect(request, *args, **kwargs):
154158
def lookup_action(self, kind, name):
155159
return self.actions.get((kind, name))
156160

161+
157162
@pytest.fixture
158163
def mock_genkit_instance():
159164
"""Fixture for a Genkit instance with a mock registry."""
160165
registry = MockGenkitRegistry()
161-
genkit_instance = Genkit() # Create Genkit instance without registry argument
162-
genkit_instance.registry = registry # Assign the mock registry to the instance
166+
genkit_instance = Genkit()
167+
genkit_instance.registry = registry
163168
return genkit_instance, registry
164169

170+
165171
@pytest.mark.asyncio
166172
async def test_embed_with_embedder_ref(mock_genkit_instance):
167173
"""Test the embed method using EmbedderRef."""
168174
genkit_instance, registry = mock_genkit_instance
169175

170-
# Define an embedder in the mock registry
171176
async def fake_embedder_fn(request: EmbedRequest) -> EmbedResponse:
172177
return EmbedResponse(embeddings=[Embedding(embedding=[1.0, 2.0, 3.0])])
173178

174179
embedder_options = EmbedderOptions(
175180
label='Fake Embedder',
176181
dimensions=3,
177182
supports=EmbedderSupports(input=['text']),
178-
config_schema={'type': 'object', 'properties': {'param': {'type': 'string'}}}
183+
config_schema={'type': 'object', 'properties': {'param': {'type': 'string'}}},
179184
)
180185
registry.register_action(
181186
name='my-plugin/my-embedder',
182187
kind='embedder',
183188
fn=fake_embedder_fn,
184189
metadata=embedder_action_metadata('my-plugin/my-embedder', options=embedder_options).metadata,
185-
description='A fake embedder for testing'
190+
description='A fake embedder for testing',
186191
)
187192

188-
# Create an EmbedderRef
189-
embedder_ref = create_embedder_ref(
190-
'my-plugin/my-embedder',
191-
config={'param': 'value'},
192-
version='v1'
193-
)
193+
embedder_ref = create_embedder_ref('my-plugin/my-embedder', config={'param': 'value'}, version='v1')
194194

195195
documents = [Document.from_text('hello world')]
196196

197-
# Call the embed method
198197
response = await genkit_instance.embed(
199-
embedder=embedder_ref,
200-
documents=documents,
201-
options={'additional_option': True}
198+
embedder=embedder_ref, documents=documents, options={'additional_option': True}
202199
)
203200

204-
# Assertions
205201
assert response.embeddings[0].embedding == [1.0, 2.0, 3.0]
206202

207-
# Verify that lookup_action was called correctly
208203
embed_action = registry.lookup_action('embedder', 'my-plugin/my-embedder')
209204
assert embed_action is not None
210205
embed_action.arun.assert_called_once()
211206

212-
# Get the EmbedRequest passed to the mock action
213207
called_request = embed_action.arun.call_args[0][0]
214208
assert isinstance(called_request, EmbedRequest)
215209
assert called_request.input == documents
@@ -231,27 +225,26 @@ async def fake_embedder_fn(request: EmbedRequest) -> EmbedResponse:
231225
kind='embedder',
232226
fn=fake_embedder_fn,
233227
metadata=embedder_action_metadata('another-embedder', options=embedder_options).metadata,
234-
description='Another fake embedder'
228+
description='Another fake embedder',
235229
)
236230

237231
documents = [Document.from_text('test text')]
238232

239233
response = await genkit_instance.embed(
240-
embedder='another-embedder',
241-
documents=documents,
242-
options={'custom_setting': 'high'}
234+
embedder='another-embedder', documents=documents, options={'custom_setting': 'high'}
243235
)
244236

245237
assert response.embeddings[0].embedding == [4.0, 5.0, 6.0]
246238
embed_action = registry.lookup_action('embedder', 'another-embedder')
247239
called_request = embed_action.arun.call_args[0][0]
248240
assert called_request.options == {'custom_setting': 'high'}
249241

242+
250243
@pytest.mark.asyncio
251244
async def test_embed_missing_embedder_raises_error(mock_genkit_instance):
252245
"""Test that embedding with a missing embedder raises an error."""
253246
genkit_instance, _ = mock_genkit_instance
254247
documents = [Document.from_text('some text')]
255248

256-
with pytest.raises(ValueError, match="Embedder must be specified as a string name or an EmbedderRef."):
249+
with pytest.raises(ValueError, match='Embedder must be specified as a string name or an EmbedderRef.'):
257250
await genkit_instance.embed(documents=documents)

py/packages/genkit/tests/genkit/blocks/prompt_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,8 @@ def test_tool(input: ToolInput):
202202
),
203203
]
204204

205-
@pytest.mark.skip(reason="issues when running on CI")
205+
206+
@pytest.mark.skip(reason='issues when running on CI')
206207
@pytest.mark.asyncio
207208
@pytest.mark.parametrize(
208209
'test_case, prompt, input, input_option, context, want_rendered',

py/plugins/compat-oai/src/genkit/plugins/compat_oai/openai_plugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def list_actions(self) -> list[ActionMetadata]:
196196
config_schema=to_json_schema(Embedding),
197197
label=f'OpenAI Embedding - {_name}',
198198
supports=EmbedderSupports(input=['text']),
199-
)
199+
),
200200
)
201201
)
202202
else:

0 commit comments

Comments
 (0)