mirascope 1.25.7__py3-none-any.whl → 2.0.0a0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mirascope/__init__.py +3 -59
- mirascope/graphs/__init__.py +22 -0
- mirascope/{experimental/graphs → graphs}/finite_state_machine.py +70 -159
- mirascope/llm/__init__.py +206 -16
- mirascope/llm/agents/__init__.py +15 -0
- mirascope/llm/agents/agent.py +97 -0
- mirascope/llm/agents/agent_template.py +45 -0
- mirascope/llm/agents/decorator.py +176 -0
- mirascope/llm/calls/__init__.py +16 -0
- mirascope/llm/calls/base_call.py +33 -0
- mirascope/llm/calls/calls.py +315 -0
- mirascope/llm/calls/decorator.py +255 -0
- mirascope/llm/clients/__init__.py +34 -0
- mirascope/llm/clients/anthropic/__init__.py +11 -0
- mirascope/llm/clients/anthropic/_utils/__init__.py +13 -0
- mirascope/llm/clients/anthropic/_utils/decode.py +244 -0
- mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
- mirascope/llm/clients/anthropic/clients.py +819 -0
- mirascope/llm/clients/anthropic/model_ids.py +8 -0
- mirascope/llm/clients/base/__init__.py +15 -0
- mirascope/llm/clients/base/_utils.py +192 -0
- mirascope/llm/clients/base/client.py +1256 -0
- mirascope/llm/clients/base/kwargs.py +12 -0
- mirascope/llm/clients/base/params.py +93 -0
- mirascope/llm/clients/google/__init__.py +6 -0
- mirascope/llm/clients/google/_utils/__init__.py +13 -0
- mirascope/llm/clients/google/_utils/decode.py +231 -0
- mirascope/llm/clients/google/_utils/encode.py +279 -0
- mirascope/llm/clients/google/clients.py +853 -0
- mirascope/llm/clients/google/message.py +7 -0
- mirascope/llm/clients/google/model_ids.py +15 -0
- mirascope/llm/clients/openai/__init__.py +25 -0
- mirascope/llm/clients/openai/completions/__init__.py +9 -0
- mirascope/llm/clients/openai/completions/_utils/__init__.py +13 -0
- mirascope/llm/clients/openai/completions/_utils/decode.py +187 -0
- mirascope/llm/clients/openai/completions/_utils/encode.py +358 -0
- mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
- mirascope/llm/clients/openai/completions/clients.py +833 -0
- mirascope/llm/clients/openai/completions/model_ids.py +8 -0
- mirascope/llm/clients/openai/responses/__init__.py +9 -0
- mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
- mirascope/llm/clients/openai/responses/_utils/decode.py +194 -0
- mirascope/llm/clients/openai/responses/_utils/encode.py +333 -0
- mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
- mirascope/llm/clients/openai/responses/clients.py +832 -0
- mirascope/llm/clients/openai/responses/model_ids.py +8 -0
- mirascope/llm/clients/openai/shared/__init__.py +7 -0
- mirascope/llm/clients/openai/shared/_utils.py +55 -0
- mirascope/llm/clients/providers.py +175 -0
- mirascope/llm/content/__init__.py +70 -0
- mirascope/llm/content/audio.py +173 -0
- mirascope/llm/content/document.py +94 -0
- mirascope/llm/content/image.py +206 -0
- mirascope/llm/content/text.py +47 -0
- mirascope/llm/content/thought.py +58 -0
- mirascope/llm/content/tool_call.py +63 -0
- mirascope/llm/content/tool_output.py +26 -0
- mirascope/llm/context/__init__.py +6 -0
- mirascope/llm/context/_utils.py +28 -0
- mirascope/llm/context/context.py +24 -0
- mirascope/llm/exceptions.py +105 -0
- mirascope/llm/formatting/__init__.py +22 -0
- mirascope/llm/formatting/_utils.py +74 -0
- mirascope/llm/formatting/format.py +104 -0
- mirascope/llm/formatting/from_call_args.py +30 -0
- mirascope/llm/formatting/partial.py +58 -0
- mirascope/llm/formatting/types.py +109 -0
- mirascope/llm/mcp/__init__.py +5 -0
- mirascope/llm/mcp/client.py +118 -0
- mirascope/llm/messages/__init__.py +32 -0
- mirascope/llm/messages/message.py +182 -0
- mirascope/llm/models/__init__.py +16 -0
- mirascope/llm/models/models.py +1243 -0
- mirascope/llm/prompts/__init__.py +33 -0
- mirascope/llm/prompts/_utils.py +60 -0
- mirascope/llm/prompts/decorator.py +286 -0
- mirascope/llm/prompts/protocols.py +99 -0
- mirascope/llm/responses/__init__.py +57 -0
- mirascope/llm/responses/_utils.py +56 -0
- mirascope/llm/responses/base_response.py +91 -0
- mirascope/llm/responses/base_stream_response.py +697 -0
- mirascope/llm/responses/finish_reason.py +27 -0
- mirascope/llm/responses/response.py +345 -0
- mirascope/llm/responses/root_response.py +177 -0
- mirascope/llm/responses/stream_response.py +572 -0
- mirascope/llm/responses/streams.py +363 -0
- mirascope/llm/tools/__init__.py +40 -0
- mirascope/llm/tools/_utils.py +25 -0
- mirascope/llm/tools/decorator.py +175 -0
- mirascope/llm/tools/protocols.py +96 -0
- mirascope/llm/tools/tool_schema.py +246 -0
- mirascope/llm/tools/toolkit.py +152 -0
- mirascope/llm/tools/tools.py +169 -0
- mirascope/llm/types/__init__.py +22 -0
- mirascope/llm/types/dataclass.py +9 -0
- mirascope/llm/types/jsonable.py +44 -0
- mirascope/llm/types/type_vars.py +19 -0
- mirascope-2.0.0a0.dist-info/METADATA +117 -0
- mirascope-2.0.0a0.dist-info/RECORD +101 -0
- mirascope/beta/__init__.py +0 -3
- mirascope/beta/openai/__init__.py +0 -17
- mirascope/beta/openai/realtime/__init__.py +0 -13
- mirascope/beta/openai/realtime/_utils/__init__.py +0 -3
- mirascope/beta/openai/realtime/_utils/_audio.py +0 -74
- mirascope/beta/openai/realtime/_utils/_protocols.py +0 -50
- mirascope/beta/openai/realtime/realtime.py +0 -500
- mirascope/beta/openai/realtime/recording.py +0 -98
- mirascope/beta/openai/realtime/tool.py +0 -113
- mirascope/beta/rag/__init__.py +0 -24
- mirascope/beta/rag/base/__init__.py +0 -22
- mirascope/beta/rag/base/chunkers/__init__.py +0 -2
- mirascope/beta/rag/base/chunkers/base_chunker.py +0 -37
- mirascope/beta/rag/base/chunkers/text_chunker.py +0 -33
- mirascope/beta/rag/base/config.py +0 -8
- mirascope/beta/rag/base/document.py +0 -11
- mirascope/beta/rag/base/embedders.py +0 -35
- mirascope/beta/rag/base/embedding_params.py +0 -18
- mirascope/beta/rag/base/embedding_response.py +0 -30
- mirascope/beta/rag/base/query_results.py +0 -7
- mirascope/beta/rag/base/vectorstore_params.py +0 -18
- mirascope/beta/rag/base/vectorstores.py +0 -37
- mirascope/beta/rag/chroma/__init__.py +0 -11
- mirascope/beta/rag/chroma/types.py +0 -62
- mirascope/beta/rag/chroma/vectorstores.py +0 -121
- mirascope/beta/rag/cohere/__init__.py +0 -11
- mirascope/beta/rag/cohere/embedders.py +0 -87
- mirascope/beta/rag/cohere/embedding_params.py +0 -29
- mirascope/beta/rag/cohere/embedding_response.py +0 -29
- mirascope/beta/rag/cohere/py.typed +0 -0
- mirascope/beta/rag/openai/__init__.py +0 -11
- mirascope/beta/rag/openai/embedders.py +0 -144
- mirascope/beta/rag/openai/embedding_params.py +0 -18
- mirascope/beta/rag/openai/embedding_response.py +0 -14
- mirascope/beta/rag/openai/py.typed +0 -0
- mirascope/beta/rag/pinecone/__init__.py +0 -19
- mirascope/beta/rag/pinecone/types.py +0 -143
- mirascope/beta/rag/pinecone/vectorstores.py +0 -148
- mirascope/beta/rag/weaviate/__init__.py +0 -6
- mirascope/beta/rag/weaviate/types.py +0 -92
- mirascope/beta/rag/weaviate/vectorstores.py +0 -103
- mirascope/core/__init__.py +0 -109
- mirascope/core/anthropic/__init__.py +0 -31
- mirascope/core/anthropic/_call.py +0 -67
- mirascope/core/anthropic/_call_kwargs.py +0 -13
- mirascope/core/anthropic/_thinking.py +0 -70
- mirascope/core/anthropic/_utils/__init__.py +0 -16
- mirascope/core/anthropic/_utils/_convert_common_call_params.py +0 -25
- mirascope/core/anthropic/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/anthropic/_utils/_convert_message_params.py +0 -102
- mirascope/core/anthropic/_utils/_get_json_output.py +0 -31
- mirascope/core/anthropic/_utils/_handle_stream.py +0 -113
- mirascope/core/anthropic/_utils/_message_param_converter.py +0 -154
- mirascope/core/anthropic/_utils/_setup_call.py +0 -146
- mirascope/core/anthropic/call_params.py +0 -44
- mirascope/core/anthropic/call_response.py +0 -226
- mirascope/core/anthropic/call_response_chunk.py +0 -152
- mirascope/core/anthropic/dynamic_config.py +0 -40
- mirascope/core/anthropic/py.typed +0 -0
- mirascope/core/anthropic/stream.py +0 -204
- mirascope/core/anthropic/tool.py +0 -101
- mirascope/core/azure/__init__.py +0 -31
- mirascope/core/azure/_call.py +0 -67
- mirascope/core/azure/_call_kwargs.py +0 -13
- mirascope/core/azure/_utils/__init__.py +0 -14
- mirascope/core/azure/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/azure/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -21
- mirascope/core/azure/_utils/_convert_message_params.py +0 -121
- mirascope/core/azure/_utils/_get_credential.py +0 -33
- mirascope/core/azure/_utils/_get_json_output.py +0 -27
- mirascope/core/azure/_utils/_handle_stream.py +0 -130
- mirascope/core/azure/_utils/_message_param_converter.py +0 -117
- mirascope/core/azure/_utils/_setup_call.py +0 -183
- mirascope/core/azure/call_params.py +0 -59
- mirascope/core/azure/call_response.py +0 -215
- mirascope/core/azure/call_response_chunk.py +0 -105
- mirascope/core/azure/dynamic_config.py +0 -30
- mirascope/core/azure/py.typed +0 -0
- mirascope/core/azure/stream.py +0 -147
- mirascope/core/azure/tool.py +0 -93
- mirascope/core/base/__init__.py +0 -86
- mirascope/core/base/_call_factory.py +0 -256
- mirascope/core/base/_create.py +0 -253
- mirascope/core/base/_extract.py +0 -175
- mirascope/core/base/_extract_with_tools.py +0 -189
- mirascope/core/base/_partial.py +0 -95
- mirascope/core/base/_utils/__init__.py +0 -92
- mirascope/core/base/_utils/_base_message_param_converter.py +0 -22
- mirascope/core/base/_utils/_base_type.py +0 -26
- mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -48
- mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
- mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -139
- mirascope/core/base/_utils/_convert_messages_to_message_params.py +0 -178
- mirascope/core/base/_utils/_convert_provider_finish_reason_to_finish_reason.py +0 -20
- mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
- mirascope/core/base/_utils/_extract_tool_return.py +0 -42
- mirascope/core/base/_utils/_fn_is_async.py +0 -24
- mirascope/core/base/_utils/_format_template.py +0 -32
- mirascope/core/base/_utils/_get_audio_type.py +0 -18
- mirascope/core/base/_utils/_get_common_usage.py +0 -20
- mirascope/core/base/_utils/_get_create_fn_or_async_create_fn.py +0 -137
- mirascope/core/base/_utils/_get_document_type.py +0 -7
- mirascope/core/base/_utils/_get_dynamic_configuration.py +0 -69
- mirascope/core/base/_utils/_get_fields_from_call_args.py +0 -34
- mirascope/core/base/_utils/_get_fn_args.py +0 -23
- mirascope/core/base/_utils/_get_image_dimensions.py +0 -39
- mirascope/core/base/_utils/_get_image_type.py +0 -26
- mirascope/core/base/_utils/_get_metadata.py +0 -17
- mirascope/core/base/_utils/_get_possible_user_message_param.py +0 -21
- mirascope/core/base/_utils/_get_prompt_template.py +0 -28
- mirascope/core/base/_utils/_get_template_values.py +0 -51
- mirascope/core/base/_utils/_get_template_variables.py +0 -38
- mirascope/core/base/_utils/_get_unsupported_tool_config_keys.py +0 -10
- mirascope/core/base/_utils/_is_prompt_template.py +0 -24
- mirascope/core/base/_utils/_json_mode_content.py +0 -17
- mirascope/core/base/_utils/_messages_decorator.py +0 -121
- mirascope/core/base/_utils/_parse_content_template.py +0 -323
- mirascope/core/base/_utils/_parse_prompt_messages.py +0 -63
- mirascope/core/base/_utils/_pil_image_to_bytes.py +0 -13
- mirascope/core/base/_utils/_protocols.py +0 -901
- mirascope/core/base/_utils/_setup_call.py +0 -79
- mirascope/core/base/_utils/_setup_extract_tool.py +0 -30
- mirascope/core/base/call_kwargs.py +0 -13
- mirascope/core/base/call_params.py +0 -36
- mirascope/core/base/call_response.py +0 -338
- mirascope/core/base/call_response_chunk.py +0 -130
- mirascope/core/base/dynamic_config.py +0 -82
- mirascope/core/base/from_call_args.py +0 -30
- mirascope/core/base/merge_decorators.py +0 -59
- mirascope/core/base/message_param.py +0 -175
- mirascope/core/base/messages.py +0 -116
- mirascope/core/base/metadata.py +0 -13
- mirascope/core/base/prompt.py +0 -497
- mirascope/core/base/response_model_config_dict.py +0 -9
- mirascope/core/base/stream.py +0 -479
- mirascope/core/base/stream_config.py +0 -11
- mirascope/core/base/structured_stream.py +0 -296
- mirascope/core/base/tool.py +0 -214
- mirascope/core/base/toolkit.py +0 -176
- mirascope/core/base/types.py +0 -344
- mirascope/core/bedrock/__init__.py +0 -34
- mirascope/core/bedrock/_call.py +0 -68
- mirascope/core/bedrock/_call_kwargs.py +0 -12
- mirascope/core/bedrock/_types.py +0 -104
- mirascope/core/bedrock/_utils/__init__.py +0 -14
- mirascope/core/bedrock/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/bedrock/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/bedrock/_utils/_convert_message_params.py +0 -111
- mirascope/core/bedrock/_utils/_get_json_output.py +0 -30
- mirascope/core/bedrock/_utils/_handle_stream.py +0 -104
- mirascope/core/bedrock/_utils/_message_param_converter.py +0 -172
- mirascope/core/bedrock/_utils/_setup_call.py +0 -258
- mirascope/core/bedrock/call_params.py +0 -38
- mirascope/core/bedrock/call_response.py +0 -248
- mirascope/core/bedrock/call_response_chunk.py +0 -111
- mirascope/core/bedrock/dynamic_config.py +0 -37
- mirascope/core/bedrock/py.typed +0 -0
- mirascope/core/bedrock/stream.py +0 -154
- mirascope/core/bedrock/tool.py +0 -100
- mirascope/core/cohere/__init__.py +0 -30
- mirascope/core/cohere/_call.py +0 -67
- mirascope/core/cohere/_call_kwargs.py +0 -11
- mirascope/core/cohere/_types.py +0 -20
- mirascope/core/cohere/_utils/__init__.py +0 -14
- mirascope/core/cohere/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/cohere/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -24
- mirascope/core/cohere/_utils/_convert_message_params.py +0 -32
- mirascope/core/cohere/_utils/_get_json_output.py +0 -30
- mirascope/core/cohere/_utils/_handle_stream.py +0 -35
- mirascope/core/cohere/_utils/_message_param_converter.py +0 -54
- mirascope/core/cohere/_utils/_setup_call.py +0 -150
- mirascope/core/cohere/call_params.py +0 -62
- mirascope/core/cohere/call_response.py +0 -205
- mirascope/core/cohere/call_response_chunk.py +0 -125
- mirascope/core/cohere/dynamic_config.py +0 -32
- mirascope/core/cohere/py.typed +0 -0
- mirascope/core/cohere/stream.py +0 -113
- mirascope/core/cohere/tool.py +0 -93
- mirascope/core/costs/__init__.py +0 -5
- mirascope/core/costs/_anthropic_calculate_cost.py +0 -219
- mirascope/core/costs/_azure_calculate_cost.py +0 -11
- mirascope/core/costs/_bedrock_calculate_cost.py +0 -15
- mirascope/core/costs/_cohere_calculate_cost.py +0 -44
- mirascope/core/costs/_gemini_calculate_cost.py +0 -67
- mirascope/core/costs/_google_calculate_cost.py +0 -427
- mirascope/core/costs/_groq_calculate_cost.py +0 -156
- mirascope/core/costs/_litellm_calculate_cost.py +0 -11
- mirascope/core/costs/_mistral_calculate_cost.py +0 -64
- mirascope/core/costs/_openai_calculate_cost.py +0 -416
- mirascope/core/costs/_vertex_calculate_cost.py +0 -67
- mirascope/core/costs/_xai_calculate_cost.py +0 -104
- mirascope/core/costs/calculate_cost.py +0 -86
- mirascope/core/gemini/__init__.py +0 -40
- mirascope/core/gemini/_call.py +0 -67
- mirascope/core/gemini/_call_kwargs.py +0 -12
- mirascope/core/gemini/_utils/__init__.py +0 -14
- mirascope/core/gemini/_utils/_convert_common_call_params.py +0 -39
- mirascope/core/gemini/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/gemini/_utils/_convert_message_params.py +0 -156
- mirascope/core/gemini/_utils/_get_json_output.py +0 -35
- mirascope/core/gemini/_utils/_handle_stream.py +0 -33
- mirascope/core/gemini/_utils/_message_param_converter.py +0 -209
- mirascope/core/gemini/_utils/_setup_call.py +0 -149
- mirascope/core/gemini/call_params.py +0 -52
- mirascope/core/gemini/call_response.py +0 -216
- mirascope/core/gemini/call_response_chunk.py +0 -100
- mirascope/core/gemini/dynamic_config.py +0 -26
- mirascope/core/gemini/stream.py +0 -120
- mirascope/core/gemini/tool.py +0 -104
- mirascope/core/google/__init__.py +0 -29
- mirascope/core/google/_call.py +0 -67
- mirascope/core/google/_call_kwargs.py +0 -13
- mirascope/core/google/_utils/__init__.py +0 -14
- mirascope/core/google/_utils/_convert_common_call_params.py +0 -38
- mirascope/core/google/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -27
- mirascope/core/google/_utils/_convert_message_params.py +0 -297
- mirascope/core/google/_utils/_get_json_output.py +0 -37
- mirascope/core/google/_utils/_handle_stream.py +0 -58
- mirascope/core/google/_utils/_message_param_converter.py +0 -200
- mirascope/core/google/_utils/_setup_call.py +0 -201
- mirascope/core/google/_utils/_validate_media_type.py +0 -58
- mirascope/core/google/call_params.py +0 -22
- mirascope/core/google/call_response.py +0 -255
- mirascope/core/google/call_response_chunk.py +0 -135
- mirascope/core/google/dynamic_config.py +0 -26
- mirascope/core/google/stream.py +0 -199
- mirascope/core/google/tool.py +0 -146
- mirascope/core/groq/__init__.py +0 -30
- mirascope/core/groq/_call.py +0 -67
- mirascope/core/groq/_call_kwargs.py +0 -13
- mirascope/core/groq/_utils/__init__.py +0 -14
- mirascope/core/groq/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/groq/_utils/_convert_message_params.py +0 -112
- mirascope/core/groq/_utils/_get_json_output.py +0 -27
- mirascope/core/groq/_utils/_handle_stream.py +0 -123
- mirascope/core/groq/_utils/_message_param_converter.py +0 -89
- mirascope/core/groq/_utils/_setup_call.py +0 -132
- mirascope/core/groq/call_params.py +0 -52
- mirascope/core/groq/call_response.py +0 -213
- mirascope/core/groq/call_response_chunk.py +0 -104
- mirascope/core/groq/dynamic_config.py +0 -29
- mirascope/core/groq/py.typed +0 -0
- mirascope/core/groq/stream.py +0 -135
- mirascope/core/groq/tool.py +0 -80
- mirascope/core/litellm/__init__.py +0 -28
- mirascope/core/litellm/_call.py +0 -67
- mirascope/core/litellm/_utils/__init__.py +0 -5
- mirascope/core/litellm/_utils/_setup_call.py +0 -109
- mirascope/core/litellm/call_params.py +0 -10
- mirascope/core/litellm/call_response.py +0 -24
- mirascope/core/litellm/call_response_chunk.py +0 -14
- mirascope/core/litellm/dynamic_config.py +0 -8
- mirascope/core/litellm/py.typed +0 -0
- mirascope/core/litellm/stream.py +0 -86
- mirascope/core/litellm/tool.py +0 -13
- mirascope/core/mistral/__init__.py +0 -36
- mirascope/core/mistral/_call.py +0 -65
- mirascope/core/mistral/_call_kwargs.py +0 -19
- mirascope/core/mistral/_utils/__init__.py +0 -14
- mirascope/core/mistral/_utils/_convert_common_call_params.py +0 -24
- mirascope/core/mistral/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -22
- mirascope/core/mistral/_utils/_convert_message_params.py +0 -122
- mirascope/core/mistral/_utils/_get_json_output.py +0 -34
- mirascope/core/mistral/_utils/_handle_stream.py +0 -139
- mirascope/core/mistral/_utils/_message_param_converter.py +0 -176
- mirascope/core/mistral/_utils/_setup_call.py +0 -164
- mirascope/core/mistral/call_params.py +0 -36
- mirascope/core/mistral/call_response.py +0 -205
- mirascope/core/mistral/call_response_chunk.py +0 -105
- mirascope/core/mistral/dynamic_config.py +0 -33
- mirascope/core/mistral/py.typed +0 -0
- mirascope/core/mistral/stream.py +0 -120
- mirascope/core/mistral/tool.py +0 -81
- mirascope/core/openai/__init__.py +0 -31
- mirascope/core/openai/_call.py +0 -67
- mirascope/core/openai/_call_kwargs.py +0 -13
- mirascope/core/openai/_utils/__init__.py +0 -14
- mirascope/core/openai/_utils/_convert_common_call_params.py +0 -26
- mirascope/core/openai/_utils/_convert_message_params.py +0 -148
- mirascope/core/openai/_utils/_get_json_output.py +0 -31
- mirascope/core/openai/_utils/_handle_stream.py +0 -138
- mirascope/core/openai/_utils/_message_param_converter.py +0 -105
- mirascope/core/openai/_utils/_setup_call.py +0 -155
- mirascope/core/openai/call_params.py +0 -92
- mirascope/core/openai/call_response.py +0 -273
- mirascope/core/openai/call_response_chunk.py +0 -139
- mirascope/core/openai/dynamic_config.py +0 -34
- mirascope/core/openai/py.typed +0 -0
- mirascope/core/openai/stream.py +0 -185
- mirascope/core/openai/tool.py +0 -101
- mirascope/core/py.typed +0 -0
- mirascope/core/vertex/__init__.py +0 -45
- mirascope/core/vertex/_call.py +0 -62
- mirascope/core/vertex/_call_kwargs.py +0 -12
- mirascope/core/vertex/_utils/__init__.py +0 -14
- mirascope/core/vertex/_utils/_convert_common_call_params.py +0 -37
- mirascope/core/vertex/_utils/_convert_finish_reason_to_common_finish_reasons.py +0 -23
- mirascope/core/vertex/_utils/_convert_message_params.py +0 -171
- mirascope/core/vertex/_utils/_get_json_output.py +0 -36
- mirascope/core/vertex/_utils/_handle_stream.py +0 -33
- mirascope/core/vertex/_utils/_message_param_converter.py +0 -133
- mirascope/core/vertex/_utils/_setup_call.py +0 -160
- mirascope/core/vertex/call_params.py +0 -24
- mirascope/core/vertex/call_response.py +0 -206
- mirascope/core/vertex/call_response_chunk.py +0 -99
- mirascope/core/vertex/dynamic_config.py +0 -28
- mirascope/core/vertex/stream.py +0 -119
- mirascope/core/vertex/tool.py +0 -101
- mirascope/core/xai/__init__.py +0 -28
- mirascope/core/xai/_call.py +0 -67
- mirascope/core/xai/_utils/__init__.py +0 -5
- mirascope/core/xai/_utils/_setup_call.py +0 -113
- mirascope/core/xai/call_params.py +0 -10
- mirascope/core/xai/call_response.py +0 -16
- mirascope/core/xai/call_response_chunk.py +0 -14
- mirascope/core/xai/dynamic_config.py +0 -8
- mirascope/core/xai/py.typed +0 -0
- mirascope/core/xai/stream.py +0 -57
- mirascope/core/xai/tool.py +0 -13
- mirascope/experimental/graphs/__init__.py +0 -5
- mirascope/integrations/__init__.py +0 -16
- mirascope/integrations/_middleware_factory.py +0 -403
- mirascope/integrations/langfuse/__init__.py +0 -3
- mirascope/integrations/langfuse/_utils.py +0 -114
- mirascope/integrations/langfuse/_with_langfuse.py +0 -70
- mirascope/integrations/logfire/__init__.py +0 -3
- mirascope/integrations/logfire/_utils.py +0 -225
- mirascope/integrations/logfire/_with_logfire.py +0 -63
- mirascope/integrations/otel/__init__.py +0 -10
- mirascope/integrations/otel/_utils.py +0 -270
- mirascope/integrations/otel/_with_hyperdx.py +0 -60
- mirascope/integrations/otel/_with_otel.py +0 -59
- mirascope/integrations/tenacity.py +0 -14
- mirascope/llm/_call.py +0 -401
- mirascope/llm/_context.py +0 -384
- mirascope/llm/_override.py +0 -3639
- mirascope/llm/_protocols.py +0 -500
- mirascope/llm/_response_metaclass.py +0 -31
- mirascope/llm/call_response.py +0 -158
- mirascope/llm/call_response_chunk.py +0 -66
- mirascope/llm/stream.py +0 -162
- mirascope/llm/tool.py +0 -64
- mirascope/mcp/__init__.py +0 -7
- mirascope/mcp/_utils.py +0 -288
- mirascope/mcp/client.py +0 -167
- mirascope/mcp/server.py +0 -356
- mirascope/mcp/tools.py +0 -110
- mirascope/py.typed +0 -0
- mirascope/retries/__init__.py +0 -11
- mirascope/retries/fallback.py +0 -131
- mirascope/retries/tenacity.py +0 -50
- mirascope/tools/__init__.py +0 -37
- mirascope/tools/base.py +0 -98
- mirascope/tools/system/__init__.py +0 -0
- mirascope/tools/system/_docker_operation.py +0 -166
- mirascope/tools/system/_file_system.py +0 -267
- mirascope/tools/web/__init__.py +0 -0
- mirascope/tools/web/_duckduckgo.py +0 -111
- mirascope/tools/web/_httpx.py +0 -125
- mirascope/tools/web/_parse_url_content.py +0 -94
- mirascope/tools/web/_requests.py +0 -54
- mirascope/v0/__init__.py +0 -43
- mirascope/v0/anthropic.py +0 -54
- mirascope/v0/base/__init__.py +0 -12
- mirascope/v0/base/calls.py +0 -118
- mirascope/v0/base/extractors.py +0 -122
- mirascope/v0/base/ops_utils.py +0 -207
- mirascope/v0/base/prompts.py +0 -48
- mirascope/v0/base/types.py +0 -14
- mirascope/v0/base/utils.py +0 -21
- mirascope/v0/openai.py +0 -54
- mirascope-1.25.7.dist-info/METADATA +0 -169
- mirascope-1.25.7.dist-info/RECORD +0 -378
- {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/WHEEL +0 -0
- {mirascope-1.25.7.dist-info → mirascope-2.0.0a0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"""Types for interacting with Weaviate using Mirascope."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from typing import Any, Literal
|
|
6
|
-
|
|
7
|
-
import weaviate.types as wt
|
|
8
|
-
from pydantic import BaseModel, ConfigDict
|
|
9
|
-
|
|
10
|
-
from ..base.document import Document
|
|
11
|
-
from ..base.vectorstore_params import BaseVectorStoreParams
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class WeaviateSettings(BaseModel):
|
|
15
|
-
mode: Literal["local", "cloud", "custom", "embedded"] = "local"
|
|
16
|
-
headers: dict[str, str] | None = None
|
|
17
|
-
cluster_url: str | None = None
|
|
18
|
-
auth_credentials: Any | None = None
|
|
19
|
-
hostname: str | None = None
|
|
20
|
-
port: int | None = None
|
|
21
|
-
grpc_port: int | None = None
|
|
22
|
-
additional_config: Any | None = None
|
|
23
|
-
version: str | None = None
|
|
24
|
-
persistence_data_path: str | None = None
|
|
25
|
-
binary_path: str | None = None
|
|
26
|
-
environment_variables: dict[str, str] | None = None
|
|
27
|
-
http_host: str | None = None
|
|
28
|
-
http_port: int | None = None
|
|
29
|
-
http_secure: bool | None = None
|
|
30
|
-
grpc_host: str | None = None
|
|
31
|
-
grpc_secure: bool | None = None
|
|
32
|
-
|
|
33
|
-
skip_init_checks: bool | None = None
|
|
34
|
-
|
|
35
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
36
|
-
|
|
37
|
-
def kwargs(self) -> dict[str, Any]:
|
|
38
|
-
kwargs = {}
|
|
39
|
-
exclude = {"mode"}
|
|
40
|
-
if self.auth_credentials:
|
|
41
|
-
kwargs["auth_credentials"] = self.auth_credentials
|
|
42
|
-
exclude.add("auth_credentials")
|
|
43
|
-
if self.additional_config:
|
|
44
|
-
kwargs["additional_config"] = self.additional_config
|
|
45
|
-
exclude.add("additional_config")
|
|
46
|
-
additional_kwargs = {
|
|
47
|
-
key: value
|
|
48
|
-
for key, value in self.model_dump(exclude=exclude).items()
|
|
49
|
-
if value is not None
|
|
50
|
-
}
|
|
51
|
-
kwargs.update(additional_kwargs)
|
|
52
|
-
return kwargs
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
class WeaviateParams(BaseVectorStoreParams):
|
|
56
|
-
vectorizer_config: Any | None = None
|
|
57
|
-
generative_config: Any | None = None
|
|
58
|
-
|
|
59
|
-
def kwargs(self) -> dict[str, Any]:
|
|
60
|
-
kwargs = {}
|
|
61
|
-
exclude = set()
|
|
62
|
-
if self.vectorizer_config:
|
|
63
|
-
kwargs["vectorizer_config"] = self.vectorizer_config
|
|
64
|
-
exclude = {"vectorizer_config"}
|
|
65
|
-
additional_kwargs = {
|
|
66
|
-
key: value
|
|
67
|
-
for key, value in self.model_dump(exclude=exclude).items()
|
|
68
|
-
if value is not None
|
|
69
|
-
}
|
|
70
|
-
kwargs.update(additional_kwargs)
|
|
71
|
-
return kwargs
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
class WeaviateQueryResult(BaseModel):
|
|
75
|
-
id: wt.UUID
|
|
76
|
-
documents: list[Document] | None
|
|
77
|
-
metadata: dict[str, Any]
|
|
78
|
-
collection: str | None = None
|
|
79
|
-
|
|
80
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
81
|
-
|
|
82
|
-
def from_response(response_object) -> WeaviateQueryResult:
|
|
83
|
-
model_dict = {}
|
|
84
|
-
id = str(response_object.uuid)
|
|
85
|
-
text = response_object.properties["text"]
|
|
86
|
-
model_dict["id"] = id
|
|
87
|
-
doc = Document(id=id, text=text)
|
|
88
|
-
model_dict["documents"] = [doc]
|
|
89
|
-
model_dict["metadata"] = response_object.metadata.__dict__
|
|
90
|
-
model_dict["collection"] = response_object.collection
|
|
91
|
-
|
|
92
|
-
return WeaviateQueryResult.model_validate(model_dict)
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
from functools import cached_property
|
|
2
|
-
from typing import Any, ClassVar
|
|
3
|
-
|
|
4
|
-
import weaviate
|
|
5
|
-
import weaviate.classes as wvc
|
|
6
|
-
from weaviate import WeaviateClient
|
|
7
|
-
from weaviate.collections.collection import Collection
|
|
8
|
-
|
|
9
|
-
from ..base.document import Document
|
|
10
|
-
from ..base.vectorstores import BaseVectorStore
|
|
11
|
-
from .types import (
|
|
12
|
-
WeaviateParams,
|
|
13
|
-
WeaviateQueryResult,
|
|
14
|
-
WeaviateSettings,
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class WeaviateVectorStore(BaseVectorStore):
|
|
19
|
-
"""A vectorstore for Weaviate.
|
|
20
|
-
|
|
21
|
-
Example:
|
|
22
|
-
|
|
23
|
-
```python
|
|
24
|
-
from mirascope.beta.rag.weaviate.types import WeaviateSettings, WeaviateParams
|
|
25
|
-
from mirascope.beta.rag.weaviate import WeaviateVectorStore
|
|
26
|
-
from mirascope.beta.rag import TextChunker
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class MyStore(WeaviateVectorStore):
|
|
30
|
-
chunker = TextChunker(chunk_size=1000, chunk_overlap=200)
|
|
31
|
-
index_name = "my-store-0001"
|
|
32
|
-
client_settings = WeaviateSettings()
|
|
33
|
-
|
|
34
|
-
my_store = MyStore()
|
|
35
|
-
with open(f"{PATH_TO_FILE}") as file:
|
|
36
|
-
data = file.read()
|
|
37
|
-
my_store.add(data)
|
|
38
|
-
properties = my_store.retrieve("my question").properties
|
|
39
|
-
print(documents)
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
_provider: ClassVar[str] = "weaviate"
|
|
43
|
-
vectorstore_params = WeaviateParams()
|
|
44
|
-
client_settings: ClassVar[WeaviateSettings] = WeaviateSettings()
|
|
45
|
-
|
|
46
|
-
def add(self, text: str | list[Document], **kwargs: Any) -> None: # noqa: ANN401
|
|
47
|
-
"""Takes unstructured data and inserts into vectorstore"""
|
|
48
|
-
documents: list[Document]
|
|
49
|
-
if isinstance(text, str):
|
|
50
|
-
chunk = self.chunker.chunk
|
|
51
|
-
documents = chunk(text)
|
|
52
|
-
else:
|
|
53
|
-
documents = text
|
|
54
|
-
|
|
55
|
-
if len(documents) < 2:
|
|
56
|
-
return self._index.data.insert(
|
|
57
|
-
properties={"text": documents[0].text}, uuid=documents[0].id, **kwargs
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
data_objects = []
|
|
61
|
-
for document in documents:
|
|
62
|
-
data_object = wvc.data.DataObject(
|
|
63
|
-
properties={"text": document.text}, uuid=document.id
|
|
64
|
-
)
|
|
65
|
-
data_objects.append(data_object)
|
|
66
|
-
|
|
67
|
-
return self._index.data.insert_many(data_objects)
|
|
68
|
-
|
|
69
|
-
def retrieve(self, text: str, **kwargs: Any) -> WeaviateQueryResult: # noqa: ANN401
|
|
70
|
-
"""Queries the vectorstore for closest match"""
|
|
71
|
-
query_result = self._index.query.near_text(query=text, **kwargs)
|
|
72
|
-
result = query_result.objects[0]
|
|
73
|
-
|
|
74
|
-
return WeaviateQueryResult.from_response(result)
|
|
75
|
-
|
|
76
|
-
def close_connection(self) -> None:
|
|
77
|
-
self._client.close()
|
|
78
|
-
|
|
79
|
-
############################# PRIVATE PROPERTIES #################################
|
|
80
|
-
|
|
81
|
-
@cached_property
|
|
82
|
-
def _client(self) -> WeaviateClient:
|
|
83
|
-
if self.client_settings.mode == "local":
|
|
84
|
-
return weaviate.connect_to_local(**self.client_settings.kwargs())
|
|
85
|
-
elif self.client_settings.mode == "embedded":
|
|
86
|
-
return weaviate.connect_to_embedded(**self.client_settings.kwargs())
|
|
87
|
-
elif self.client_settings.mode == "cloud":
|
|
88
|
-
return weaviate.connect_to_weaviate_cloud(**self.client_settings.kwargs())
|
|
89
|
-
elif self.client_settings.mode == "custom":
|
|
90
|
-
return weaviate.connect_to_custom(**self.client_settings.kwargs())
|
|
91
|
-
|
|
92
|
-
@cached_property
|
|
93
|
-
def _index(self) -> Collection:
|
|
94
|
-
vectorstore_params = self.vectorstore_params
|
|
95
|
-
|
|
96
|
-
if self.index_name:
|
|
97
|
-
vectorstore_params = self.vectorstore_params.model_copy(
|
|
98
|
-
update={"name": self.index_name}
|
|
99
|
-
)
|
|
100
|
-
if self._client.collections.exists(self.index_name):
|
|
101
|
-
return self._client.collections.get(self.index_name)
|
|
102
|
-
|
|
103
|
-
return self._client.collections.create(**vectorstore_params.kwargs())
|
mirascope/core/__init__.py
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Core Functionality."""
|
|
2
|
-
|
|
3
|
-
from contextlib import suppress
|
|
4
|
-
|
|
5
|
-
from . import base, costs
|
|
6
|
-
from .base import (
|
|
7
|
-
AudioPart,
|
|
8
|
-
AudioURLPart,
|
|
9
|
-
BaseCallResponse,
|
|
10
|
-
BaseDynamicConfig,
|
|
11
|
-
BaseMessageParam,
|
|
12
|
-
BasePrompt,
|
|
13
|
-
BaseStream,
|
|
14
|
-
BaseTool,
|
|
15
|
-
BaseToolKit,
|
|
16
|
-
CacheControlPart,
|
|
17
|
-
CostMetadata,
|
|
18
|
-
DocumentPart,
|
|
19
|
-
DocumentURLPart,
|
|
20
|
-
FromCallArgs,
|
|
21
|
-
ImagePart,
|
|
22
|
-
ImageURLPart,
|
|
23
|
-
LocalProvider,
|
|
24
|
-
Messages,
|
|
25
|
-
Provider,
|
|
26
|
-
ResponseModelConfigDict,
|
|
27
|
-
TextPart,
|
|
28
|
-
ToolCallPart,
|
|
29
|
-
ToolResultPart,
|
|
30
|
-
merge_decorators,
|
|
31
|
-
metadata,
|
|
32
|
-
prompt_template,
|
|
33
|
-
toolkit_tool,
|
|
34
|
-
)
|
|
35
|
-
from .costs import calculate_cost
|
|
36
|
-
|
|
37
|
-
with suppress(ImportError):
|
|
38
|
-
from . import anthropic as anthropic
|
|
39
|
-
|
|
40
|
-
with suppress(ImportError):
|
|
41
|
-
from . import cohere as cohere
|
|
42
|
-
|
|
43
|
-
with suppress(ImportError):
|
|
44
|
-
from . import google as google
|
|
45
|
-
|
|
46
|
-
with suppress(ImportError):
|
|
47
|
-
from . import gemini as gemini
|
|
48
|
-
|
|
49
|
-
with suppress(ImportError):
|
|
50
|
-
from . import groq as groq
|
|
51
|
-
|
|
52
|
-
with suppress(ImportError):
|
|
53
|
-
from . import litellm as litellm
|
|
54
|
-
|
|
55
|
-
with suppress(ImportError):
|
|
56
|
-
from . import mistral as mistral
|
|
57
|
-
|
|
58
|
-
with suppress(ImportError):
|
|
59
|
-
from . import openai as openai
|
|
60
|
-
|
|
61
|
-
with suppress(ImportError):
|
|
62
|
-
from . import vertex as vertex
|
|
63
|
-
|
|
64
|
-
with suppress(ImportError):
|
|
65
|
-
from . import azure as azure
|
|
66
|
-
|
|
67
|
-
__all__ = [
|
|
68
|
-
"AudioPart",
|
|
69
|
-
"AudioURLPart",
|
|
70
|
-
"BaseCallResponse",
|
|
71
|
-
"BaseCallResponse",
|
|
72
|
-
"BaseDynamicConfig",
|
|
73
|
-
"BaseMessageParam",
|
|
74
|
-
"BasePrompt",
|
|
75
|
-
"BaseStream",
|
|
76
|
-
"BaseTool",
|
|
77
|
-
"BaseToolKit",
|
|
78
|
-
"CacheControlPart",
|
|
79
|
-
"CostMetadata",
|
|
80
|
-
"DocumentPart",
|
|
81
|
-
"DocumentURLPart",
|
|
82
|
-
"FromCallArgs",
|
|
83
|
-
"ImagePart",
|
|
84
|
-
"ImageURLPart",
|
|
85
|
-
"LocalProvider",
|
|
86
|
-
"Messages",
|
|
87
|
-
"Provider",
|
|
88
|
-
"ResponseModelConfigDict",
|
|
89
|
-
"TextPart",
|
|
90
|
-
"ToolCallPart",
|
|
91
|
-
"ToolResultPart",
|
|
92
|
-
"anthropic",
|
|
93
|
-
"azure",
|
|
94
|
-
"base",
|
|
95
|
-
"calculate_cost",
|
|
96
|
-
"cohere",
|
|
97
|
-
"costs",
|
|
98
|
-
"gemini",
|
|
99
|
-
"google",
|
|
100
|
-
"groq",
|
|
101
|
-
"litellm",
|
|
102
|
-
"merge_decorators",
|
|
103
|
-
"metadata",
|
|
104
|
-
"mistral",
|
|
105
|
-
"openai",
|
|
106
|
-
"prompt_template",
|
|
107
|
-
"toolkit_tool",
|
|
108
|
-
"vertex",
|
|
109
|
-
]
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Anthropic Module."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeAlias
|
|
4
|
-
|
|
5
|
-
from anthropic.types import MessageParam
|
|
6
|
-
|
|
7
|
-
from ..base import BaseMessageParam
|
|
8
|
-
from ._call import anthropic_call
|
|
9
|
-
from ._call import anthropic_call as call
|
|
10
|
-
from .call_params import AnthropicCallParams
|
|
11
|
-
from .call_response import AnthropicCallResponse
|
|
12
|
-
from .call_response_chunk import AnthropicCallResponseChunk
|
|
13
|
-
from .dynamic_config import AnthropicDynamicConfig, AsyncAnthropicDynamicConfig
|
|
14
|
-
from .stream import AnthropicStream
|
|
15
|
-
from .tool import AnthropicTool, AnthropicToolConfig
|
|
16
|
-
|
|
17
|
-
AnthropicMessageParam: TypeAlias = MessageParam | BaseMessageParam
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
"AnthropicCallParams",
|
|
21
|
-
"AnthropicCallResponse",
|
|
22
|
-
"AnthropicCallResponseChunk",
|
|
23
|
-
"AnthropicDynamicConfig",
|
|
24
|
-
"AnthropicMessageParam",
|
|
25
|
-
"AnthropicStream",
|
|
26
|
-
"AnthropicTool",
|
|
27
|
-
"AnthropicToolConfig",
|
|
28
|
-
"AsyncAnthropicDynamicConfig",
|
|
29
|
-
"anthropic_call",
|
|
30
|
-
"call",
|
|
31
|
-
]
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"""The `anthropic_call` decorator for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from ..base import call_factory
|
|
4
|
-
from ._utils import (
|
|
5
|
-
get_json_output,
|
|
6
|
-
handle_stream,
|
|
7
|
-
handle_stream_async,
|
|
8
|
-
setup_call,
|
|
9
|
-
)
|
|
10
|
-
from .call_params import AnthropicCallParams
|
|
11
|
-
from .call_response import AnthropicCallResponse
|
|
12
|
-
from .call_response_chunk import AnthropicCallResponseChunk
|
|
13
|
-
from .stream import AnthropicStream
|
|
14
|
-
from .tool import AnthropicTool
|
|
15
|
-
|
|
16
|
-
anthropic_call = call_factory(
|
|
17
|
-
TCallResponse=AnthropicCallResponse,
|
|
18
|
-
TCallResponseChunk=AnthropicCallResponseChunk,
|
|
19
|
-
TStream=AnthropicStream,
|
|
20
|
-
TToolType=AnthropicTool,
|
|
21
|
-
default_call_params=AnthropicCallParams(max_tokens=1024),
|
|
22
|
-
setup_call=setup_call,
|
|
23
|
-
get_json_output=get_json_output,
|
|
24
|
-
handle_stream=handle_stream,
|
|
25
|
-
handle_stream_async=handle_stream_async,
|
|
26
|
-
)
|
|
27
|
-
"""A decorator for calling the Anthropic API with a typed function.
|
|
28
|
-
|
|
29
|
-
usage docs: learn/calls.md
|
|
30
|
-
|
|
31
|
-
This decorator is used to wrap a typed function that calls the Anthropic API. It
|
|
32
|
-
parses the prompt template of the wrapped function as the messages array and templates
|
|
33
|
-
the input arguments for the function into each message's template.
|
|
34
|
-
|
|
35
|
-
Example:
|
|
36
|
-
|
|
37
|
-
```python
|
|
38
|
-
from mirascope.core import prompt_template
|
|
39
|
-
from mirascope.core.anthropic import anthropic_call
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@anthropic_call("claude-3-5-sonnet-20240620")
|
|
43
|
-
def recommend_book(genre: str) -> str:
|
|
44
|
-
return f"Recommend a {genre} book"
|
|
45
|
-
|
|
46
|
-
response = recommend_book("fantasy")
|
|
47
|
-
print(response.content)
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Args:
|
|
51
|
-
model (str): The Anthropic model to use in the API call.
|
|
52
|
-
stream (bool): Whether to stream the response from the API call.
|
|
53
|
-
tools (list[BaseTool | Callable]): The tools to use in the Anthropic API call.
|
|
54
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
55
|
-
should be structured.
|
|
56
|
-
output_parser (Callable[[AnthropicCallResponse | ResponseModelT], Any]): A function
|
|
57
|
-
for parsing the call response whose value will be returned in place of the
|
|
58
|
-
original call response.
|
|
59
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
60
|
-
client (object): An optional custom client to use in place of the default client.
|
|
61
|
-
call_params (AnthropicCallParams): The `AnthropicCallParams` call parameters to use
|
|
62
|
-
in the API call.
|
|
63
|
-
|
|
64
|
-
Returns:
|
|
65
|
-
decorator (Callable): The decorator for turning a typed function into an Anthropic
|
|
66
|
-
API call.
|
|
67
|
-
"""
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""This module contains the type definition for the Anthropic call keyword arguments."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import Sequence
|
|
4
|
-
|
|
5
|
-
from anthropic.types import MessageParam, ToolParam
|
|
6
|
-
|
|
7
|
-
from ..base import BaseCallKwargs
|
|
8
|
-
from .call_params import AnthropicCallParams
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class AnthropicCallKwargs(AnthropicCallParams, BaseCallKwargs[ToolParam]):
|
|
12
|
-
model: str
|
|
13
|
-
messages: Sequence[MessageParam]
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"""Centralized thinking-related imports and compatibility handling for Anthropic."""
|
|
2
|
-
|
|
3
|
-
from typing import TYPE_CHECKING, Literal
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel
|
|
6
|
-
from typing_extensions import TypedDict
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# Always define the stubs with underscore names
|
|
10
|
-
class _ThinkingConfigParam(TypedDict):
|
|
11
|
-
type: Literal["enabled"]
|
|
12
|
-
budget_tokens: int
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class _ThinkingBlock(BaseModel):
|
|
16
|
-
signature: str
|
|
17
|
-
thinking: str
|
|
18
|
-
type: Literal["thinking"]
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class _ThinkingDelta(BaseModel):
|
|
22
|
-
thinking: str
|
|
23
|
-
type: Literal["thinking_delta"]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class _SignatureDelta(BaseModel):
|
|
27
|
-
signature: str
|
|
28
|
-
type: Literal["signature_delta"]
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
HAS_THINKING_SUPPORT = True
|
|
32
|
-
|
|
33
|
-
# Define the public names based on what's available
|
|
34
|
-
if TYPE_CHECKING:
|
|
35
|
-
# For static analysis, always use our stubs so types are consistent
|
|
36
|
-
ThinkingConfigParam = _ThinkingConfigParam
|
|
37
|
-
ThinkingBlock = _ThinkingBlock
|
|
38
|
-
ThinkingDelta = _ThinkingDelta
|
|
39
|
-
SignatureDelta = _SignatureDelta
|
|
40
|
-
else:
|
|
41
|
-
# At runtime, use real types if available, otherwise stubs
|
|
42
|
-
try:
|
|
43
|
-
from anthropic.types import ( # pyright: ignore [reportAttributeAccessIssue]
|
|
44
|
-
ThinkingBlock,
|
|
45
|
-
ThinkingDelta,
|
|
46
|
-
)
|
|
47
|
-
from anthropic.types.signature_delta import (
|
|
48
|
-
SignatureDelta, # pyright: ignore [reportMissingImports]
|
|
49
|
-
)
|
|
50
|
-
from anthropic.types.thinking_config_param import (
|
|
51
|
-
ThinkingConfigParam, # pyright: ignore [reportMissingImports]
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
HAS_THINKING_SUPPORT = True
|
|
55
|
-
|
|
56
|
-
except ImportError: # pragma: no cover
|
|
57
|
-
ThinkingConfigParam = _ThinkingConfigParam
|
|
58
|
-
ThinkingBlock = _ThinkingBlock
|
|
59
|
-
ThinkingDelta = _ThinkingDelta
|
|
60
|
-
SignatureDelta = _SignatureDelta
|
|
61
|
-
HAS_THINKING_SUPPORT = False
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
__all__ = [
|
|
65
|
-
"HAS_THINKING_SUPPORT",
|
|
66
|
-
"SignatureDelta",
|
|
67
|
-
"ThinkingBlock",
|
|
68
|
-
"ThinkingConfigParam",
|
|
69
|
-
"ThinkingDelta",
|
|
70
|
-
]
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Anthropic utilities for decorator factories."""
|
|
2
|
-
|
|
3
|
-
from ._convert_common_call_params import convert_common_call_params
|
|
4
|
-
from ._convert_message_params import convert_message_params
|
|
5
|
-
from ._get_json_output import get_json_output
|
|
6
|
-
from ._handle_stream import handle_stream, handle_stream_async
|
|
7
|
-
from ._setup_call import setup_call
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"convert_common_call_params",
|
|
11
|
-
"convert_message_params",
|
|
12
|
-
"get_json_output",
|
|
13
|
-
"handle_stream",
|
|
14
|
-
"handle_stream_async",
|
|
15
|
-
"setup_call",
|
|
16
|
-
]
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from typing import cast
|
|
2
|
-
|
|
3
|
-
from ...base.call_params import CommonCallParams
|
|
4
|
-
from ..call_params import AnthropicCallParams
|
|
5
|
-
|
|
6
|
-
ANTHROPIC_PARAM_MAPPING = {
|
|
7
|
-
"temperature": "temperature",
|
|
8
|
-
"max_tokens": "max_tokens",
|
|
9
|
-
"top_p": "top_p",
|
|
10
|
-
"stop": "stop_sequences",
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def convert_common_call_params(common_params: CommonCallParams) -> AnthropicCallParams:
|
|
15
|
-
"""Convert CommonCallParams to Anthropic parameters."""
|
|
16
|
-
return cast(
|
|
17
|
-
AnthropicCallParams,
|
|
18
|
-
{"max_tokens": 1024}
|
|
19
|
-
| {
|
|
20
|
-
ANTHROPIC_PARAM_MAPPING[key]: [value] if isinstance(value, str) else value
|
|
21
|
-
for key, value in common_params.items()
|
|
22
|
-
if key in ANTHROPIC_PARAM_MAPPING
|
|
23
|
-
and ANTHROPIC_PARAM_MAPPING[key] is not None
|
|
24
|
-
},
|
|
25
|
-
)
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from mirascope.core.base._utils._convert_provider_finish_reason_to_finish_reason import (
|
|
2
|
-
FinishReasonMappingValue,
|
|
3
|
-
_convert_finish_reasons_to_common_finish_reasons_from_mapping,
|
|
4
|
-
)
|
|
5
|
-
from mirascope.core.base.types import FinishReason
|
|
6
|
-
|
|
7
|
-
_FinishReasonMapping: dict[str, FinishReasonMappingValue] = {
|
|
8
|
-
"end_turn": "stop",
|
|
9
|
-
"max_tokens": "length",
|
|
10
|
-
"stop_sequence": "stop",
|
|
11
|
-
"tool_use": "tool_calls",
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def _convert_finish_reasons_to_common_finish_reasons(
|
|
16
|
-
finish_reasons: list[str],
|
|
17
|
-
) -> list[FinishReason] | None:
|
|
18
|
-
"""Provider-agnostic finish reasons."""
|
|
19
|
-
return _convert_finish_reasons_to_common_finish_reasons_from_mapping(
|
|
20
|
-
finish_reasons, _FinishReasonMapping
|
|
21
|
-
)
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
"""Utility for converting `BaseMessageParam` to `MessageParam`"""
|
|
2
|
-
|
|
3
|
-
import base64
|
|
4
|
-
|
|
5
|
-
from anthropic.types import MessageParam
|
|
6
|
-
|
|
7
|
-
from ...base import BaseMessageParam
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def convert_message_params(
|
|
11
|
-
message_params: list[BaseMessageParam | MessageParam],
|
|
12
|
-
) -> list[MessageParam]:
|
|
13
|
-
converted_message_params = []
|
|
14
|
-
for message_param in message_params:
|
|
15
|
-
if not isinstance(message_param, BaseMessageParam):
|
|
16
|
-
converted_message_params.append(message_param)
|
|
17
|
-
elif isinstance(content := message_param.content, str):
|
|
18
|
-
converted_message_params.append(message_param.model_dump())
|
|
19
|
-
else:
|
|
20
|
-
converted_content = []
|
|
21
|
-
for part in content:
|
|
22
|
-
if part.type == "text":
|
|
23
|
-
converted_content.append(part.model_dump())
|
|
24
|
-
elif part.type == "cache_control" and converted_content:
|
|
25
|
-
converted_content[-1]["cache_control"] = {"type": part.cache_type}
|
|
26
|
-
elif part.type == "image":
|
|
27
|
-
if part.media_type not in [
|
|
28
|
-
"image/jpeg",
|
|
29
|
-
"image/png",
|
|
30
|
-
"image/gif",
|
|
31
|
-
"image/webp",
|
|
32
|
-
]:
|
|
33
|
-
raise ValueError(
|
|
34
|
-
f"Unsupported image media type: {part.media_type}. "
|
|
35
|
-
"Anthropic currently only supports JPEG, PNG, GIF, and "
|
|
36
|
-
"WebP images."
|
|
37
|
-
)
|
|
38
|
-
converted_content.append(
|
|
39
|
-
{
|
|
40
|
-
"type": "image",
|
|
41
|
-
"source": {
|
|
42
|
-
"data": base64.b64encode(part.image).decode("utf-8"),
|
|
43
|
-
"media_type": part.media_type,
|
|
44
|
-
"type": "base64",
|
|
45
|
-
},
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
elif part.type == "image_url":
|
|
49
|
-
converted_content.append(
|
|
50
|
-
{
|
|
51
|
-
"type": "image",
|
|
52
|
-
"source": {"url": part.url, "type": "url"},
|
|
53
|
-
}
|
|
54
|
-
)
|
|
55
|
-
elif part.type == "document":
|
|
56
|
-
if part.media_type != "application/pdf":
|
|
57
|
-
raise ValueError(
|
|
58
|
-
f"Unsupported document media type: {part.media_type}. "
|
|
59
|
-
"Anthropic currently only supports PDF document."
|
|
60
|
-
)
|
|
61
|
-
converted_content.append(
|
|
62
|
-
{
|
|
63
|
-
"type": "document",
|
|
64
|
-
"source": {
|
|
65
|
-
"data": base64.b64encode(part.document).decode("utf-8"),
|
|
66
|
-
"media_type": part.media_type,
|
|
67
|
-
"type": "base64",
|
|
68
|
-
},
|
|
69
|
-
}
|
|
70
|
-
)
|
|
71
|
-
elif part.type == "tool_call":
|
|
72
|
-
converted_content.append(
|
|
73
|
-
{
|
|
74
|
-
"id": part.id,
|
|
75
|
-
"type": "tool_use",
|
|
76
|
-
"name": part.name,
|
|
77
|
-
"input": part.args,
|
|
78
|
-
}
|
|
79
|
-
)
|
|
80
|
-
elif part.type == "tool_result":
|
|
81
|
-
converted_content.append(
|
|
82
|
-
{
|
|
83
|
-
"tool_use_id": part.id,
|
|
84
|
-
"type": "tool_result",
|
|
85
|
-
"content": part.content,
|
|
86
|
-
"is_error": part.is_error,
|
|
87
|
-
}
|
|
88
|
-
)
|
|
89
|
-
else:
|
|
90
|
-
raise ValueError(
|
|
91
|
-
"Anthropic currently only supports text, image, and cache "
|
|
92
|
-
f"control parts. Part provided: {part.type}"
|
|
93
|
-
)
|
|
94
|
-
converted_message_params.append(
|
|
95
|
-
{
|
|
96
|
-
"role": "user"
|
|
97
|
-
if message_param.role == "tool"
|
|
98
|
-
else message_param.role,
|
|
99
|
-
"content": converted_content,
|
|
100
|
-
}
|
|
101
|
-
)
|
|
102
|
-
return converted_message_params
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"""Get the JSON output from an anthropic call response or chunk."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
from ..call_response import AnthropicCallResponse
|
|
6
|
-
from ..call_response_chunk import AnthropicCallResponseChunk
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def get_json_output(
|
|
10
|
-
response: AnthropicCallResponse | AnthropicCallResponseChunk, json_mode: bool
|
|
11
|
-
) -> str:
|
|
12
|
-
"""Get the JSON output from a completion response."""
|
|
13
|
-
if isinstance(response, AnthropicCallResponse):
|
|
14
|
-
if json_mode and (content := response.content):
|
|
15
|
-
json_start = content.index("{")
|
|
16
|
-
json_end = content.rfind("}")
|
|
17
|
-
return content[json_start : json_end + 1]
|
|
18
|
-
for block in response.response.content:
|
|
19
|
-
if block.type == "tool_use" and block.input is not None:
|
|
20
|
-
return json.dumps(block.input)
|
|
21
|
-
raise ValueError("No tool call or JSON object found in response.")
|
|
22
|
-
else:
|
|
23
|
-
if json_mode:
|
|
24
|
-
return response.content
|
|
25
|
-
elif (
|
|
26
|
-
response.chunk.type == "content_block_delta"
|
|
27
|
-
and (delta := response.chunk.delta)
|
|
28
|
-
and delta.type == "input_json_delta"
|
|
29
|
-
):
|
|
30
|
-
return delta.partial_json
|
|
31
|
-
return ""
|