!_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_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_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/
ANTHROPIC	spice/providers.py	/^ANTHROPIC = Provider("anthropic", get_anthropic_client)$/;"	v
APIConnectionError	spice/errors.py	/^class APIConnectionError(SpiceError):$/;"	c
AZURE	spice/providers.py	/^AZURE = Provider("azure", get_azure_client)$/;"	v
AuthenticationError	spice/errors.py	/^class AuthenticationError(SpiceError):$/;"	c
CLAUDE_3_HAIKU_20240307	spice/models.py	/^CLAUDE_3_HAIKU_20240307 = TextModel("claude-3-haiku-20240307", ANTHROPIC, 200000)$/;"	v
CLAUDE_3_OPUS_20240229	spice/models.py	/^CLAUDE_3_OPUS_20240229 = TextModel("claude-3-opus-20240229", ANTHROPIC, 200000)$/;"	v
EmbeddingModel	spice/models.py	/^class EmbeddingModel(Model):$/;"	c
GPT_35_TURBO_0125	spice/models.py	/^GPT_35_TURBO_0125 = TextModel("gpt-3.5-turbo-0125", OPEN_AI, 16385)$/;"	v
GPT_4_0125_PREVIEW	spice/models.py	/^GPT_4_0125_PREVIEW = TextModel("gpt-4-0125-preview", OPEN_AI, 128000)$/;"	v
GPT_4_VISION_PREVIEW	spice/models.py	/^GPT_4_VISION_PREVIEW = VisionModel("gpt-4-vision-preview", OPEN_AI, 128000)$/;"	v
InvalidModelError	spice/errors.py	/^class InvalidModelError(SpiceError):$/;"	c
InvalidProviderError	spice/errors.py	/^class InvalidProviderError(SpiceError):$/;"	c
Mixing Providers	README.md	/^### Mixing Providers$/;"	S	section:Spice""Usage Examples
Model	spice/models.py	/^class Model:$/;"	c
NoAPIKeyError	spice/errors.py	/^class NoAPIKeyError(SpiceError):$/;"	c
OPEN_AI	spice/providers.py	/^OPEN_AI = Provider("open_ai", get_openai_client)$/;"	v
Provider	spice/providers.py	/^class Provider:$/;"	c
ResponseFormatType	spice/spice.py	/^ResponseFormatType = Dict[str, Literal["text", "json"]]$/;"	v
Spice	README.md	/^# Spice$/;"	c
Spice	spice/spice.py	/^class Spice:$/;"	c
SpiceCallArgs	spice/spice.py	/^class SpiceCallArgs:$/;"	c
SpiceError	spice/errors.py	/^class SpiceError(Exception):$/;"	c
SpiceMessage	spice/spice_message.py	/^SpiceMessage = ChatCompletionMessageParam$/;"	v
SpiceResponse	spice/spice.py	/^class SpiceResponse:$/;"	c
Streaming	README.md	/^### Streaming$/;"	S	section:Spice""Usage Examples
StreamingSpiceResponse	spice/spice.py	/^class StreamingSpiceResponse:$/;"	c
TEXT_EMBEDDING_3_LARGE	spice/models.py	/^TEXT_EMBEDDING_3_LARGE = EmbeddingModel("text-embedding-3-large", OPEN_AI)$/;"	v
TEXT_EMBEDDING_3_SMALL	spice/models.py	/^TEXT_EMBEDDING_3_SMALL = EmbeddingModel("text-embedding-3-small", OPEN_AI)$/;"	v
TEXT_EMBEDDING_ADA_002	spice/models.py	/^TEXT_EMBEDDING_ADA_002 = EmbeddingModel("text-embedding-ada-002", OPEN_AI)$/;"	v
TextModel	spice/models.py	/^class TextModel(Model):$/;"	c
TranscriptionModel	spice/models.py	/^class TranscriptionModel(Model):$/;"	c
UnknownModel	spice/models.py	/^class UnknownModel(Model):$/;"	c
Usage Examples	README.md	/^## Usage Examples$/;"	s	chapter:Spice
Using unknown models	README.md	/^### Using unknown models$/;"	S	section:Spice""Usage Examples
VisionModel	spice/models.py	/^class VisionModel(TextModel):$/;"	c
WHISPER_1	spice/models.py	/^WHISPER_1 = TranscriptionModel("whisper-1", OPEN_AI)$/;"	v
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
__aiter__	spice/spice.py	/^    def __aiter__(self):$/;"	m	class:StreamingSpiceResponse
__anext__	spice/spice.py	/^    async def __anext__(self):$/;"	m	class:StreamingSpiceResponse
__init__	spice/spice.py	/^    def __init__($/;"	m	class:Spice
__init__	spice/spice.py	/^    def __init__(self, call_args: SpiceCallArgs, client: WrappedClient, stream: AsyncIterator):$/;"	m	class:StreamingSpiceResponse
__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
__post_init__	spice/models.py	/^    def __post_init__(self):$/;"	m	class:Model
__post_init__	spice/providers.py	/^    def __post_init__(self):$/;"	m	class:Provider
_fix_call_args	spice/spice.py	/^    def _fix_call_args($/;"	m	class:Spice
_get_client	spice/spice.py	/^    def _get_client(self, model: Model, provider: Optional[Provider | str]) -> WrappedClient:$/;"	m	class:Spice	typeref:typename:WrappedClient
_get_embedding_model	spice/spice.py	/^    def _get_embedding_model(self, model: Optional[Model | str]) -> EmbeddingModel | UnknownMode/;"	m	class:Spice	typeref:typename:EmbeddingModel|UnknownModel
_get_text_model	spice/spice.py	/^    def _get_text_model(self, model: Optional[Model | str]) -> TextModel | UnknownModel:$/;"	m	class:Spice	typeref:typename:TextModel|UnknownModel
_get_transcription_model	spice/spice.py	/^    def _get_transcription_model(self, model: Model | str) -> TranscriptionModel | UnknownModel:$/;"	m	class:Spice	typeref:typename:TranscriptionModel|UnknownModel
azure_example	scripts/run.py	/^async def azure_example():$/;"	f
basic_example	scripts/run.py	/^async def basic_example():$/;"	f
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
complete_response	spice/spice.py	/^    async def complete_response(self) -> SpiceResponse:$/;"	m	class:StreamingSpiceResponse	typeref:typename:SpiceResponse
count_messages_tokens	spice/utils.py	/^def count_messages_tokens(messages: list[SpiceMessage], 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
current_response	spice/spice.py	/^    def current_response(self) -> SpiceResponse:$/;"	m	class:StreamingSpiceResponse	typeref:typename:SpiceResponse
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
fuzzy_model_lookup	spice/utils.py	/^def fuzzy_model_lookup(model_hint):$/;"	f
get_anthropic_client	spice/providers.py	/^def get_anthropic_client(cache=[]):$/;"	f
get_azure_client	spice/providers.py	/^def get_azure_client(cache=[]):$/;"	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, call_args: SpiceCallArgs):$/;"	m	class:WrappedAnthropicClient
get_chat_completion_or_stream	spice/wrapped_clients.py	/^    async def get_chat_completion_or_stream(self, call_args: SpiceCallArgs):$/;"	m	class:WrappedOpenAIClient
get_embeddings	spice/spice.py	/^    async def get_embeddings($/;"	m	class:Spice	typeref:typename:List[List[float]]
get_embeddings	spice/wrapped_clients.py	/^    async def get_embeddings(self, input_texts: List[str], model: str) -> List[List[float]]: ...$/;"	m	class:WrappedClient	typeref:typename:List[List[float]]
get_embeddings	spice/wrapped_clients.py	/^    async def get_embeddings(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedAnthropicClient	typeref:typename:List[List[float]]
get_embeddings	spice/wrapped_clients.py	/^    async def get_embeddings(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedOpenAIClient	typeref:typename:List[List[float]]
get_embeddings_sync	spice/spice.py	/^    def get_embeddings_sync($/;"	m	class:Spice	typeref:typename:List[List[float]]
get_embeddings_sync	spice/wrapped_clients.py	/^    def get_embeddings_sync(self, input_texts: List[str], model: str) -> List[List[float]]: ...$/;"	m	class:WrappedClient	typeref:typename:List[List[float]]
get_embeddings_sync	spice/wrapped_clients.py	/^    def get_embeddings_sync(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedAnthropicClient	typeref:typename:List[List[float]]
get_embeddings_sync	spice/wrapped_clients.py	/^    def get_embeddings_sync(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedOpenAIClient	typeref:typename:List[List[float]]
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_model_from_name	spice/models.py	/^def get_model_from_name(model_name: str) -> Model:$/;"	f	typeref:typename:Model
get_openai_client	spice/providers.py	/^def get_openai_client(cache=[]):$/;"	f
get_provider_from_name	spice/providers.py	/^def get_provider_from_name(provider_name: str) -> Provider:$/;"	f	typeref:typename:Provider
get_response	spice/spice.py	/^    async def get_response($/;"	m	class:Spice	typeref:typename:SpiceResponse
get_transcription	spice/spice.py	/^    async def get_transcription($/;"	m	class:Spice	typeref:typename:str
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> str: ...$/;"	m	class:WrappedClient	typeref:typename:str
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> str:$/;"	m	class:WrappedAnthropicClient	typeref:typename:str
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> str:$/;"	m	class:WrappedOpenAIClient	typeref:typename:str
load_provider	spice/spice.py	/^    def load_provider(self, provider: Provider | str):$/;"	m	class:Spice
max_tokens	spice/spice.py	/^    max_tokens: Optional[int] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[int]
models	spice/models.py	/^models: List[Model] = []$/;"	v	typeref:typename:List[Model]
multiple_providers_example	scripts/run.py	/^async def multiple_providers_example():$/;"	f
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
providers	spice/providers.py	/^providers: List[Provider] = []$/;"	v	typeref:typename:List[Provider]
response_format	spice/spice.py	/^    response_format: Optional[ResponseFormatType] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[ResponseFormatType]
run_all_examples	scripts/run.py	/^async def run_all_examples():$/;"	f
stream	spice/spice.py	/^    stream: bool = False$/;"	v	class:SpiceCallArgs	typeref:typename:bool
stream_response	spice/spice.py	/^    async def stream_response($/;"	m	class:Spice	typeref:typename:StreamingSpiceResponse
streaming_example	scripts/run.py	/^async def streaming_example():$/;"	f
temperature	spice/spice.py	/^    temperature: Optional[float] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[float]
timer	spice/spice.py	/^from timeit import default_timer as timer$/;"	Y	nameref:unknown:default_timer
total_tokens	spice/spice.py	/^    def total_tokens(self) -> int:$/;"	m	class:SpiceResponse	typeref:typename:int
