Skip to content

Commit 27ef0d5

Browse files
committed
Optionally use tiktoken - fallback on estimate of tokens
1 parent 0ea424b commit 27ef0d5

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

plain2code_console.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
import logging
22

3-
import tiktoken
43
from rich.console import Console
54
from rich.style import Style
65
from rich.tree import Tree
76

7+
try:
8+
import tiktoken
9+
10+
_tiktoken_available = True
11+
except ImportError:
12+
_tiktoken_available = False
13+
814

915
class Plain2CodeConsole(Console):
1016
INFO_STYLE = Style()
@@ -16,7 +22,10 @@ class Plain2CodeConsole(Console):
1622

1723
def __init__(self):
1824
super().__init__()
19-
self.llm_encoding = tiktoken.get_encoding("cl100k_base")
25+
if _tiktoken_available:
26+
self.llm_encoding = tiktoken.get_encoding("cl100k_base")
27+
else:
28+
self.llm_encoding = None
2029

2130
def info(self, *args, **kwargs):
2231
logging.info(" ".join(map(str, args)))
@@ -86,7 +95,7 @@ def _create_tree_from_files(self, root_folder, files):
8695
current_level = current_level.add(f"{part} [red]deleted[/red]")
8796
else:
8897
file_lines = len(content.splitlines())
89-
file_tokens = len(self.llm_encoding.encode(content))
98+
file_tokens = self._count_tokens(content)
9099
current_level = current_level.add(f"{part} ({file_lines} lines, {file_tokens} tokens)")
91100
else:
92101
current_level = current_level.add(part)
@@ -95,6 +104,12 @@ def _create_tree_from_files(self, root_folder, files):
95104

96105
return tree
97106

107+
def _count_tokens(self, text):
108+
"""Count tokens using tiktoken if available, otherwise estimate from character count."""
109+
if self.llm_encoding is not None:
110+
return len(self.llm_encoding.encode(text))
111+
return len(text) // 4
112+
98113
def print_resources(self, resources_list, linked_resources):
99114
if len(resources_list) == 0:
100115
self.input("No linked resources found.")
@@ -103,7 +118,7 @@ def print_resources(self, resources_list, linked_resources):
103118
self.input("Linked resources:")
104119
for resource_name in resources_list:
105120
if resource_name["target"] in linked_resources:
106-
file_tokens = len(self.llm_encoding.encode(linked_resources[resource_name["target"]]))
121+
file_tokens = self._count_tokens(linked_resources[resource_name["target"]])
107122
self.input(
108123
f"- {resource_name['text']} [#4169E1]({resource_name['target']}, {file_tokens} tokens)[/#4169E1]"
109124
)

0 commit comments

Comments
 (0)