!_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
API Keys	README.md	/^### API Keys$/;"	S	section:Spice""Install
APIConnectionError	spice/errors.py	/^class APIConnectionError(SpiceError):$/;"	c
APIError	spice/errors.py	/^class APIError(SpiceError):$/;"	c
AZURE	spice/providers.py	/^AZURE = Provider("azure", get_azure_client)$/;"	v
AuthenticationError	spice/errors.py	/^class AuthenticationError(SpiceError):$/;"	c
Behavior	spice/retry_strategy/__init__.py	/^class Behavior(Enum):$/;"	c
CLAUDE_3_5_SONNET_20240620	spice/models.py	/^CLAUDE_3_5_SONNET_20240620 = TextModel($/;"	v
CLAUDE_3_HAIKU_20240307	spice/models.py	/^CLAUDE_3_HAIKU_20240307 = TextModel($/;"	v
CLAUDE_3_OPUS_20240229	spice/models.py	/^CLAUDE_3_OPUS_20240229 = TextModel($/;"	v
CLAUDE_3_SONNET_20240229	spice/models.py	/^CLAUDE_3_SONNET_20240229 = TextModel($/;"	v
CompletionChoice	tests/conftest.py	/^from openai.types.chat.chat_completion import Choice as CompletionChoice$/;"	Y	nameref:unknown:Choice
ConstrainedAnthropicMessageParam	spice/wrapped_clients.py	/^class ConstrainedAnthropicMessageParam(TypedDict):$/;"	c
ConverterStrategy	spice/retry_strategy/converter_strategy.py	/^class ConverterStrategy(RetryStrategy):$/;"	c
DefaultRetryStrategy	spice/retry_strategy/default_strategy.py	/^class DefaultRetryStrategy(RetryStrategy):$/;"	c
EmbeddingModel	spice/models.py	/^class EmbeddingModel(Model):$/;"	c
EmbeddingResponse	spice/spice.py	/^class EmbeddingResponse:$/;"	c
Embeddings and Transcriptions	README.md	/^### Embeddings and Transcriptions$/;"	S	section:Spice""Usage Examples
GPT_35_TURBO	spice/models.py	/^GPT_35_TURBO = TextModel("gpt-3.5-turbo", OPEN_AI, input_cost=50, output_cost=150, context_lengt/;"	v
GPT_35_TURBO_0125	spice/models.py	/^GPT_35_TURBO_0125 = TextModel("gpt-3.5-turbo-0125", OPEN_AI, input_cost=50, output_cost=150, con/;"	v
GPT_35_TURBO_0613	spice/models.py	/^GPT_35_TURBO_0613 = TextModel("gpt-3.5-turbo-0613", OPEN_AI, input_cost=150, output_cost=200, co/;"	v
GPT_35_TURBO_1106	spice/models.py	/^GPT_35_TURBO_1106 = TextModel("gpt-3.5-turbo-1106", OPEN_AI, input_cost=100, output_cost=200, co/;"	v
GPT_35_TURBO_16K_0613	spice/models.py	/^GPT_35_TURBO_16K_0613 = TextModel($/;"	v
GPT_4	spice/models.py	/^GPT_4 = TextModel("gpt-4", OPEN_AI, input_cost=3000, output_cost=6000, context_length=8192)$/;"	v
GPT_4_0125_PREVIEW	spice/models.py	/^GPT_4_0125_PREVIEW = TextModel("gpt-4-0125-preview", OPEN_AI, input_cost=1000, output_cost=3000,/;"	v
GPT_4_0613	spice/models.py	/^GPT_4_0613 = TextModel("gpt-4-0613", OPEN_AI, input_cost=3000, output_cost=6000, context_length=/;"	v
GPT_4_1106_PREVIEW	spice/models.py	/^GPT_4_1106_PREVIEW = TextModel("gpt-4-1106-preview", OPEN_AI, input_cost=1000, output_cost=3000,/;"	v
GPT_4_1106_VISION_PREVIEW	spice/models.py	/^GPT_4_1106_VISION_PREVIEW = VisionModel($/;"	v
GPT_4_32K	spice/models.py	/^GPT_4_32K = TextModel("gpt-4-32k", OPEN_AI, input_cost=6000, output_cost=12000, context_length=3/;"	v
GPT_4_32K_0613	spice/models.py	/^GPT_4_32K_0613 = TextModel("gpt-4-32k-0613", OPEN_AI, input_cost=6000, output_cost=12000, contex/;"	v
GPT_4_TURBO	spice/models.py	/^GPT_4_TURBO = TextModel("gpt-4-turbo", OPEN_AI, input_cost=1000, output_cost=3000, context_lengt/;"	v
GPT_4_TURBO_2024_04_09	spice/models.py	/^GPT_4_TURBO_2024_04_09 = TextModel($/;"	v
GPT_4_TURBO_PREVIEW	spice/models.py	/^GPT_4_TURBO_PREVIEW = TextModel($/;"	v
GPT_4_VISION_PREVIEW	spice/models.py	/^GPT_4_VISION_PREVIEW = VisionModel($/;"	v
GPT_4o	spice/models.py	/^GPT_4o = TextModel("gpt-4o", OPEN_AI, input_cost=500, output_cost=1500, context_length=128000)$/;"	v
GPT_4o_2024_05_13	spice/models.py	/^GPT_4o_2024_05_13 = TextModel("gpt-4o-2024-05-13", OPEN_AI, input_cost=500, output_cost=1500, co/;"	v
GPT_4o_2024_08_06	spice/models.py	/^GPT_4o_2024_08_06 = TextModel($/;"	v
GPT_4o_mini	spice/models.py	/^GPT_4o_mini = TextModel("gpt-4o-mini", OPEN_AI, input_cost=15, output_cost=60, context_length=12/;"	v
GPT_4o_mini_2024_07_18	spice/models.py	/^GPT_4o_mini_2024_07_18 = TextModel($/;"	v
HAIKU	spice/models.py	/^HAIKU = CLAUDE_3_HAIKU_20240307$/;"	v
ImageContent	spice/spice_message.py	/^class ImageContent(BaseModel):$/;"	c
ImageError	spice/errors.py	/^class ImageError(SpiceError):$/;"	c
Install	README.md	/^## Install$/;"	s	chapter:Spice
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("openai", get_openai_client)$/;"	v
OPUS	spice/models.py	/^OPUS = CLAUDE_3_OPUS_20240229$/;"	v
PromptMetadata	spice/spice_message.py	/^class PromptMetadata(BaseModel):$/;"	c
Provider	spice/providers.py	/^class Provider:$/;"	c
RETRY	spice/retry_strategy/__init__.py	/^    RETRY = "retry"$/;"	v	class:Behavior
RETURN	spice/retry_strategy/__init__.py	/^    RETURN = "return"$/;"	v	class:Behavior
RetryStrategy	spice/retry_strategy/__init__.py	/^class RetryStrategy(ABC, Generic[T]):$/;"	c
Role	spice/spice_message.py	/^Role = Literal["user", "assistant", "system"]$/;"	v
SONNET	spice/models.py	/^SONNET = CLAUDE_3_SONNET_20240229$/;"	v
SONNET_3_5	spice/models.py	/^SONNET_3_5 = CLAUDE_3_5_SONNET_20240620$/;"	v
Spice	README.md	/^# Spice$/;"	c
Spice	spice/spice.py	/^class Spice:$/;"	c
SpiceCallArgs	spice/call_args.py	/^class SpiceCallArgs(BaseModel):$/;"	c
SpiceError	spice/errors.py	/^class SpiceError(Exception):$/;"	c
SpiceMessage	spice/spice_message.py	/^class SpiceMessage(BaseModel):$/;"	c
SpiceMessages	spice/spice_message.py	/^class SpiceMessages(List[SpiceMessage]):$/;"	c
SpiceResponse	spice/spice.py	/^class SpiceResponse(BaseModel, Generic[T]):$/;"	c
Streaming	README.md	/^### Streaming$/;"	S	section:Spice""Usage Examples
StreamingSpiceResponse	spice/spice.py	/^class StreamingSpiceResponse:$/;"	c
T	spice/retry_strategy/__init__.py	/^T = TypeVar("T")$/;"	v
T	spice/spice.py	/^T = TypeVar("T")$/;"	v
TEXT_EMBEDDING_3_LARGE	spice/models.py	/^TEXT_EMBEDDING_3_LARGE = EmbeddingModel("text-embedding-3-large", OPEN_AI, input_cost=13, contex/;"	v
TEXT_EMBEDDING_3_SMALL	spice/models.py	/^TEXT_EMBEDDING_3_SMALL = EmbeddingModel("text-embedding-3-small", OPEN_AI, input_cost=2, context/;"	v
TEXT_EMBEDDING_ADA_002	spice/models.py	/^TEXT_EMBEDDING_ADA_002 = EmbeddingModel("text-embedding-ada-002", OPEN_AI, input_cost=10, contex/;"	v
TextAndTokens	spice/wrapped_clients.py	/^class TextAndTokens(BaseModel):$/;"	c
TextContent	spice/spice_message.py	/^class TextContent(BaseModel):$/;"	c
TextModel	spice/models.py	/^class TextModel(Model):$/;"	c
TranscriptionModel	spice/models.py	/^class TranscriptionModel(Model):$/;"	c
TranscriptionResponse	spice/spice.py	/^class TranscriptionResponse:$/;"	c
UnknownModel	spice/models.py	/^class UnknownModel(TextModel, EmbeddingModel, TranscriptionModel):$/;"	c
UnknownModelError	spice/errors.py	/^class UnknownModelError(SpiceError):$/;"	c
Usage Examples	README.md	/^## Usage Examples$/;"	s	chapter:Spice
Using unknown models	README.md	/^### Using unknown models$/;"	S	section:Spice""Usage Examples
VALID_MIMETYPES	spice/spice_message.py	/^VALID_MIMETYPES = ["image\/jpeg", "image\/png", "image\/gif", "image\/webp"]$/;"	v
ValidatorStrategy	spice/retry_strategy/validator_strategy.py	/^class ValidatorStrategy(RetryStrategy):$/;"	c
Vision models	README.md	/^### Vision 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, input_cost=1)$/;"	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
WrappedTestClient	tests/conftest.py	/^class WrappedTestClient(WrappedClient):$/;"	c
_FakeWrappedOpenAIClient	spice/wrapped_clients.py	/^    class _FakeWrappedOpenAIClient(WrappedOpenAIClient):$/;"	c	class:WrappedAnthropicClient
__aiter__	spice/spice.py	/^    def __aiter__(self):$/;"	m	class:StreamingSpiceResponse
__anext__	spice/spice.py	/^    async def __anext__(self):$/;"	m	class:StreamingSpiceResponse
__init__	spice/retry_strategy/converter_strategy.py	/^    def __init__($/;"	m	class:ConverterStrategy
__init__	spice/retry_strategy/default_strategy.py	/^    def __init__($/;"	m	class:DefaultRetryStrategy
__init__	spice/retry_strategy/validator_strategy.py	/^    def __init__($/;"	m	class:ValidatorStrategy
__init__	spice/spice.py	/^    def __init__($/;"	m	class:Spice
__init__	spice/spice.py	/^    def __init__($/;"	m	class:StreamingSpiceResponse
__init__	spice/spice.py	/^    def __init__(self, result: Optional[T] = None, **kwargs):$/;"	m	class:SpiceResponse
__init__	spice/spice_message.py	/^    def __init__($/;"	m	class:SpiceMessage
__init__	spice/spice_message.py	/^    def __init__(self, client: Optional[Spice] = None, messages: Collection[SpiceMessage] = []):$/;"	m	class:SpiceMessages
__init__	spice/wrapped_clients.py	/^        def __init__(self):$/;"	m	class:WrappedAnthropicClient._FakeWrappedOpenAIClient
__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
__init__	tests/conftest.py	/^    def __init__(self, response: str | Iterator[str]):$/;"	m	class:WrappedTestClient
__post_init__	spice/models.py	/^    def __post_init__(self):$/;"	m	class:Model
__post_init__	spice/providers.py	/^    def __post_init__(self):$/;"	m	class:Provider
_anthropic_token_multiplier	spice/wrapped_clients.py	/^    _anthropic_token_multiplier = 1.25$/;"	v	class:WrappedAnthropicClient
_convert_messages	spice/wrapped_clients.py	/^    def _convert_messages($/;"	m	class:WrappedAnthropicClient	typeref:typename:Tuple[List[TextBlockParam],List[ConstrainedAnthropicMessageParam]]
_convert_messages	spice/wrapped_clients.py	/^    def _convert_messages(self, messages: Collection[SpiceMessage]) -> List[ChatCompletionMessag/;"	m	class:WrappedOpenAIClient	typeref:typename:List[ChatCompletionMessageParam]
_fake_openai_client	spice/wrapped_clients.py	/^    _fake_openai_client = _FakeWrappedOpenAIClient()$/;"	v	class:WrappedAnthropicClient
_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:$/;"	m	class:Spice	typeref:typename:EmbeddingModel
_get_encoding_for_model	spice/wrapped_clients.py	/^    def _get_encoding_for_model(self, model: Model | str) -> tiktoken.Encoding:$/;"	m	class:WrappedOpenAIClient	typeref:typename:tiktoken.Encoding
_get_model	spice/spice.py	/^    def _get_model(self, model: Model | str) -> Model:$/;"	m	class:Spice	typeref:typename:Model
_get_text_model	spice/spice.py	/^    def _get_text_model(self, model: Optional[Model | str]) -> TextModel:$/;"	m	class:Spice	typeref:typename:TextModel
_get_transcription_model	spice/spice.py	/^    def _get_transcription_model(self, model: Model | str) -> TranscriptionModel:$/;"	m	class:Spice	typeref:typename:TranscriptionModel
_load_toml_dict	spice/spice.py	/^    def _load_toml_dict(self, toml_dict: Dict[str, Any], name: str):$/;"	m	class:Spice
_log_prompts	spice/spice.py	/^    def _log_prompts(self):$/;"	m	class:Spice
_log_response	spice/spice.py	/^    def _log_response(self, response: SpiceResponse, name: Optional[str] = None):$/;"	m	class:Spice
_prompts_dirty	spice/spice.py	/^    _prompts_dirty = False$/;"	v	class:Spice
_spice_message_to_anthropic_block_param	spice/wrapped_clients.py	/^def _spice_message_to_anthropic_block_param(message: SpiceMessage) -> Union[TextBlockParam, Imag/;"	f	typeref:typename:Union[TextBlockParam,ImageBlockParam]
_spice_message_to_openai_content_part	spice/wrapped_clients.py	/^def _spice_message_to_openai_content_part($/;"	f	typeref:typename:Union[ChatCompletionContentPartTextParam,ChatCompletionContentPartImageParam]
accumulator	tests/test_spice.py	/^    def accumulator(text: str):$/;"	f	function:test_streaming_callback	file:
add_assistant_prompt	spice/spice_message.py	/^    def add_assistant_prompt(self, name: str, cache: bool = False, **context: Any) -> SpiceMessa/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_assistant_text	spice/spice_message.py	/^    def add_assistant_text(self, text: str, cache: bool = False) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_prompt	spice/spice_message.py	/^    def add_prompt(self, role: Role, name: str, cache: bool = False, **context: Any) -> SpiceMes/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_system_prompt	spice/spice_message.py	/^    def add_system_prompt(self, name: str, cache: bool = False, **context: Any) -> SpiceMessages/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_system_text	spice/spice_message.py	/^    def add_system_text(self, text: str, cache: bool = False) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_text	spice/spice_message.py	/^    def add_text(self, role: Role, text: str, cache: bool = False) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_user_image_from_file	spice/spice_message.py	/^    def add_user_image_from_file(self, file_path: Path | str, cache: bool = False) -> SpiceMessa/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_user_image_from_url	spice/spice_message.py	/^    def add_user_image_from_url(self, url: str, cache: bool = False) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_user_prompt	spice/spice_message.py	/^    def add_user_prompt(self, name: str, cache: bool = False, **context: Any) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
add_user_text	spice/spice_message.py	/^    def add_user_text(self, text: str, cache: bool = False) -> SpiceMessages:$/;"	m	class:SpiceMessages	typeref:typename:SpiceMessages
azure_example	scripts/run.py	/^async def azure_example():$/;"	f
basic_example	scripts/run.py	/^async def basic_example():$/;"	f
cache	scripts/caching.py	/^    cache = any(arg in sys.argv for arg in ["--cache", "-c"])$/;"	v
cache	spice/spice_message.py	/^    cache: bool = Field(default=False)$/;"	v	class:SpiceMessage	typeref:typename:bool
cache_creation_input_tokens	spice/spice.py	/^    cache_creation_input_tokens: int = Field($/;"	v	class:SpiceResponse	typeref:typename:int
cache_creation_input_tokens	spice/wrapped_clients.py	/^    cache_creation_input_tokens: Optional[int] = None$/;"	v	class:TextAndTokens	typeref:typename:Optional[int]
cache_read_input_tokens	spice/spice.py	/^    cache_read_input_tokens: int = Field($/;"	v	class:SpiceResponse	typeref:typename:int
cache_read_input_tokens	spice/wrapped_clients.py	/^    cache_read_input_tokens: Optional[int] = None$/;"	v	class:TextAndTokens	typeref:typename:Optional[int]
call_args	spice/spice.py	/^    call_args: SpiceCallArgs = Field($/;"	v	class:SpiceResponse	typeref:typename:SpiceCallArgs
callback	spice/spice.py	/^        def callback(response: SpiceResponse, cache: List[float] = [0]):$/;"	f	member:Spice.stream_response	file:
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
catch_and_convert_errors	tests/conftest.py	/^    def catch_and_convert_errors(self):$/;"	m	class:WrappedTestClient
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
completed	spice/spice.py	/^    completed: bool = Field($/;"	v	class:SpiceResponse	typeref:typename:bool
context_length	spice/models.py	/^    context_length: Optional[int] = field(default=None)$/;"	v	class:EmbeddingModel	typeref:typename:Optional[int]
context_length	spice/models.py	/^    context_length: Optional[int] = field(default=None)$/;"	v	class:Model	typeref:typename:Optional[int]
context_length	spice/models.py	/^    context_length: Optional[int] = field(default=None)$/;"	v	class:TextModel	typeref:typename:Optional[int]
convert_string_to_asynciter	tests/conftest.py	/^async def convert_string_to_asynciter($/;"	f	typeref:typename:AsyncIterator[ChatCompletionChunk]
copy	spice/spice_message.py	/^    def copy(self):$/;"	m	class:SpiceMessages
cost	spice/spice.py	/^    cost: Optional[float] = Field($/;"	v	class:SpiceResponse	typeref:typename:Optional[float]
count_messages_tokens	spice/wrapped_clients.py	/^    def count_messages_tokens(self, messages: Collection[SpiceMessage], model: Model | str) -> i/;"	m	class:WrappedAnthropicClient	typeref:typename:int
count_messages_tokens	spice/wrapped_clients.py	/^    def count_messages_tokens(self, messages: Collection[SpiceMessage], model: Model | str) -> i/;"	m	class:WrappedClient	typeref:typename:int
count_messages_tokens	spice/wrapped_clients.py	/^    def count_messages_tokens(self, messages: Collection[SpiceMessage], model: Model | str) -> i/;"	m	class:WrappedOpenAIClient	typeref:typename:int
count_messages_tokens	tests/conftest.py	/^    def count_messages_tokens(self, messages: Collection[SpiceMessage], model: Model | str) -> i/;"	m	class:WrappedTestClient	typeref:typename:int
count_prompt_tokens	spice/spice.py	/^    def count_prompt_tokens($/;"	m	class:Spice	typeref:typename:int
count_string_tokens	spice/wrapped_clients.py	/^    def count_string_tokens(self, message: str, model: Model | str, full_message: bool) -> int:$/;"	m	class:WrappedAnthropicClient	typeref:typename:int
count_string_tokens	spice/wrapped_clients.py	/^    def count_string_tokens(self, message: str, model: Model | str, full_message: bool) -> int:$/;"	m	class:WrappedClient	typeref:typename:int
count_string_tokens	spice/wrapped_clients.py	/^    def count_string_tokens(self, message: str, model: Model | str, full_message: bool) -> int:$/;"	m	class:WrappedOpenAIClient	typeref:typename:int
count_string_tokens	tests/conftest.py	/^    def count_string_tokens(self, message: str, model: Model | str, full_message: bool) -> int:$/;"	m	class:WrappedTestClient	typeref:typename:int
count_tokens	spice/spice.py	/^    def count_tokens($/;"	m	class:Spice	typeref:typename:int
current_response	spice/spice.py	/^    def current_response(self) -> SpiceResponse:$/;"	m	class:StreamingSpiceResponse	typeref:typename:SpiceResponse
decide	spice/retry_strategy/__init__.py	/^    def decide($/;"	m	class:RetryStrategy	typeref:typename:tuple[Behavior,SpiceCallArgs,T,str]
decide	spice/retry_strategy/converter_strategy.py	/^    def decide($/;"	m	class:ConverterStrategy	typeref:typename:tuple[Behavior,SpiceCallArgs,Any,str]
decide	spice/retry_strategy/default_strategy.py	/^    def decide($/;"	m	class:DefaultRetryStrategy	typeref:typename:tuple[Behavior,SpiceCallArgs,Any,str]
decide	spice/retry_strategy/validator_strategy.py	/^    def decide($/;"	m	class:ValidatorStrategy	typeref:typename:tuple[Behavior,SpiceCallArgs,Any,str]
default_failure_message	spice/retry_strategy/converter_strategy.py	/^def default_failure_message(message: str) -> str:$/;"	f	typeref:typename:str
default_failure_message	spice/retry_strategy/validator_strategy.py	/^def default_failure_message(message: str) -> str:$/;"	f	typeref:typename:str
display_response_stats	scripts/caching.py	/^def display_response_stats(response):$/;"	f
embeddings_and_transcription_example	scripts/run.py	/^async def embeddings_and_transcription_example():$/;"	f
embeddings_request_cost	spice/utils.py	/^def embeddings_request_cost(model: EmbeddingModel, input_tokens: int) -> Optional[float]:$/;"	f	typeref:typename:Optional[float]
equals_test	tests/test_spice.py	/^    def equals_test(response):$/;"	f	function:test_get_response_validator	file:
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion, call_args: SpiceCallArgs) -> TextAndToken/;"	m	class:WrappedClient	typeref:typename:TextAndTokens
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion, call_args: SpiceCallArgs):$/;"	m	class:WrappedAnthropicClient
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion, call_args: SpiceCallArgs):$/;"	m	class:WrappedOpenAIClient
extract_text_and_tokens	tests/conftest.py	/^    def extract_text_and_tokens(self, chat_completion, call_args: SpiceCallArgs) -> TextAndToken/;"	m	class:WrappedTestClient	typeref:typename:TextAndTokens
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_chat_completion_or_stream	tests/conftest.py	/^    async def get_chat_completion_or_stream($/;"	m	class:WrappedTestClient	typeref:typename:ChatCompletion|AsyncIterator[ChatCompletionChunk]
get_embeddings	spice/spice.py	/^    async def get_embeddings($/;"	m	class:Spice	typeref:typename:EmbeddingResponse
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	tests/conftest.py	/^    async def get_embeddings(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedTestClient	typeref:typename:List[List[float]]
get_embeddings_sync	spice/spice.py	/^    def get_embeddings_sync($/;"	m	class:Spice	typeref:typename:EmbeddingResponse
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_embeddings_sync	tests/conftest.py	/^    def get_embeddings_sync(self, input_texts: List[str], model: str) -> List[List[float]]:$/;"	m	class:WrappedTestClient	typeref:typename:List[List[float]]
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_prompt	spice/spice.py	/^    def get_prompt(self, name: str) -> str:$/;"	m	class:Spice	typeref:typename:str
get_provider_from_name	spice/providers.py	/^def get_provider_from_name(provider_name: str) -> Provider:$/;"	f	typeref:typename:Provider
get_rendered_prompt	spice/spice.py	/^    def get_rendered_prompt(self, name: str, **context: Any) -> str:$/;"	m	class:Spice	typeref:typename:str
get_response	spice/spice.py	/^    async def get_response($/;"	m	class:Spice	typeref:typename:SpiceResponse[T]
get_transcription	spice/spice.py	/^    async def get_transcription($/;"	m	class:Spice	typeref:typename:TranscriptionResponse
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> tuple[str, float]: ...$/;"	m	class:WrappedClient	typeref:typename:tuple[str,float]
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> tuple[str, float]:$/;"	m	class:WrappedAnthropicClient	typeref:typename:tuple[str,float]
get_transcription	spice/wrapped_clients.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> tuple[str, float]:$/;"	m	class:WrappedOpenAIClient	typeref:typename:tuple[str,float]
get_transcription	tests/conftest.py	/^    async def get_transcription(self, audio_path: Path, model: str) -> tuple[str, float]:$/;"	m	class:WrappedTestClient	typeref:typename:tuple[str,float]
input_cost	spice/models.py	/^    input_cost: Optional[int] = field(default=None)$/;"	v	class:EmbeddingModel	typeref:typename:Optional[int]
input_cost	spice/models.py	/^    input_cost: Optional[int] = field(default=None)$/;"	v	class:Model	typeref:typename:Optional[int]
input_cost	spice/models.py	/^    input_cost: Optional[int] = field(default=None)$/;"	v	class:TextModel	typeref:typename:Optional[int]
input_cost	spice/models.py	/^    input_cost: Optional[int] = field(default=None)$/;"	v	class:TranscriptionModel	typeref:typename:Optional[int]
input_tokens	spice/spice.py	/^    input_tokens: int = Field($/;"	v	class:SpiceResponse	typeref:typename:int
input_tokens	spice/wrapped_clients.py	/^    input_tokens: Optional[int] = None$/;"	v	class:TextAndTokens	typeref:typename:Optional[int]
load_dir	spice/spice.py	/^    def load_dir(self, dir_path: Path | str):$/;"	m	class:Spice
load_prompt	spice/spice.py	/^    def load_prompt(self, file_path: Path | str, name: Optional[str] = None):$/;"	m	class:Spice
load_provider	spice/spice.py	/^    def load_provider(self, provider: Provider | str):$/;"	m	class:Spice
load_toml_prompts	spice/spice.py	/^    def load_toml_prompts(self, file_path: Path | str, name: Optional[str] = None):$/;"	m	class:Spice
load_url	spice/spice.py	/^    def load_url(self, url: str, name: str):$/;"	m	class:Spice
max_tokens	spice/call_args.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
must_equal_valid	tests/test_spice.py	/^    def must_equal_valid(response):$/;"	f	function:test_validator_retry_strategy	file:
new_messages	spice/spice.py	/^    def new_messages(self) -> SpiceMessages:$/;"	m	class:Spice	typeref:typename:SpiceMessages
new_run	spice/spice.py	/^    def new_run(self, name: str):$/;"	m	class:Spice
output_cost	spice/models.py	/^    output_cost: Optional[int] = field(default=None)$/;"	v	class:Model	typeref:typename:Optional[int]
output_cost	spice/models.py	/^    output_cost: Optional[int] = field(default=None)$/;"	v	class:TextModel	typeref:typename:Optional[int]
output_tokens	spice/spice.py	/^    output_tokens: int = Field($/;"	v	class:SpiceResponse	typeref:typename:int
output_tokens	spice/wrapped_clients.py	/^    output_tokens: Optional[int] = None$/;"	v	class:TextAndTokens	typeref:typename:Optional[int]
print_stream	spice/utils.py	/^def print_stream(text: str) -> None:$/;"	f	typeref:typename:None
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk, call_args: SpiceCallArgs) -> TextAndTokens: ...$/;"	m	class:WrappedClient	typeref:typename:TextAndTokens
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk, call_args: SpiceCallArgs):$/;"	m	class:WrappedAnthropicClient
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk, call_args: SpiceCallArgs):$/;"	m	class:WrappedAzureClient
process_chunk	spice/wrapped_clients.py	/^    def process_chunk(self, chunk, call_args: SpiceCallArgs):$/;"	m	class:WrappedOpenAIClient
process_chunk	tests/conftest.py	/^    def process_chunk(self, chunk: ChatCompletionChunk, call_args: SpiceCallArgs) -> TextAndToke/;"	m	class:WrappedTestClient	typeref:typename:TextAndTokens
providers	spice/providers.py	/^providers: List[Provider] = []$/;"	v	typeref:typename:List[Provider]
response_format	spice/call_args.py	/^    response_format: Optional[ResponseFormat] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[ResponseFormat]
result	spice/spice.py	/^    def result(self) -> T:$/;"	m	class:SpiceResponse	typeref:typename:T
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_converter_retry_strategy	file:
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_get_response_converter	file:
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_get_response_validator	file:
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_streaming_callback	file:
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_validator_retry_strategy	file:
run	scripts/caching.py	/^async def run(cache: bool):$/;"	f
run_all_examples	scripts/run.py	/^async def run_all_examples():$/;"	f
speed_compare	scripts/timing.py	/^async def speed_compare():$/;"	f
store_prompt	spice/spice.py	/^    def store_prompt(self, prompt: str, name: str):$/;"	m	class:Spice
stream	spice/call_args.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
string_identity	spice/utils.py	/^def string_identity(x: str) -> str:$/;"	f	typeref:typename:str
temperature	spice/call_args.py	/^    temperature: Optional[float] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[float]
test_converter_retry_strategy	tests/test_spice.py	/^async def test_converter_retry_strategy():$/;"	f
test_get_response_converter	tests/test_spice.py	/^async def test_get_response_converter():$/;"	f
test_get_response_validator	tests/test_spice.py	/^async def test_get_response_validator():$/;"	f
test_streaming_callback	tests/test_spice.py	/^async def test_streaming_callback():$/;"	f
test_validator_retry_strategy	tests/test_spice.py	/^async def test_validator_retry_strategy():$/;"	f
text	spice/spice.py	/^    text: str = Field(description="""The total text sent by the model.""")$/;"	v	class:SpiceResponse	typeref:typename:str
text	spice/wrapped_clients.py	/^    text: Optional[str] = None$/;"	v	class:TextAndTokens	typeref:typename:Optional[str]
text_request_cost	spice/utils.py	/^def text_request_cost($/;"	f	typeref:typename:Optional[float]
timer	scripts/timing.py	/^from timeit import default_timer as timer$/;"	Y	nameref:unknown:default_timer
timer	spice/spice.py	/^from timeit import default_timer as timer$/;"	Y	nameref:unknown:default_timer
total_cost	spice/spice.py	/^    def total_cost(self) -> float:$/;"	m	class:Spice	typeref:typename:float
total_time	spice/spice.py	/^    total_time: float = Field($/;"	v	class:SpiceResponse	typeref:typename:float
total_tokens	spice/spice.py	/^    def total_tokens(self) -> int:$/;"	m	class:SpiceResponse	typeref:typename:int
transcription_request_cost	spice/utils.py	/^def transcription_request_cost(model: TranscriptionModel, input_length: float) -> Optional[float/;"	f	typeref:typename:Optional[float]
vision_example	scripts/run.py	/^async def vision_example():$/;"	f
