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,205 +0,0 @@
|
|
|
1
|
-
"""This module contains the `CohereCallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from collections.abc import Sequence
|
|
7
|
-
from functools import cached_property
|
|
8
|
-
|
|
9
|
-
from cohere.types import (
|
|
10
|
-
ApiMetaBilledUnits,
|
|
11
|
-
ChatMessage,
|
|
12
|
-
NonStreamedChatResponse,
|
|
13
|
-
Tool,
|
|
14
|
-
ToolResult,
|
|
15
|
-
)
|
|
16
|
-
from pydantic import SkipValidation, computed_field
|
|
17
|
-
|
|
18
|
-
from .. import BaseMessageParam
|
|
19
|
-
from ..base import BaseCallResponse, transform_tool_outputs
|
|
20
|
-
from ..base.types import CostMetadata, FinishReason
|
|
21
|
-
from ._utils._convert_finish_reason_to_common_finish_reasons import (
|
|
22
|
-
_convert_finish_reasons_to_common_finish_reasons,
|
|
23
|
-
)
|
|
24
|
-
from ._utils._message_param_converter import CohereMessageParamConverter
|
|
25
|
-
from .call_params import CohereCallParams
|
|
26
|
-
from .dynamic_config import AsyncCohereDynamicConfig, CohereDynamicConfig
|
|
27
|
-
from .tool import CohereTool
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class CohereCallResponse(
|
|
31
|
-
BaseCallResponse[
|
|
32
|
-
SkipValidation[NonStreamedChatResponse],
|
|
33
|
-
CohereTool,
|
|
34
|
-
SkipValidation[Tool],
|
|
35
|
-
AsyncCohereDynamicConfig | CohereDynamicConfig,
|
|
36
|
-
SkipValidation[ChatMessage],
|
|
37
|
-
CohereCallParams,
|
|
38
|
-
SkipValidation[ChatMessage],
|
|
39
|
-
CohereMessageParamConverter,
|
|
40
|
-
]
|
|
41
|
-
):
|
|
42
|
-
"""A convenience wrapper around the Cohere `ChatCompletion` response.
|
|
43
|
-
|
|
44
|
-
When calling the Cohere API using a function decorated with `cohere_call`, the
|
|
45
|
-
response will be an `CohereCallResponse` instance with properties that allow for
|
|
46
|
-
more convenience access to commonly used attributes.
|
|
47
|
-
|
|
48
|
-
Example:
|
|
49
|
-
|
|
50
|
-
```python
|
|
51
|
-
from mirascope.core import prompt_template
|
|
52
|
-
from mirascope.core.cohere import cohere_call
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
@cohere_call("command-r-plus")
|
|
56
|
-
def recommend_book(genre: str) -> str:
|
|
57
|
-
return f"Recommend a {genre} book"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
response = recommend_book("fantasy") # response is an `CohereCallResponse` instance
|
|
61
|
-
print(response.content)
|
|
62
|
-
```
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
_message_converter: type[CohereMessageParamConverter] = CohereMessageParamConverter
|
|
66
|
-
|
|
67
|
-
_provider = "cohere"
|
|
68
|
-
|
|
69
|
-
@computed_field
|
|
70
|
-
@property
|
|
71
|
-
def content(self) -> str:
|
|
72
|
-
"""Returns the content of the chat completion for the 0th choice."""
|
|
73
|
-
return self.response.text
|
|
74
|
-
|
|
75
|
-
@computed_field
|
|
76
|
-
@property
|
|
77
|
-
def finish_reasons(self) -> list[str] | None:
|
|
78
|
-
"""Returns the finish reasons of the response."""
|
|
79
|
-
return [str(self.response.finish_reason)]
|
|
80
|
-
|
|
81
|
-
@computed_field
|
|
82
|
-
@property
|
|
83
|
-
def model(self) -> str:
|
|
84
|
-
"""Returns the name of the response model.
|
|
85
|
-
|
|
86
|
-
Cohere does not return model, so we return the model provided by the user.
|
|
87
|
-
"""
|
|
88
|
-
return self._model
|
|
89
|
-
|
|
90
|
-
@computed_field
|
|
91
|
-
@property
|
|
92
|
-
def id(self) -> str | None:
|
|
93
|
-
"""Returns the id of the response."""
|
|
94
|
-
return self.response.generation_id
|
|
95
|
-
|
|
96
|
-
@property
|
|
97
|
-
def usage(self) -> ApiMetaBilledUnits | None:
|
|
98
|
-
"""Returns the usage of the response."""
|
|
99
|
-
if self.response.meta:
|
|
100
|
-
return self.response.meta.billed_units
|
|
101
|
-
return None
|
|
102
|
-
|
|
103
|
-
@computed_field
|
|
104
|
-
@property
|
|
105
|
-
def input_tokens(self) -> float | None:
|
|
106
|
-
"""Returns the number of input tokens."""
|
|
107
|
-
if self.usage:
|
|
108
|
-
return self.usage.input_tokens
|
|
109
|
-
return None
|
|
110
|
-
|
|
111
|
-
@computed_field
|
|
112
|
-
@property
|
|
113
|
-
def cached_tokens(self) -> float | None:
|
|
114
|
-
"""Returns the number of cached tokens."""
|
|
115
|
-
return None
|
|
116
|
-
|
|
117
|
-
@computed_field
|
|
118
|
-
@property
|
|
119
|
-
def output_tokens(self) -> float | None:
|
|
120
|
-
"""Returns the number of output tokens."""
|
|
121
|
-
if self.usage:
|
|
122
|
-
return self.usage.output_tokens
|
|
123
|
-
return None
|
|
124
|
-
|
|
125
|
-
@computed_field
|
|
126
|
-
@cached_property
|
|
127
|
-
def message_param(self) -> ChatMessage:
|
|
128
|
-
"""Returns the assistant's response as a message parameter."""
|
|
129
|
-
return ChatMessage(
|
|
130
|
-
message=self.response.text,
|
|
131
|
-
tool_calls=self.response.tool_calls,
|
|
132
|
-
role="assistant", # pyright: ignore [reportCallIssue]
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
@cached_property
|
|
136
|
-
def tools(self) -> list[CohereTool] | None:
|
|
137
|
-
"""Returns the tools for the 0th choice message.
|
|
138
|
-
|
|
139
|
-
Raises:
|
|
140
|
-
ValidationError: if a tool call doesn't match the tool's schema.
|
|
141
|
-
"""
|
|
142
|
-
if not self.tool_types or not self.response.tool_calls:
|
|
143
|
-
return None
|
|
144
|
-
extracted_tools: list[CohereTool] = []
|
|
145
|
-
for tool_call in self.response.tool_calls:
|
|
146
|
-
for tool_type in self.tool_types:
|
|
147
|
-
if tool_call.name == tool_type._name():
|
|
148
|
-
extracted_tools.append(tool_type.from_tool_call(tool_call))
|
|
149
|
-
break
|
|
150
|
-
return extracted_tools
|
|
151
|
-
|
|
152
|
-
@cached_property
|
|
153
|
-
def tool(self) -> CohereTool | None:
|
|
154
|
-
"""Returns the 0th tool for the 0th choice message.
|
|
155
|
-
|
|
156
|
-
Raises:
|
|
157
|
-
ValidationError: if the tool call doesn't match the tool's schema.
|
|
158
|
-
"""
|
|
159
|
-
tools = self.tools
|
|
160
|
-
if tools:
|
|
161
|
-
return tools[0]
|
|
162
|
-
return None
|
|
163
|
-
|
|
164
|
-
@classmethod
|
|
165
|
-
@transform_tool_outputs
|
|
166
|
-
def tool_message_params(
|
|
167
|
-
cls,
|
|
168
|
-
tools_and_outputs: Sequence[tuple[CohereTool, str]],
|
|
169
|
-
) -> list[ToolResult]:
|
|
170
|
-
"""Returns the tool message parameters for tool call results.
|
|
171
|
-
|
|
172
|
-
Args:
|
|
173
|
-
tools_and_outputs: The sequence of tools and their outputs from which the tool
|
|
174
|
-
message parameters should be constructed.
|
|
175
|
-
|
|
176
|
-
Returns:
|
|
177
|
-
The list of constructed `ToolResult` parameters.
|
|
178
|
-
"""
|
|
179
|
-
return [
|
|
180
|
-
ToolResult(
|
|
181
|
-
call=tool.tool_call, # pyright: ignore [reportArgumentType]
|
|
182
|
-
outputs=[{"output": output}],
|
|
183
|
-
)
|
|
184
|
-
for tool, output in tools_and_outputs
|
|
185
|
-
]
|
|
186
|
-
|
|
187
|
-
@property
|
|
188
|
-
def common_finish_reasons(self) -> list[FinishReason] | None:
|
|
189
|
-
return _convert_finish_reasons_to_common_finish_reasons(self.finish_reasons)
|
|
190
|
-
|
|
191
|
-
@property
|
|
192
|
-
def common_message_param(self) -> BaseMessageParam:
|
|
193
|
-
return CohereMessageParamConverter.from_provider([self.message_param])[0]
|
|
194
|
-
|
|
195
|
-
@property
|
|
196
|
-
def common_user_message_param(self) -> BaseMessageParam | None:
|
|
197
|
-
if not self.user_message_param:
|
|
198
|
-
return None
|
|
199
|
-
return CohereMessageParamConverter.from_provider([self.user_message_param])[0]
|
|
200
|
-
|
|
201
|
-
@computed_field
|
|
202
|
-
@property
|
|
203
|
-
def cost_metadata(self) -> CostMetadata:
|
|
204
|
-
"""Get metadata required for cost calculation."""
|
|
205
|
-
return super().cost_metadata
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"""This module contains the `CohereCallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from typing import cast
|
|
7
|
-
|
|
8
|
-
from cohere.types import (
|
|
9
|
-
ApiMetaBilledUnits,
|
|
10
|
-
ChatStreamEndEventFinishReason,
|
|
11
|
-
StreamedChatResponse,
|
|
12
|
-
)
|
|
13
|
-
from pydantic import SkipValidation
|
|
14
|
-
|
|
15
|
-
from ..base import BaseCallResponseChunk, types
|
|
16
|
-
from ..base.types import CostMetadata
|
|
17
|
-
from ._types import (
|
|
18
|
-
StreamEndStreamedChatResponse,
|
|
19
|
-
StreamStartStreamedChatResponse,
|
|
20
|
-
TextGenerationStreamedChatResponse,
|
|
21
|
-
)
|
|
22
|
-
from ._utils._convert_finish_reason_to_common_finish_reasons import (
|
|
23
|
-
_convert_finish_reasons_to_common_finish_reasons,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class CohereCallResponseChunk(
|
|
28
|
-
BaseCallResponseChunk[
|
|
29
|
-
SkipValidation[StreamedChatResponse], ChatStreamEndEventFinishReason
|
|
30
|
-
]
|
|
31
|
-
):
|
|
32
|
-
"""A convenience wrapper around the Cohere `ChatCompletionChunk` streamed chunks.
|
|
33
|
-
|
|
34
|
-
When calling the Cohere API using a function decorated with `cohere_call` and
|
|
35
|
-
`stream` set to `True`, the stream will contain `CohereResponseChunk` instances with
|
|
36
|
-
properties that allow for more convenient access to commonly used attributes.
|
|
37
|
-
|
|
38
|
-
Example:
|
|
39
|
-
|
|
40
|
-
```python
|
|
41
|
-
from mirascope.core import prompt_template
|
|
42
|
-
from mirascope.core.cohere import cohere_call
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@cohere_call("command-r-plus", stream=True)
|
|
46
|
-
def recommend_book(genre: str) -> str:
|
|
47
|
-
return f"Recommend a {genre} book"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
stream = recommend_book("fantasy") # response is an `CohereStream`
|
|
51
|
-
for chunk, _ in stream:
|
|
52
|
-
print(chunk.content, end="", flush=True)
|
|
53
|
-
```
|
|
54
|
-
"""
|
|
55
|
-
|
|
56
|
-
@property
|
|
57
|
-
def content(self) -> str:
|
|
58
|
-
"""Returns the content for the 0th choice delta."""
|
|
59
|
-
if isinstance(self.chunk, TextGenerationStreamedChatResponse):
|
|
60
|
-
return self.chunk.text
|
|
61
|
-
return ""
|
|
62
|
-
|
|
63
|
-
@property
|
|
64
|
-
def finish_reasons(self) -> list[ChatStreamEndEventFinishReason] | None:
|
|
65
|
-
"""Returns the finish reasons of the response."""
|
|
66
|
-
if isinstance(self.chunk, StreamEndStreamedChatResponse):
|
|
67
|
-
return [self.chunk.finish_reason]
|
|
68
|
-
return None
|
|
69
|
-
|
|
70
|
-
@property
|
|
71
|
-
def model(self) -> str | None:
|
|
72
|
-
"""Returns the name of the response model.
|
|
73
|
-
|
|
74
|
-
Cohere does not return model, so we return None
|
|
75
|
-
"""
|
|
76
|
-
return None
|
|
77
|
-
|
|
78
|
-
@property
|
|
79
|
-
def id(self) -> str | None:
|
|
80
|
-
"""Returns the id of the response."""
|
|
81
|
-
if isinstance(self.chunk, StreamStartStreamedChatResponse):
|
|
82
|
-
return self.chunk.generation_id
|
|
83
|
-
elif isinstance(self.chunk, StreamEndStreamedChatResponse):
|
|
84
|
-
return self.chunk.response.generation_id
|
|
85
|
-
return None
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def usage(self) -> ApiMetaBilledUnits | None:
|
|
89
|
-
"""Returns the usage of the response."""
|
|
90
|
-
if (
|
|
91
|
-
isinstance(self.chunk, StreamEndStreamedChatResponse)
|
|
92
|
-
and self.chunk.response.meta
|
|
93
|
-
):
|
|
94
|
-
return self.chunk.response.meta.billed_units
|
|
95
|
-
return None
|
|
96
|
-
|
|
97
|
-
@property
|
|
98
|
-
def input_tokens(self) -> float | None:
|
|
99
|
-
"""Returns the number of input tokens."""
|
|
100
|
-
if self.usage:
|
|
101
|
-
return self.usage.input_tokens
|
|
102
|
-
return None
|
|
103
|
-
|
|
104
|
-
@property
|
|
105
|
-
def cached_tokens(self) -> float | None:
|
|
106
|
-
"""Returns the number of cached tokens."""
|
|
107
|
-
return None
|
|
108
|
-
|
|
109
|
-
@property
|
|
110
|
-
def output_tokens(self) -> float | None:
|
|
111
|
-
"""Returns the number of output tokens."""
|
|
112
|
-
if self.usage:
|
|
113
|
-
return self.usage.output_tokens
|
|
114
|
-
return None
|
|
115
|
-
|
|
116
|
-
@property
|
|
117
|
-
def cost_metadata(self) -> CostMetadata:
|
|
118
|
-
"""Returns the cost metadata."""
|
|
119
|
-
return super().cost_metadata
|
|
120
|
-
|
|
121
|
-
@property
|
|
122
|
-
def common_finish_reasons(self) -> list[types.FinishReason] | None:
|
|
123
|
-
return _convert_finish_reasons_to_common_finish_reasons(
|
|
124
|
-
cast(list[str], self.finish_reasons)
|
|
125
|
-
)
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"""This module defines the function return type for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from cohere import (
|
|
4
|
-
AsyncClient,
|
|
5
|
-
Client,
|
|
6
|
-
)
|
|
7
|
-
from cohere.types.chat_message import ChatMessage
|
|
8
|
-
|
|
9
|
-
from ..base import BaseDynamicConfig, BaseMessageParam
|
|
10
|
-
from .call_params import CohereCallParams
|
|
11
|
-
|
|
12
|
-
AsyncCohereDynamicConfig = BaseDynamicConfig[
|
|
13
|
-
ChatMessage | BaseMessageParam, CohereCallParams, AsyncClient
|
|
14
|
-
]
|
|
15
|
-
CohereDynamicConfig = BaseDynamicConfig[
|
|
16
|
-
ChatMessage | BaseMessageParam, CohereCallParams, Client
|
|
17
|
-
]
|
|
18
|
-
"""The function return type for functions wrapped with the `cohere_call` decorator.
|
|
19
|
-
|
|
20
|
-
Example:
|
|
21
|
-
|
|
22
|
-
```python
|
|
23
|
-
from mirascope.core import prompt_template
|
|
24
|
-
from mirascope.core.cohere import CohereDynamicConfig, cohere_call
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
@cohere_call("command-r-plus")
|
|
28
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
29
|
-
def recommend_book(genre: str) -> CohereDynamicConfig:
|
|
30
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
31
|
-
```
|
|
32
|
-
"""
|
mirascope/core/cohere/py.typed
DELETED
|
File without changes
|
mirascope/core/cohere/stream.py
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"""The `CohereStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from cohere.types import (
|
|
7
|
-
ApiMeta,
|
|
8
|
-
ApiMetaBilledUnits,
|
|
9
|
-
ChatMessage,
|
|
10
|
-
ChatStreamEndEventFinishReason,
|
|
11
|
-
NonStreamedChatResponse,
|
|
12
|
-
Tool,
|
|
13
|
-
ToolCall,
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
from ..base.stream import BaseStream
|
|
17
|
-
from ..base.types import CostMetadata
|
|
18
|
-
from .call_params import CohereCallParams
|
|
19
|
-
from .call_response import CohereCallResponse
|
|
20
|
-
from .call_response_chunk import CohereCallResponseChunk
|
|
21
|
-
from .dynamic_config import AsyncCohereDynamicConfig, CohereDynamicConfig
|
|
22
|
-
from .tool import CohereTool
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class CohereStream(
|
|
26
|
-
BaseStream[
|
|
27
|
-
CohereCallResponse,
|
|
28
|
-
CohereCallResponseChunk,
|
|
29
|
-
ChatMessage,
|
|
30
|
-
ChatMessage,
|
|
31
|
-
ChatMessage,
|
|
32
|
-
ChatMessage,
|
|
33
|
-
CohereTool,
|
|
34
|
-
Tool,
|
|
35
|
-
AsyncCohereDynamicConfig | CohereDynamicConfig,
|
|
36
|
-
CohereCallParams,
|
|
37
|
-
ChatStreamEndEventFinishReason,
|
|
38
|
-
]
|
|
39
|
-
):
|
|
40
|
-
"""A class for convenience around streaming Cohere LLM calls.
|
|
41
|
-
|
|
42
|
-
Example:
|
|
43
|
-
|
|
44
|
-
```python
|
|
45
|
-
from mirascope.core import prompt_template
|
|
46
|
-
from mirascope.core.cohere import cohere_call
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
@cohere_call("command-r-plus", stream=True)
|
|
50
|
-
def recommend_book(genre: str) -> str:
|
|
51
|
-
return f"Recommend a {genre} book"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
stream = recommend_book("fantasy") # returns `CohereStream` instance
|
|
55
|
-
for chunk, _ in stream:
|
|
56
|
-
print(chunk.content, end="", flush=True)
|
|
57
|
-
```
|
|
58
|
-
"""
|
|
59
|
-
|
|
60
|
-
_provider = "cohere"
|
|
61
|
-
|
|
62
|
-
def _construct_message_param(
|
|
63
|
-
self, tool_calls: list[ToolCall] | None = None, content: str | None = None
|
|
64
|
-
) -> ChatMessage:
|
|
65
|
-
return ChatMessage(
|
|
66
|
-
role="assistant", # pyright: ignore [reportCallIssue]
|
|
67
|
-
message=content if content else "",
|
|
68
|
-
tool_calls=tool_calls,
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
def construct_call_response(self) -> CohereCallResponse:
|
|
72
|
-
"""Constructs the call response from a consumed CohereStream.
|
|
73
|
-
|
|
74
|
-
Raises:
|
|
75
|
-
ValueError: if the stream has not yet been consumed.
|
|
76
|
-
"""
|
|
77
|
-
if not hasattr(self, "message_param"):
|
|
78
|
-
raise ValueError(
|
|
79
|
-
"No stream response, check if the stream has been consumed."
|
|
80
|
-
)
|
|
81
|
-
if not self.input_tokens and not self.output_tokens:
|
|
82
|
-
meta = None
|
|
83
|
-
else:
|
|
84
|
-
meta = ApiMeta(
|
|
85
|
-
billed_units=ApiMetaBilledUnits(
|
|
86
|
-
input_tokens=self.input_tokens, output_tokens=self.output_tokens
|
|
87
|
-
)
|
|
88
|
-
)
|
|
89
|
-
completion = NonStreamedChatResponse(
|
|
90
|
-
generation_id=self.id,
|
|
91
|
-
text=self.message_param.message,
|
|
92
|
-
meta=meta,
|
|
93
|
-
finish_reason=self.finish_reasons[0] if self.finish_reasons else None,
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
return CohereCallResponse(
|
|
97
|
-
metadata=self.metadata,
|
|
98
|
-
response=completion,
|
|
99
|
-
tool_types=self.tool_types,
|
|
100
|
-
prompt_template=self.prompt_template,
|
|
101
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
102
|
-
dynamic_config=self.dynamic_config,
|
|
103
|
-
messages=self.messages,
|
|
104
|
-
call_params=self.call_params,
|
|
105
|
-
call_kwargs=self.call_kwargs,
|
|
106
|
-
user_message_param=self.user_message_param,
|
|
107
|
-
start_time=self.start_time,
|
|
108
|
-
end_time=self.end_time,
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
@property
|
|
112
|
-
def cost_metadata(self) -> CostMetadata:
|
|
113
|
-
return super().cost_metadata
|
mirascope/core/cohere/tool.py
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"""The `CohereTool` class for easy tool usage with Cohere LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
from cohere.types import Tool, ToolCall, ToolParameterDefinitionsValue
|
|
9
|
-
from pydantic import SkipValidation
|
|
10
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
11
|
-
|
|
12
|
-
from ..base import BaseTool
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class CohereTool(BaseTool):
|
|
16
|
-
"""A class for defining tools for Cohere LLM calls.
|
|
17
|
-
|
|
18
|
-
Example:
|
|
19
|
-
|
|
20
|
-
```python
|
|
21
|
-
from mirascope.core import prompt_template
|
|
22
|
-
from mirascope.core.cohere import cohere_call
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def format_book(title: str, author: str) -> str:
|
|
26
|
-
return f"{title} by {author}"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@cohere_call("command-r-plus", tools=[format_book])
|
|
30
|
-
def recommend_book(genre: str) -> str:
|
|
31
|
-
return f"Recommend a {genre} book"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
response = recommend_book("fantasy")
|
|
35
|
-
if tool := response.tool: # returns an `CohereTool` instance
|
|
36
|
-
print(tool.call())
|
|
37
|
-
```
|
|
38
|
-
"""
|
|
39
|
-
|
|
40
|
-
__provider__ = "cohere"
|
|
41
|
-
|
|
42
|
-
tool_call: SkipValidation[SkipJsonSchema[ToolCall]]
|
|
43
|
-
|
|
44
|
-
@classmethod
|
|
45
|
-
def tool_schema(cls) -> Tool:
|
|
46
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
47
|
-
|
|
48
|
-
Example:
|
|
49
|
-
```python
|
|
50
|
-
from mirascope.core.cohere import CohereTool
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def format_book(title: str, author: str) -> str:
|
|
54
|
-
return f"{title} by {author}"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
tool_type = CohereTool.type_from_fn(format_book)
|
|
58
|
-
print(tool_type.tool_schema()) # prints the Cohere-specific tool schema
|
|
59
|
-
```
|
|
60
|
-
"""
|
|
61
|
-
model_schema = cls.model_json_schema()
|
|
62
|
-
parameter_definitions = None
|
|
63
|
-
if "properties" in model_schema:
|
|
64
|
-
if "$defs" in model_schema["properties"]:
|
|
65
|
-
raise ValueError( # pragma: no cover
|
|
66
|
-
"Unfortunately Cohere's chat API cannot handle nested structures "
|
|
67
|
-
"with $defs."
|
|
68
|
-
)
|
|
69
|
-
parameter_definitions = {
|
|
70
|
-
prop: ToolParameterDefinitionsValue(
|
|
71
|
-
description=prop_schema.get("description", None),
|
|
72
|
-
type=prop_schema["type"],
|
|
73
|
-
required="required" in model_schema
|
|
74
|
-
and prop in model_schema["required"],
|
|
75
|
-
)
|
|
76
|
-
for prop, prop_schema in model_schema["properties"].items()
|
|
77
|
-
}
|
|
78
|
-
return Tool(
|
|
79
|
-
name=cls._name(),
|
|
80
|
-
description=cls._description(),
|
|
81
|
-
parameter_definitions=parameter_definitions,
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
@classmethod
|
|
85
|
-
def from_tool_call(cls, tool_call: ToolCall) -> CohereTool:
|
|
86
|
-
"""Constructs an `CohereTool` instance from a `tool_call`.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
tool_call: The Cohere tool call from which to construct this tool instance.
|
|
90
|
-
"""
|
|
91
|
-
model_json = {**tool_call.parameters}
|
|
92
|
-
model_json["tool_call"] = tool_call.dict()
|
|
93
|
-
return cls.model_validate(model_json)
|