janus-llm 3.4.3__py3-none-any.whl → 3.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- janus/__init__.py +1 -1
- janus/cli.py +123 -1
- janus/converter/aggregator.py +52 -0
- {janus_llm-3.4.3.dist-info → janus_llm-3.5.0.dist-info}/METADATA +1 -1
- {janus_llm-3.4.3.dist-info → janus_llm-3.5.0.dist-info}/RECORD +8 -7
- {janus_llm-3.4.3.dist-info → janus_llm-3.5.0.dist-info}/LICENSE +0 -0
- {janus_llm-3.4.3.dist-info → janus_llm-3.5.0.dist-info}/WHEEL +0 -0
- {janus_llm-3.4.3.dist-info → janus_llm-3.5.0.dist-info}/entry_points.txt +0 -0
janus/__init__.py
CHANGED
@@ -5,7 +5,7 @@ from langchain_core._api.deprecation import LangChainDeprecationWarning
|
|
5
5
|
from janus.converter.translate import Translator
|
6
6
|
from janus.metrics import * # noqa: F403
|
7
7
|
|
8
|
-
__version__ = "3.
|
8
|
+
__version__ = "3.5.0"
|
9
9
|
|
10
10
|
# Ignoring a deprecation warning from langchain_core that I can't seem to hunt down
|
11
11
|
warnings.filterwarnings("ignore", category=LangChainDeprecationWarning)
|
janus/cli.py
CHANGED
@@ -2,7 +2,7 @@ import json
|
|
2
2
|
import logging
|
3
3
|
import os
|
4
4
|
from pathlib import Path
|
5
|
-
from typing import Optional
|
5
|
+
from typing import List, Optional
|
6
6
|
|
7
7
|
import click
|
8
8
|
import typer
|
@@ -12,6 +12,8 @@ from rich.console import Console
|
|
12
12
|
from rich.prompt import Confirm
|
13
13
|
from typing_extensions import Annotated
|
14
14
|
|
15
|
+
from janus.converter.aggregator import Aggregator
|
16
|
+
from janus.converter.converter import Converter
|
15
17
|
from janus.converter.diagram import DiagramGenerator
|
16
18
|
from janus.converter.document import Documenter, MadLibsDocumenter, MultiDocumenter
|
17
19
|
from janus.converter.requirements import RequirementsDocumenter
|
@@ -439,6 +441,126 @@ def document(
|
|
439
441
|
documenter.translate(input_dir, output_dir, overwrite, collection)
|
440
442
|
|
441
443
|
|
444
|
+
def get_subclasses(cls):
|
445
|
+
return set(cls.__subclasses__()).union(
|
446
|
+
set(s for c in cls.__subclasses__() for s in get_subclasses(c))
|
447
|
+
)
|
448
|
+
|
449
|
+
|
450
|
+
@app.command()
|
451
|
+
def aggregate(
|
452
|
+
input_dir: Annotated[
|
453
|
+
Path,
|
454
|
+
typer.Option(
|
455
|
+
"--input",
|
456
|
+
"-i",
|
457
|
+
help="The directory containing the source code to be translated. "
|
458
|
+
"The files should all be in one flat directory.",
|
459
|
+
),
|
460
|
+
],
|
461
|
+
language: Annotated[
|
462
|
+
str,
|
463
|
+
typer.Option(
|
464
|
+
"--language",
|
465
|
+
"-l",
|
466
|
+
help="The language of the source code.",
|
467
|
+
click_type=click.Choice(sorted(LANGUAGES)),
|
468
|
+
),
|
469
|
+
],
|
470
|
+
output_dir: Annotated[
|
471
|
+
Path,
|
472
|
+
typer.Option(
|
473
|
+
"--output-dir", "-o", help="The directory to store the translated code in."
|
474
|
+
),
|
475
|
+
],
|
476
|
+
llm_name: Annotated[
|
477
|
+
str,
|
478
|
+
typer.Option(
|
479
|
+
"--llm",
|
480
|
+
"-L",
|
481
|
+
help="The custom name of the model set with 'janus llm add'.",
|
482
|
+
),
|
483
|
+
] = "gpt-4o",
|
484
|
+
max_prompts: Annotated[
|
485
|
+
int,
|
486
|
+
typer.Option(
|
487
|
+
"--max-prompts",
|
488
|
+
"-m",
|
489
|
+
help="The maximum number of times to prompt a model on one functional block "
|
490
|
+
"before exiting the application. This is to prevent wasting too much money.",
|
491
|
+
),
|
492
|
+
] = 10,
|
493
|
+
overwrite: Annotated[
|
494
|
+
bool,
|
495
|
+
typer.Option(
|
496
|
+
"--overwrite/--preserve",
|
497
|
+
help="Whether to overwrite existing files in the output directory",
|
498
|
+
),
|
499
|
+
] = False,
|
500
|
+
temperature: Annotated[
|
501
|
+
float,
|
502
|
+
typer.Option("--temperature", "-t", help="Sampling temperature.", min=0, max=2),
|
503
|
+
] = 0.7,
|
504
|
+
collection: Annotated[
|
505
|
+
str,
|
506
|
+
typer.Option(
|
507
|
+
"--collection",
|
508
|
+
"-c",
|
509
|
+
help="If set, will put the translated result into a Chroma DB "
|
510
|
+
"collection with the name provided.",
|
511
|
+
),
|
512
|
+
] = None,
|
513
|
+
splitter_type: Annotated[
|
514
|
+
str,
|
515
|
+
typer.Option(
|
516
|
+
"-S",
|
517
|
+
"--splitter",
|
518
|
+
help="Name of custom splitter to use",
|
519
|
+
click_type=click.Choice(list(CUSTOM_SPLITTERS.keys())),
|
520
|
+
),
|
521
|
+
] = "file",
|
522
|
+
intermediate_converters: Annotated[
|
523
|
+
List[str],
|
524
|
+
typer.Option(
|
525
|
+
"-C",
|
526
|
+
"--converter",
|
527
|
+
help="Name of an intermediate converter to use",
|
528
|
+
click_type=click.Choice([c.__name__ for c in get_subclasses(Converter)]),
|
529
|
+
),
|
530
|
+
] = ["Documenter"],
|
531
|
+
):
|
532
|
+
converter_subclasses = get_subclasses(Converter)
|
533
|
+
converter_subclasses_map = {c.__name__: c for c in converter_subclasses}
|
534
|
+
model_arguments = dict(temperature=temperature)
|
535
|
+
collections_config = get_collections_config()
|
536
|
+
converters = []
|
537
|
+
for ic in intermediate_converters:
|
538
|
+
converters.append(
|
539
|
+
converter_subclasses_map[ic](
|
540
|
+
model=llm_name,
|
541
|
+
model_arguments=model_arguments,
|
542
|
+
source_language=language,
|
543
|
+
max_prompts=max_prompts,
|
544
|
+
db_path=db_loc,
|
545
|
+
db_config=collections_config,
|
546
|
+
splitter_type=splitter_type,
|
547
|
+
)
|
548
|
+
)
|
549
|
+
|
550
|
+
aggregator = Aggregator(
|
551
|
+
intermediate_converters=converters,
|
552
|
+
model=llm_name,
|
553
|
+
model_arguments=model_arguments,
|
554
|
+
source_language=language,
|
555
|
+
max_prompts=max_prompts,
|
556
|
+
db_path=db_loc,
|
557
|
+
db_config=collections_config,
|
558
|
+
splitter_type=splitter_type,
|
559
|
+
prompt_template="basic_aggregation",
|
560
|
+
)
|
561
|
+
aggregator.translate(input_dir, output_dir, overwrite, collection)
|
562
|
+
|
563
|
+
|
442
564
|
@app.command(
|
443
565
|
help="Diagram input code using an LLM.",
|
444
566
|
no_args_is_help=True,
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from copy import deepcopy
|
2
|
+
from typing import List
|
3
|
+
|
4
|
+
from janus.converter.converter import Converter
|
5
|
+
from janus.language.block import CodeBlock, TranslatedCodeBlock
|
6
|
+
|
7
|
+
|
8
|
+
class Aggregator(Converter):
|
9
|
+
def __init__(
|
10
|
+
self,
|
11
|
+
intermediate_converters: List[Converter],
|
12
|
+
separator: str = "\n==============\n",
|
13
|
+
**kwargs,
|
14
|
+
):
|
15
|
+
"""
|
16
|
+
Initialization Method
|
17
|
+
Arguments:
|
18
|
+
intermediate_converters - list of converters to use
|
19
|
+
separator: separator string to partition different outputs before combination
|
20
|
+
"""
|
21
|
+
self._intermediate_converters = intermediate_converters
|
22
|
+
self._separator = separator
|
23
|
+
super().__init__(**kwargs)
|
24
|
+
self._load_parameters()
|
25
|
+
|
26
|
+
def _iterative_translate(self, root: CodeBlock) -> TranslatedCodeBlock:
|
27
|
+
res = TranslatedCodeBlock(root, language=self._target_language)
|
28
|
+
return self._recursive_translate(res)
|
29
|
+
|
30
|
+
def _recursive_translate(self, root: TranslatedCodeBlock) -> None:
|
31
|
+
"""
|
32
|
+
Recursively translates code blocks from a bottom up approach
|
33
|
+
"""
|
34
|
+
original_text = root.original.text
|
35
|
+
if len(root.children) > 0:
|
36
|
+
for c in root.children:
|
37
|
+
self._recursive_translate(c)
|
38
|
+
root.original.text = self._combine_blocks(root.children, self._separator)
|
39
|
+
else:
|
40
|
+
int_reps = [deepcopy(root) for ic in self._intermediate_converters]
|
41
|
+
for ic, r in zip(self._intermediate_converters, int_reps):
|
42
|
+
ic._add_translation(r)
|
43
|
+
root.original.text = self._combine_blocks(int_reps, self._separator)
|
44
|
+
self._add_translation(root)
|
45
|
+
root.original.text = original_text
|
46
|
+
return root
|
47
|
+
|
48
|
+
def _combine_blocks(self, blocks: List[TranslatedCodeBlock], separator: str) -> str:
|
49
|
+
"""
|
50
|
+
Combines code blocks into a single piece of text
|
51
|
+
"""
|
52
|
+
return separator.join([block.text for block in blocks])
|
@@ -1,12 +1,13 @@
|
|
1
|
-
janus/__init__.py,sha256=
|
1
|
+
janus/__init__.py,sha256=ceM2MUGzMNJff2fc8X9U3f-ROSo5J9aDJiQDRj_aVNk,361
|
2
2
|
janus/__main__.py,sha256=lEkpNtLVPtFo8ySDZeXJ_NXDHb0GVdZFPWB4gD4RPS8,64
|
3
3
|
janus/_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
janus/_tests/conftest.py,sha256=V7uW-oq3YbFiRPvrq15YoVVrA1n_83pjgiyTZ-IUGW8,963
|
5
5
|
janus/_tests/test_cli.py,sha256=oYJsUGWfpBJWEGRG5NGxdJedU5DU_m6fwJ7xEbJVYl0,4244
|
6
|
-
janus/cli.py,sha256=
|
6
|
+
janus/cli.py,sha256=84deHkbRWxT2ThHa9b08HBIIThy-mw1b5WCfjWOcuME,36950
|
7
7
|
janus/converter/__init__.py,sha256=U2EOMcCykiC0ZqhorNefOP_04hOF18qhYoPKrVp1Vrk,345
|
8
8
|
janus/converter/_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
janus/converter/_tests/test_translate.py,sha256=yzcFEGc_z8QmBBBmC9dZnfL9tT8CD1rkpc8Hz44Jp4c,5631
|
10
|
+
janus/converter/aggregator.py,sha256=MuAXMKmq6PuUo_w6ljyiuDn81Gk2dN-Ci7FVeLc6vhs,1966
|
10
11
|
janus/converter/converter.py,sha256=GL4moCOi5vvvsEjAf_7Vrn5GHq12nptH47AAP4soeQc,27956
|
11
12
|
janus/converter/diagram.py,sha256=AyxkoyfMoQ7jpuOqyJ3bIvYqHJSEhmR-gYrIsq-d8tk,5285
|
12
13
|
janus/converter/document.py,sha256=hsW512veNjFWbdl5WriuUdNmMEqZy8ktRvqn9rRmA6E,4566
|
@@ -101,8 +102,8 @@ janus/utils/_tests/test_progress.py,sha256=Rs_u5PiGjP-L-o6C1fhwfE1ig8jYu9Xo9s4p8
|
|
101
102
|
janus/utils/enums.py,sha256=AoilbdiYyMvY2Mp0AM4xlbLSELfut2XMwhIM1S_msP4,27610
|
102
103
|
janus/utils/logger.py,sha256=KZeuaMAnlSZCsj4yL0P6N-JzZwpxXygzACWfdZFeuek,2337
|
103
104
|
janus/utils/progress.py,sha256=PIpcQec7SrhsfqB25LHj2CDDkfm9umZx90d9LZnAx6k,1469
|
104
|
-
janus_llm-3.
|
105
|
-
janus_llm-3.
|
106
|
-
janus_llm-3.
|
107
|
-
janus_llm-3.
|
108
|
-
janus_llm-3.
|
105
|
+
janus_llm-3.5.0.dist-info/LICENSE,sha256=_j0st0a-HB6MRbP3_BW3PUqpS16v54luyy-1zVyl8NU,10789
|
106
|
+
janus_llm-3.5.0.dist-info/METADATA,sha256=hFVUIcLuovJkZQDub9NYjzqnxWa8lzBTtsXODYI449o,4184
|
107
|
+
janus_llm-3.5.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
108
|
+
janus_llm-3.5.0.dist-info/entry_points.txt,sha256=OGhQwzj6pvXp79B0SaBD5apGekCu7Dwe9fZZT_TZ544,39
|
109
|
+
janus_llm-3.5.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|