11import logging
22
3- import tiktoken
43from rich .console import Console
54from rich .style import Style
65from rich .tree import Tree
76
7+ try :
8+ import tiktoken
9+
10+ _tiktoken_available = True
11+ except ImportError :
12+ _tiktoken_available = False
13+
814
915class 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