!_TAG_EXTRA_DESCRIPTION	anonymous	/Include tags for non-named objects like lambda/
!_TAG_EXTRA_DESCRIPTION	fileScope	/Include tags of file scope/
!_TAG_EXTRA_DESCRIPTION	pseudo	/Include pseudo tags/
!_TAG_EXTRA_DESCRIPTION	subparser	/Include tags generated by subparsers/
!_TAG_FIELD_DESCRIPTION	epoch	/the last modified time of the input file (only for F\/file kind tag)/
!_TAG_FIELD_DESCRIPTION	file	/File-restricted scoping/
!_TAG_FIELD_DESCRIPTION	input	/input file/
!_TAG_FIELD_DESCRIPTION	name	/tag name/
!_TAG_FIELD_DESCRIPTION	pattern	/pattern/
!_TAG_FIELD_DESCRIPTION	typeref	/Type and name of a variable or typedef/
!_TAG_FIELD_DESCRIPTION!Python	nameref	/the original name for the tag/
!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
!_TAG_KIND_DESCRIPTION!Markdown	S,subsection	/level 2 sections/
!_TAG_KIND_DESCRIPTION!Markdown	T,l4subsection	/level 4 sections/
!_TAG_KIND_DESCRIPTION!Markdown	c,chapter	/chapters/
!_TAG_KIND_DESCRIPTION!Markdown	h,hashtag	/hashtags/
!_TAG_KIND_DESCRIPTION!Markdown	n,footnote	/footnotes/
!_TAG_KIND_DESCRIPTION!Markdown	s,section	/sections/
!_TAG_KIND_DESCRIPTION!Markdown	t,subsubsection	/level 3 sections/
!_TAG_KIND_DESCRIPTION!Markdown	u,l5subsection	/level 5 sections/
!_TAG_KIND_DESCRIPTION!Python	I,namespace	/name referring a module defined in other file/
!_TAG_KIND_DESCRIPTION!Python	Y,unknown	/name referring a class\/variable\/function\/module defined in other module/
!_TAG_KIND_DESCRIPTION!Python	c,class	/classes/
!_TAG_KIND_DESCRIPTION!Python	f,function	/functions/
!_TAG_KIND_DESCRIPTION!Python	i,module	/modules/
!_TAG_KIND_DESCRIPTION!Python	m,member	/class members/
!_TAG_KIND_DESCRIPTION!Python	v,variable	/variables/
!_TAG_KIND_DESCRIPTION!Yaml	a,anchor	/anchors/
!_TAG_OUTPUT_EXCMD	mixed	/number, pattern, mixed, or combineV2/
!_TAG_OUTPUT_FILESEP	slash	/slash or backslash/
!_TAG_OUTPUT_MODE	u-ctags	/u-ctags or e-ctags/
!_TAG_OUTPUT_VERSION	0.0	/current.age/
!_TAG_PARSER_VERSION!Markdown	1.1	/current.age/
!_TAG_PARSER_VERSION!Python	0.0	/current.age/
!_TAG_PARSER_VERSION!Yaml	0.0	/current.age/
!_TAG_PATTERN_LENGTH_LIMIT	96	/0 for no limit/
!_TAG_PROC_CWD	/Users/biobootloader/code/spice/	//
!_TAG_PROGRAM_AUTHOR	Universal Ctags Team	//
!_TAG_PROGRAM_NAME	Universal Ctags	/Derived from Exuberant Ctags/
!_TAG_PROGRAM_URL	https://ctags.io/	/official site/
!_TAG_PROGRAM_VERSION	6.0.0	//
!_TAG_ROLE_DESCRIPTION!Python!module	imported	/imported modules/
!_TAG_ROLE_DESCRIPTION!Python!module	indirectlyImported	/module imported in alternative name/
!_TAG_ROLE_DESCRIPTION!Python!module	namespace	/namespace from where classes\/variables\/functions are imported/
!_TAG_ROLE_DESCRIPTION!Python!unknown	imported	/imported from the other module/
!_TAG_ROLE_DESCRIPTION!Python!unknown	indirectlyImported	/classes\/variables\/functions\/modules imported in alternative name/
!_TAG_ROLE_DESCRIPTION!Yaml!anchor	alias	/alias/
APIConnectionError	spice/errors.py	/^class APIConnectionError(SpiceError):$/;"	c
AuthenticationError	spice/errors.py	/^class AuthenticationError(SpiceError):$/;"	c
Logging Callbacks	README.md	/^### Logging Callbacks$/;"	S	section:Spice""Usage Examples
Mixing Providers	README.md	/^### Mixing Providers$/;"	S	section:Spice""Usage Examples
Spice	README.md	/^# Spice$/;"	c
Spice	spice/spice.py	/^class Spice:$/;"	c
SpiceCallArgs	spice/spice.py	/^class SpiceCallArgs:$/;"	c
SpiceEmbeddings	spice/embeddings.py	/^class SpiceEmbeddings:$/;"	c
SpiceError	spice/errors.py	/^class SpiceError(Exception):$/;"	c
SpiceResponse	spice/spice.py	/^class SpiceResponse:$/;"	c
SpiceWhisper	spice/whisper.py	/^class SpiceWhisper:$/;"	c
Streaming	README.md	/^### Streaming$/;"	S	section:Spice""Usage Examples
Usage Examples	README.md	/^## Usage Examples$/;"	s	chapter:Spice
WrappedAnthropicClient	spice/wrapped_clients.py	/^class WrappedAnthropicClient(WrappedClient):$/;"	c
WrappedAzureClient	spice/wrapped_clients.py	/^class WrappedAzureClient(WrappedOpenAIClient):$/;"	c
WrappedClient	spice/wrapped_clients.py	/^class WrappedClient(ABC):$/;"	c
WrappedOpenAIClient	spice/wrapped_clients.py	/^class WrappedOpenAIClient(WrappedClient):$/;"	c
__init__	spice/embeddings.py	/^    def __init__(self, provider: str = "openai"):$/;"	m	class:SpiceEmbeddings
__init__	spice/spice.py	/^    def __init__(self, call_args: SpiceCallArgs, logging_callback: Optional[Callable[[SpiceRespo/;"	m	class:SpiceResponse
__init__	spice/spice.py	/^    def __init__(self, model=None, provider=None, model_aliases=None):$/;"	m	class:Spice
__init__	spice/whisper.py	/^    def __init__(self, provider: str = "openai"):$/;"	m	class:SpiceWhisper
__init__	spice/wrapped_clients.py	/^    def __init__(self, key):$/;"	m	class:WrappedAnthropicClient
__init__	spice/wrapped_clients.py	/^    def __init__(self, key, base_url=None):$/;"	m	class:WrappedOpenAIClient
__init__	spice/wrapped_clients.py	/^    def __init__(self, key, endpoint):$/;"	m	class:WrappedAzureClient
_get_client	spice/client_manager.py	/^def _get_client(provider):$/;"	f
_get_clients_from_env	spice/client_manager.py	/^def _get_clients_from_env():$/;"	f
_get_provider_from_model_name	spice/client_manager.py	/^def _get_provider_from_model_name(model):$/;"	f
_get_streaming_response	spice/spice.py	/^    async def _get_streaming_response(self, client: WrappedClient, stream, response: SpiceRespon/;"	m	class:Spice	typeref:typename:SpiceResponse
_model_info	spice/client_manager.py	/^_model_info = {$/;"	v
_validate_model_aliases	spice/client_manager.py	/^def _validate_model_aliases(model_aliases, clients):$/;"	f
azure_example	scripts/run.py	/^async def azure_example():$/;"	f
basic_example	scripts/run.py	/^async def basic_example():$/;"	f
call_llm	spice/spice.py	/^    async def call_llm($/;"	m	class:Spice	typeref:typename:SpiceResponse
catch_and_convert_errors	spice/wrapped_clients.py	/^    def catch_and_convert_errors(self) -> ContextManager[None]: ...$/;"	m	class:WrappedClient	typeref:typename:ContextManager[None]
catch_and_convert_errors	spice/wrapped_clients.py	/^    def catch_and_convert_errors(self):$/;"	m	class:WrappedAnthropicClient
catch_and_convert_errors	spice/wrapped_clients.py	/^    def catch_and_convert_errors(self):$/;"	m	class:WrappedOpenAIClient
characters_per_second	spice/spice.py	/^    def characters_per_second(self) -> float:$/;"	m	class:SpiceResponse	typeref:typename:float
count_messages_tokens	spice/utils.py	/^def count_messages_tokens(messages: list[dict], model: str):$/;"	f
count_string_tokens	spice/utils.py	/^def count_string_tokens(message: str, model: str, full_message: bool) -> int:$/;"	f	typeref:typename:int
extract_text	spice/wrapped_clients.py	/^    def extract_text(self, chat_completion) -> str: ...$/;"	m	class:WrappedClient	typeref:typename:str
extract_text	spice/wrapped_clients.py	/^    def extract_text(self, chat_completion):$/;"	m	class:WrappedAnthropicClient
extract_text	spice/wrapped_clients.py	/^    def extract_text(self, chat_completion):$/;"	m	class:WrappedOpenAIClient
finalize	spice/spice.py	/^    def finalize(self, text: str, input_tokens: Optional[int], output_tokens: Optional[int]):$/;"	m	class:SpiceResponse
fuzzy_model_lookup	spice/utils.py	/^def fuzzy_model_lookup(model_hint):$/;"	f
get_chat_completion_or_stream	spice/wrapped_clients.py	/^    async def get_chat_completion_or_stream($/;"	m	class:WrappedClient	typeref:typename:ChatCompletion|AsyncIterator[ChatCompletionChunk]|Message|AsyncIterator[MessageStreamEvent]
get_chat_completion_or_stream	spice/wrapped_clients.py	/^    async def get_chat_completion_or_stream(self, model, messages, stream, temperature, max_toke/;"	m	class:WrappedAnthropicClient
get_chat_completion_or_stream	spice/wrapped_clients.py	/^    async def get_chat_completion_or_stream(self, model, messages, stream, temperature, max_toke/;"	m	class:WrappedOpenAIClient
get_embeddings	spice/embeddings.py	/^    def get_embeddings(self, input_texts: list[str], model: str = "text-embedding-ada-002") -> E/;"	m	class:SpiceEmbeddings	typeref:typename:Embeddings
get_encoding_for_model	spice/utils.py	/^def get_encoding_for_model(model: str) -> tiktoken.Encoding:$/;"	f	typeref:typename:tiktoken.Encoding
get_input_and_output_tokens	spice/wrapped_clients.py	/^    def get_input_and_output_tokens(self, chat_completion) -> tuple[int, int]: ...$/;"	m	class:WrappedClient	typeref:typename:tuple[int,int]
get_input_and_output_tokens	spice/wrapped_clients.py	/^    def get_input_and_output_tokens(self, chat_completion):$/;"	m	class:WrappedAnthropicClient
get_input_and_output_tokens	spice/wrapped_clients.py	/^    def get_input_and_output_tokens(self, chat_completion):$/;"	m	class:WrappedOpenAIClient
get_whisper_transcription	spice/whisper.py	/^    async def get_whisper_transcription(self, audio_path: Path) -> str:$/;"	m	class:SpiceWhisper	typeref:typename:str
input_tokens	spice/spice.py	/^    def input_tokens(self) -> int:$/;"	m	class:SpiceResponse	typeref:typename:int
max_tokens	spice/spice.py	/^    max_tokens: Optional[int] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[int]
multiple_providers_example	scripts/run.py	/^async def multiple_providers_example():$/;"	f
output_tokens	spice/spice.py	/^    def output_tokens(self) -> int:$/;"	m	class:SpiceResponse	typeref:typename:int
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk) -> tuple[Optional[str], Optional[int], Optional[int]]: ...$/;"	m	class:WrappedClient	typeref:typename:tuple[Optional[str],Optional[int],Optional[int]]
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk):$/;"	m	class:WrappedAnthropicClient
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk):$/;"	m	class:WrappedOpenAIClient
response_format	spice/spice.py	/^    response_format: Optional[dict] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[dict]
run_all_examples	scripts/run.py	/^async def run_all_examples():$/;"	f
stream	spice/spice.py	/^    def stream(self) -> Callable[[], AsyncIterator[str]]:$/;"	m	class:SpiceResponse	typeref:typename:Callable[[],AsyncIterator[str]]
stream	spice/spice.py	/^    stream: bool = False$/;"	v	class:SpiceCallArgs	typeref:typename:bool
streaming_example	scripts/run.py	/^async def streaming_example():$/;"	f
streaming_example_with_callback	scripts/run.py	/^async def streaming_example_with_callback():$/;"	f
temperature	spice/spice.py	/^    temperature: Optional[float] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[float]
text	spice/spice.py	/^    def text(self) -> str:$/;"	m	class:SpiceResponse	typeref:typename:str
time_to_first_token	spice/spice.py	/^    def time_to_first_token(self) -> float:$/;"	m	class:SpiceResponse	typeref:typename:float
timer	spice/spice.py	/^from timeit import default_timer as timer$/;"	Y	nameref:unknown:default_timer
total_time	spice/spice.py	/^    def total_time(self) -> float:$/;"	m	class:SpiceResponse	typeref:typename:float
total_tokens	spice/spice.py	/^    def total_tokens(self) -> int:$/;"	m	class:SpiceResponse	typeref:typename:int
wrapped_stream	spice/spice.py	/^        async def wrapped_stream() -> AsyncIterator[str]:$/;"	f	member:Spice._get_streaming_response	typeref:typename:AsyncIterator[str]	file:
