Skip to content

Commit e686b3c

Browse files
[fl] feat: add support for writing filonov results to tables
* Add support for writing filonov results to files / tables * Add GenerateDashboardRequest to handle writing; rename CreativeMapGenerateRequest to GenerateCreativeMapRequest and extract common functionality between two into BaseRequest class * Update CLI to have two new flags - output (either `map` or `dashboard`) and `writer` (to handle writing dashboard sources); parse writer parameters from CLI as well. * Update server to handle dashboard generation and unify structure of routes (`/filonov/<OUTPUT>/<SOURCE_TYPE>`) * Server entrypoint updates: * Add support for enabling cache via `FILONOV_ENABLE_CACHE` env variable * Add `dbm` source * Add support for specifying port * Update and simplify documentation Change-Id: I93d8ff2fd8d8da7b1e70692f39c8ae4a39f4d3a2
1 parent 260e910 commit e686b3c

File tree

13 files changed

+1136
-562
lines changed

13 files changed

+1136
-562
lines changed

docs/get-started/customization.md

Lines changed: 629 additions & 0 deletions
Large diffs are not rendered by default.

docs/get-started/load.png

220 KB
Loading

docs/get-started/quickstart.md

Lines changed: 29 additions & 427 deletions
Large diffs are not rendered by default.

libs/filonov/filonov/__init__.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,17 @@
2020
"""
2121

2222
from filonov.creative_map import CreativeMap
23-
from filonov.filonov_service import CreativeMapGenerateRequest, FilonovService
23+
from filonov.filonov_service import (
24+
FilonovService,
25+
GenerateCreativeMapRequest,
26+
GenerateTablesRequest,
27+
)
2428

2529
__all__ = [
2630
'FilonovService',
27-
'CreativeMapGenerateRequest',
31+
'GenerateCreativeMapRequest',
32+
'GenerateTablesRequest',
2833
'CreativeMap',
2934
]
3035

31-
__version__ = '0.9.0'
36+
__version__ = '0.10.0'

libs/filonov/filonov/entrypoints/cli.py

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@
1515

1616
# pylint: disable=C0330, g-bad-import-order, g-multiple-import
1717

18+
import enum
1819
from typing import Optional
1920

2021
import media_fetching
2122
import media_similarity
2223
import media_tagging
2324
import typer
2425
from garf_executors.entrypoints import utils as garf_utils
26+
from garf_io import writer as garf_writer
2527
from media_fetching.sources import models
2628
from media_tagging import media
2729
from media_tagging.entrypoints import utils as tagging_utils
@@ -36,6 +38,24 @@
3638
initialize_tracer()
3739
typer_app = typer.Typer()
3840

41+
Tagger = Annotated[
42+
Optional[str],
43+
typer.Option(
44+
help='Type of tagger',
45+
),
46+
]
47+
Writer = Annotated[
48+
garf_writer.WriterOption,
49+
typer.Option(
50+
help='Type of writer used to write results',
51+
),
52+
]
53+
54+
55+
class Output(str, enum.Enum):
56+
map = 'map'
57+
tables = 'tables'
58+
3959

4060
def _version_callback(show_version: bool) -> None:
4161
if show_version:
@@ -64,13 +84,14 @@ def main(
6484
case_sensitive=False,
6585
),
6686
] = 'IMAGE',
67-
tagger: Annotated[
68-
Optional[str],
87+
tagger: Tagger = None,
88+
output: Annotated[
89+
Output,
6990
typer.Option(
70-
help='Type of tagger',
71-
case_sensitive=False,
91+
help='Type of output',
7292
),
73-
] = None,
93+
] = Output.map,
94+
writer: Writer = 'csv',
7495
output_name: Annotated[
7596
str,
7697
typer.Option(
@@ -143,7 +164,7 @@ def main(
143164
media_fetching.enrichers.enricher.AVAILABLE_MODULES.keys()
144165
)
145166
parsed_param_keys = set(
146-
[source, 'tagger', 'similarity'] + list(supported_enrichers)
167+
[source, 'tagger', 'similarity', writer] + list(supported_enrichers)
147168
)
148169
extra_parameters = garf_utils.ParamsParser(parsed_param_keys).parse(ctx.args)
149170
fetching_service = media_fetching.MediaFetchingService.from_source_alias(
@@ -179,33 +200,44 @@ def main(
179200
if source == 'youtube':
180201
media_type = 'YOUTUBE_VIDEO'
181202
tagger = 'gemini'
182-
request = filonov.CreativeMapGenerateRequest(
183-
source=source,
184-
media_type=media_type,
185-
tagger=tagger,
186-
tagger_parameters=extra_parameters.get('tagger'),
187-
similarity_parameters=extra_parameters.get('similarity'),
188-
source_parameters=extra_parameters.get(source),
189-
output_parameters=filonov.filonov_service.OutputParameters(
190-
output_name=output_name
191-
),
192-
parallel_threshold=parallel_threshold,
193-
trim_tags_threshold=trim_tags_threshold,
194-
embed_previews=embed_previews,
195-
omit_series=omit_series,
196-
context=extra_parameters,
197-
)
198-
span.set_attribute(
199-
'filonov.cli.command', utils.build_cli_command(request, db_uri)
200-
)
203+
params = {
204+
'source': source,
205+
'media_type': media_type,
206+
'tagger': tagger,
207+
'tagger_parameters': extra_parameters.get('tagger'),
208+
'similarity_parameters': extra_parameters.get('similarity'),
209+
'source_parameters': extra_parameters.get(source),
210+
'parallel_threshold': parallel_threshold,
211+
'trim_tags_threshold': trim_tags_threshold,
212+
'context': extra_parameters,
213+
}
201214
filonov_service = filonov.FilonovService(
202215
fetching_service, tagging_service, similarity_service
203216
)
204-
generated_map = filonov_service.generate_creative_map(request)
205-
destination = utils.build_creative_map_destination(
206-
request.output_parameters.output_name
217+
if output == 'tables':
218+
request = filonov.GenerateTablesRequest(
219+
**params,
220+
writer=writer,
221+
writer_parameters=extra_parameters.get(writer, {}),
222+
)
223+
filonov_service.generate_tables(request)
224+
else:
225+
request = filonov.GenerateCreativeMapRequest(
226+
**params,
227+
output_parameters=filonov.filonov_service.OutputParameters(
228+
output_name=output_name
229+
),
230+
embed_previews=embed_previews,
231+
omit_series=omit_series,
232+
)
233+
generated_map = filonov_service.generate_creative_map(request)
234+
destination = utils.build_creative_map_destination(
235+
request.output_parameters.output_name
236+
)
237+
generated_map.save(destination)
238+
span.set_attribute(
239+
'filonov.cli.command', utils.build_cli_command(request, db_uri)
207240
)
208-
generated_map.save(destination)
209241

210242

211243
if __name__ == '__main__':

0 commit comments

Comments
 (0)