!_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
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
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
HAIKU	spice/models.py	/^HAIKU = CLAUDE_3_HAIKU_20240307$/;"	v
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
MessagesEncoder	spice/spice_message.py	/^class MessagesEncoder(JSONEncoder):$/;"	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(TypedDict):$/;"	c
Provider	spice/providers.py	/^class Provider:$/;"	c
SONNET	spice/models.py	/^SONNET = CLAUDE_3_SONNET_20240229$/;"	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
SpiceMessages	spice/spice_message.py	/^class SpiceMessages(UserList[SpiceMessage]):$/;"	c
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, 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
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
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
_MetadataDict	spice/spice_message.py	/^class _MetadataDict(dict):$/;"	c
__add__	spice/spice_message.py	/^    def __add__(self, other):$/;"	m	class:SpiceMessages
__aiter__	spice/spice.py	/^    def __aiter__(self):$/;"	m	class:StreamingSpiceResponse
__anext__	spice/spice.py	/^    async def __anext__(self):$/;"	m	class:StreamingSpiceResponse
__getitem__	spice/spice_message.py	/^    def __getitem__(self, i):  # pyright: ignore$/;"	m	class:SpiceMessages
__init__	spice/spice.py	/^    def __init__($/;"	m	class:Spice
__init__	spice/spice.py	/^    def __init__($/;"	m	class:StreamingSpiceResponse
__init__	spice/spice_message.py	/^    def __init__(self, client: Spice, initlist: Optional[Iterable[SpiceMessage]] = None):$/;"	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
__mul__	spice/spice_message.py	/^    def __mul__(self, n):$/;"	m	class:SpiceMessages
__post_init__	spice/models.py	/^    def __post_init__(self):$/;"	m	class:Model
__post_init__	spice/providers.py	/^    def __post_init__(self):$/;"	m	class:Provider
__radd__	spice/spice_message.py	/^    def __radd__(self, other):$/;"	m	class:SpiceMessages
_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[str,List[MessageParam]]
_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
accumulator	tests/test_spice.py	/^    def accumulator(text: str):$/;"	f	function:test_get_response	file:
add_assistant_message	spice/spice_message.py	/^    def add_assistant_message(self, content: str):$/;"	m	class:SpiceMessages
add_assistant_prompt	spice/spice_message.py	/^    def add_assistant_prompt(self, name: str, **context: Any):$/;"	m	class:SpiceMessages
add_file_image_message	spice/spice_message.py	/^    def add_file_image_message(self, file_path: Path | str):$/;"	m	class:SpiceMessages
add_http_image_message	spice/spice_message.py	/^    def add_http_image_message(self, url: str):$/;"	m	class:SpiceMessages
add_image_bytes_message	spice/spice_message.py	/^    def add_image_bytes_message(self, image_bytes: bytes, media_type: str):$/;"	m	class:SpiceMessages
add_system_message	spice/spice_message.py	/^    def add_system_message(self, content: str):$/;"	m	class:SpiceMessages
add_system_prompt	spice/spice_message.py	/^    def add_system_prompt(self, name: str, **context: Any):$/;"	m	class:SpiceMessages
add_user_message	spice/spice_message.py	/^    def add_user_message(self, content: str):$/;"	m	class:SpiceMessages
add_user_prompt	spice/spice_message.py	/^    def add_user_prompt(self, name: str, **context: Any):$/;"	m	class:SpiceMessages
assistant_message	spice/spice_message.py	/^def assistant_message(content: str) -> ChatCompletionAssistantMessageParam:$/;"	f	typeref:typename:ChatCompletionAssistantMessageParam
azure_example	scripts/run.py	/^async def azure_example():$/;"	f
basic_example	scripts/run.py	/^async def basic_example():$/;"	f
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
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]
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
default	spice/spice_message.py	/^    def default(self, o):$/;"	m	class:MessagesEncoder
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	file:
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion) -> tuple[str, int, int]: ...$/;"	m	class:WrappedClient	typeref:typename:tuple[str,int,int]
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion):$/;"	m	class:WrappedAnthropicClient
extract_text_and_tokens	spice/wrapped_clients.py	/^    def extract_text_and_tokens(self, chat_completion):$/;"	m	class:WrappedOpenAIClient
extract_text_and_tokens	tests/conftest.py	/^    def extract_text_and_tokens(self, chat_completion) -> tuple[str, int, int]:$/;"	m	class:WrappedTestClient	typeref:typename:tuple[str,int,int]
file_image_message	spice/spice_message.py	/^def file_image_message(file_path: Path | str) -> ChatCompletionUserMessageParam:$/;"	f	typeref:typename:ChatCompletionUserMessageParam
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
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]
http_image_message	spice/spice_message.py	/^def http_image_message(url: str) -> ChatCompletionUserMessageParam:$/;"	f	typeref:typename:ChatCompletionUserMessageParam
image_bytes_message	spice/spice_message.py	/^def image_bytes_message(image_bytes: bytes, media_type: str) -> ChatCompletionUserMessageParam:$/;"	f	typeref:typename:ChatCompletionUserMessageParam
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]
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/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
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]
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) -> 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
process_chunk	tests/conftest.py	/^    def process_chunk(self, chunk: ChatCompletionChunk) -> tuple[str, Optional[int], Optional[in/;"	m	class:WrappedTestClient	typeref:typename:tuple[str,Optional[int],Optional[int]]
providers	spice/providers.py	/^providers: List[Provider] = []$/;"	v	typeref:typename:List[Provider]
response_format	spice/spice.py	/^    response_format: Optional[ResponseFormat] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[ResponseFormat]
retries	spice/spice.py	/^    retries: int = 0$/;"	v	class:SpiceResponse	typeref:typename:int
return_wrapped_client	tests/test_spice.py	/^    def return_wrapped_client(model, provider):$/;"	f	function:test_get_response	file:
run_all_examples	scripts/run.py	/^async def run_all_examples():$/;"	f
store_prompt	spice/spice.py	/^    def store_prompt(self, prompt: str, name: str):$/;"	m	class:Spice
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
system_message	spice/spice_message.py	/^def system_message(content: str) -> ChatCompletionSystemMessageParam:$/;"	f	typeref:typename:ChatCompletionSystemMessageParam
temperature	spice/spice.py	/^    temperature: Optional[float] = None$/;"	v	class:SpiceCallArgs	typeref:typename:Optional[float]
test_get_response	tests/test_spice.py	/^async def test_get_response():$/;"	f
text_request_cost	spice/utils.py	/^def text_request_cost(model: TextModel, input_tokens: int, output_tokens: int) -> Optional[float/;"	f	typeref:typename:Optional[float]
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_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]
user_message	spice/spice_message.py	/^def user_message(content: str) -> ChatCompletionUserMessageParam:$/;"	f	typeref:typename:ChatCompletionUserMessageParam
vision_example	scripts/run.py	/^async def vision_example():$/;"	f
