mirascope 1.0.5__py3-none-any.whl → 2.1.1__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 +6 -6
- mirascope/_stubs.py +384 -0
- mirascope/_utils.py +34 -0
- mirascope/api/__init__.py +14 -0
- mirascope/api/_generated/README.md +207 -0
- mirascope/api/_generated/__init__.py +444 -0
- mirascope/api/_generated/annotations/__init__.py +33 -0
- mirascope/api/_generated/annotations/client.py +506 -0
- mirascope/api/_generated/annotations/raw_client.py +1414 -0
- mirascope/api/_generated/annotations/types/__init__.py +31 -0
- mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
- mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
- mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
- mirascope/api/_generated/api_keys/__init__.py +17 -0
- mirascope/api/_generated/api_keys/client.py +530 -0
- mirascope/api/_generated/api_keys/raw_client.py +1236 -0
- mirascope/api/_generated/api_keys/types/__init__.py +15 -0
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
- mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
- mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
- mirascope/api/_generated/client.py +211 -0
- mirascope/api/_generated/core/__init__.py +52 -0
- mirascope/api/_generated/core/api_error.py +23 -0
- mirascope/api/_generated/core/client_wrapper.py +46 -0
- mirascope/api/_generated/core/datetime_utils.py +28 -0
- mirascope/api/_generated/core/file.py +67 -0
- mirascope/api/_generated/core/force_multipart.py +16 -0
- mirascope/api/_generated/core/http_client.py +543 -0
- mirascope/api/_generated/core/http_response.py +55 -0
- mirascope/api/_generated/core/jsonable_encoder.py +100 -0
- mirascope/api/_generated/core/pydantic_utilities.py +255 -0
- mirascope/api/_generated/core/query_encoder.py +58 -0
- mirascope/api/_generated/core/remove_none_from_dict.py +11 -0
- mirascope/api/_generated/core/request_options.py +35 -0
- mirascope/api/_generated/core/serialization.py +276 -0
- mirascope/api/_generated/docs/__init__.py +4 -0
- mirascope/api/_generated/docs/client.py +91 -0
- mirascope/api/_generated/docs/raw_client.py +178 -0
- mirascope/api/_generated/environment.py +9 -0
- mirascope/api/_generated/environments/__init__.py +23 -0
- mirascope/api/_generated/environments/client.py +649 -0
- mirascope/api/_generated/environments/raw_client.py +1567 -0
- mirascope/api/_generated/environments/types/__init__.py +25 -0
- mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
- mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
- mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
- mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
- mirascope/api/_generated/errors/__init__.py +25 -0
- mirascope/api/_generated/errors/bad_request_error.py +14 -0
- mirascope/api/_generated/errors/conflict_error.py +14 -0
- mirascope/api/_generated/errors/forbidden_error.py +11 -0
- mirascope/api/_generated/errors/internal_server_error.py +10 -0
- mirascope/api/_generated/errors/not_found_error.py +11 -0
- mirascope/api/_generated/errors/payment_required_error.py +15 -0
- mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
- mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
- mirascope/api/_generated/errors/unauthorized_error.py +11 -0
- mirascope/api/_generated/functions/__init__.py +39 -0
- mirascope/api/_generated/functions/client.py +647 -0
- mirascope/api/_generated/functions/raw_client.py +1890 -0
- mirascope/api/_generated/functions/types/__init__.py +53 -0
- mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
- mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
- mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
- mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
- mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
- mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
- mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
- mirascope/api/_generated/health/__init__.py +7 -0
- mirascope/api/_generated/health/client.py +92 -0
- mirascope/api/_generated/health/raw_client.py +175 -0
- mirascope/api/_generated/health/types/__init__.py +8 -0
- mirascope/api/_generated/health/types/health_check_response.py +22 -0
- mirascope/api/_generated/health/types/health_check_response_status.py +5 -0
- mirascope/api/_generated/organization_invitations/__init__.py +33 -0
- mirascope/api/_generated/organization_invitations/client.py +546 -0
- mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
- mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
- mirascope/api/_generated/organization_memberships/__init__.py +19 -0
- mirascope/api/_generated/organization_memberships/client.py +302 -0
- mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
- mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
- mirascope/api/_generated/organizations/__init__.py +51 -0
- mirascope/api/_generated/organizations/client.py +869 -0
- mirascope/api/_generated/organizations/raw_client.py +2593 -0
- mirascope/api/_generated/organizations/types/__init__.py +71 -0
- mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
- mirascope/api/_generated/organizations/types/organizations_create_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_get_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_update_response.py +26 -0
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +5 -0
- mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
- mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
- mirascope/api/_generated/project_memberships/__init__.py +29 -0
- mirascope/api/_generated/project_memberships/client.py +528 -0
- mirascope/api/_generated/project_memberships/raw_client.py +1278 -0
- mirascope/api/_generated/project_memberships/types/__init__.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_get_response.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_get_response_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
- mirascope/api/_generated/projects/__init__.py +7 -0
- mirascope/api/_generated/projects/client.py +428 -0
- mirascope/api/_generated/projects/raw_client.py +1302 -0
- mirascope/api/_generated/projects/types/__init__.py +10 -0
- mirascope/api/_generated/projects/types/projects_create_response.py +25 -0
- mirascope/api/_generated/projects/types/projects_get_response.py +25 -0
- mirascope/api/_generated/projects/types/projects_list_response_item.py +25 -0
- mirascope/api/_generated/projects/types/projects_update_response.py +25 -0
- mirascope/api/_generated/reference.md +4987 -0
- mirascope/api/_generated/tags/__init__.py +19 -0
- mirascope/api/_generated/tags/client.py +504 -0
- mirascope/api/_generated/tags/raw_client.py +1288 -0
- mirascope/api/_generated/tags/types/__init__.py +17 -0
- mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
- mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
- mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
- mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
- mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
- mirascope/api/_generated/token_cost/__init__.py +7 -0
- mirascope/api/_generated/token_cost/client.py +160 -0
- mirascope/api/_generated/token_cost/raw_client.py +264 -0
- mirascope/api/_generated/token_cost/types/__init__.py +8 -0
- mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
- mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
- mirascope/api/_generated/traces/__init__.py +97 -0
- mirascope/api/_generated/traces/client.py +1103 -0
- mirascope/api/_generated/traces/raw_client.py +2322 -0
- mirascope/api/_generated/traces/types/__init__.py +155 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +29 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +27 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +22 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +20 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +29 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +31 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +22 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +22 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +48 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +23 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +38 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +19 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +24 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +22 -0
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +20 -0
- mirascope/api/_generated/traces/types/traces_create_response.py +24 -0
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +22 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
- mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
- mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
- mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
- mirascope/api/_generated/types/__init__.py +85 -0
- mirascope/api/_generated/types/already_exists_error.py +22 -0
- mirascope/api/_generated/types/already_exists_error_tag.py +5 -0
- mirascope/api/_generated/types/bad_request_error_body.py +50 -0
- mirascope/api/_generated/types/click_house_error.py +22 -0
- mirascope/api/_generated/types/database_error.py +22 -0
- mirascope/api/_generated/types/database_error_tag.py +5 -0
- mirascope/api/_generated/types/date.py +3 -0
- mirascope/api/_generated/types/http_api_decode_error.py +27 -0
- mirascope/api/_generated/types/http_api_decode_error_tag.py +5 -0
- mirascope/api/_generated/types/immutable_resource_error.py +22 -0
- mirascope/api/_generated/types/internal_server_error_body.py +49 -0
- mirascope/api/_generated/types/issue.py +38 -0
- mirascope/api/_generated/types/issue_tag.py +10 -0
- mirascope/api/_generated/types/not_found_error_body.py +22 -0
- mirascope/api/_generated/types/not_found_error_tag.py +5 -0
- mirascope/api/_generated/types/number_from_string.py +3 -0
- mirascope/api/_generated/types/permission_denied_error.py +22 -0
- mirascope/api/_generated/types/permission_denied_error_tag.py +5 -0
- mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
- mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
- mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
- mirascope/api/_generated/types/property_key.py +7 -0
- mirascope/api/_generated/types/property_key_key.py +25 -0
- mirascope/api/_generated/types/property_key_key_tag.py +5 -0
- mirascope/api/_generated/types/rate_limit_error.py +31 -0
- mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
- mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
- mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
- mirascope/api/_generated/types/stripe_error.py +20 -0
- mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
- mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
- mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
- mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
- mirascope/api/client.py +255 -0
- mirascope/api/settings.py +99 -0
- mirascope/llm/__init__.py +316 -0
- mirascope/llm/calls/__init__.py +17 -0
- mirascope/llm/calls/calls.py +348 -0
- mirascope/llm/calls/decorator.py +268 -0
- mirascope/llm/content/__init__.py +71 -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 +69 -0
- mirascope/llm/content/tool_output.py +43 -0
- mirascope/llm/context/__init__.py +6 -0
- mirascope/llm/context/_utils.py +41 -0
- mirascope/llm/context/context.py +24 -0
- mirascope/llm/exceptions.py +360 -0
- mirascope/llm/formatting/__init__.py +39 -0
- mirascope/llm/formatting/format.py +291 -0
- mirascope/llm/formatting/from_call_args.py +30 -0
- mirascope/llm/formatting/output_parser.py +178 -0
- mirascope/llm/formatting/partial.py +131 -0
- mirascope/llm/formatting/primitives.py +192 -0
- mirascope/llm/formatting/types.py +83 -0
- mirascope/llm/mcp/__init__.py +5 -0
- mirascope/llm/mcp/mcp_client.py +130 -0
- mirascope/llm/messages/__init__.py +35 -0
- mirascope/llm/messages/_utils.py +34 -0
- mirascope/llm/messages/message.py +190 -0
- mirascope/llm/models/__init__.py +21 -0
- mirascope/llm/models/models.py +1339 -0
- mirascope/llm/models/params.py +72 -0
- mirascope/llm/models/thinking_config.py +61 -0
- mirascope/llm/prompts/__init__.py +34 -0
- mirascope/llm/prompts/_utils.py +31 -0
- mirascope/llm/prompts/decorator.py +215 -0
- mirascope/llm/prompts/prompts.py +484 -0
- mirascope/llm/prompts/protocols.py +65 -0
- mirascope/llm/providers/__init__.py +65 -0
- mirascope/llm/providers/anthropic/__init__.py +11 -0
- mirascope/llm/providers/anthropic/_utils/__init__.py +27 -0
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +297 -0
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +272 -0
- mirascope/llm/providers/anthropic/_utils/decode.py +326 -0
- mirascope/llm/providers/anthropic/_utils/encode.py +431 -0
- mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
- mirascope/llm/providers/anthropic/beta_provider.py +338 -0
- mirascope/llm/providers/anthropic/model_id.py +23 -0
- mirascope/llm/providers/anthropic/model_info.py +87 -0
- mirascope/llm/providers/anthropic/provider.py +440 -0
- mirascope/llm/providers/base/__init__.py +14 -0
- mirascope/llm/providers/base/_utils.py +248 -0
- mirascope/llm/providers/base/base_provider.py +1463 -0
- mirascope/llm/providers/base/kwargs.py +12 -0
- mirascope/llm/providers/google/__init__.py +6 -0
- mirascope/llm/providers/google/_utils/__init__.py +17 -0
- mirascope/llm/providers/google/_utils/decode.py +357 -0
- mirascope/llm/providers/google/_utils/encode.py +418 -0
- mirascope/llm/providers/google/_utils/errors.py +50 -0
- mirascope/llm/providers/google/message.py +7 -0
- mirascope/llm/providers/google/model_id.py +22 -0
- mirascope/llm/providers/google/model_info.py +63 -0
- mirascope/llm/providers/google/provider.py +456 -0
- mirascope/llm/providers/mirascope/__init__.py +5 -0
- mirascope/llm/providers/mirascope/_utils.py +73 -0
- mirascope/llm/providers/mirascope/provider.py +313 -0
- mirascope/llm/providers/mlx/__init__.py +9 -0
- mirascope/llm/providers/mlx/_utils.py +141 -0
- mirascope/llm/providers/mlx/encoding/__init__.py +8 -0
- mirascope/llm/providers/mlx/encoding/base.py +69 -0
- mirascope/llm/providers/mlx/encoding/transformers.py +146 -0
- mirascope/llm/providers/mlx/mlx.py +242 -0
- mirascope/llm/providers/mlx/model_id.py +17 -0
- mirascope/llm/providers/mlx/provider.py +416 -0
- mirascope/llm/providers/model_id.py +16 -0
- mirascope/llm/providers/ollama/__init__.py +7 -0
- mirascope/llm/providers/ollama/provider.py +71 -0
- mirascope/llm/providers/openai/__init__.py +15 -0
- mirascope/llm/providers/openai/_utils/__init__.py +5 -0
- mirascope/llm/providers/openai/_utils/errors.py +46 -0
- mirascope/llm/providers/openai/completions/__init__.py +7 -0
- mirascope/llm/providers/openai/completions/_utils/__init__.py +18 -0
- mirascope/llm/providers/openai/completions/_utils/decode.py +252 -0
- mirascope/llm/providers/openai/completions/_utils/encode.py +390 -0
- mirascope/llm/providers/openai/completions/_utils/feature_info.py +50 -0
- mirascope/llm/providers/openai/completions/base_provider.py +522 -0
- mirascope/llm/providers/openai/completions/provider.py +28 -0
- mirascope/llm/providers/openai/model_id.py +31 -0
- mirascope/llm/providers/openai/model_info.py +303 -0
- mirascope/llm/providers/openai/provider.py +405 -0
- mirascope/llm/providers/openai/responses/__init__.py +5 -0
- mirascope/llm/providers/openai/responses/_utils/__init__.py +15 -0
- mirascope/llm/providers/openai/responses/_utils/decode.py +289 -0
- mirascope/llm/providers/openai/responses/_utils/encode.py +399 -0
- mirascope/llm/providers/openai/responses/provider.py +472 -0
- mirascope/llm/providers/openrouter/__init__.py +5 -0
- mirascope/llm/providers/openrouter/provider.py +67 -0
- mirascope/llm/providers/provider_id.py +26 -0
- mirascope/llm/providers/provider_registry.py +305 -0
- mirascope/llm/providers/together/__init__.py +7 -0
- mirascope/llm/providers/together/provider.py +40 -0
- mirascope/llm/responses/__init__.py +66 -0
- mirascope/llm/responses/_utils.py +146 -0
- mirascope/llm/responses/base_response.py +103 -0
- mirascope/llm/responses/base_stream_response.py +824 -0
- mirascope/llm/responses/finish_reason.py +28 -0
- mirascope/llm/responses/response.py +362 -0
- mirascope/llm/responses/root_response.py +248 -0
- mirascope/llm/responses/stream_response.py +577 -0
- mirascope/llm/responses/streams.py +363 -0
- mirascope/llm/responses/usage.py +139 -0
- mirascope/llm/tools/__init__.py +71 -0
- mirascope/llm/tools/_utils.py +34 -0
- mirascope/llm/tools/decorator.py +184 -0
- mirascope/llm/tools/protocols.py +96 -0
- mirascope/llm/tools/provider_tools.py +18 -0
- mirascope/llm/tools/tool_schema.py +321 -0
- mirascope/llm/tools/toolkit.py +178 -0
- mirascope/llm/tools/tools.py +263 -0
- mirascope/llm/tools/types.py +112 -0
- mirascope/llm/tools/web_search_tool.py +32 -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/ops/__init__.py +129 -0
- mirascope/ops/_internal/__init__.py +5 -0
- mirascope/ops/_internal/closure.py +1172 -0
- mirascope/ops/_internal/configuration.py +177 -0
- mirascope/ops/_internal/context.py +76 -0
- mirascope/ops/_internal/exporters/__init__.py +26 -0
- mirascope/ops/_internal/exporters/exporters.py +362 -0
- mirascope/ops/_internal/exporters/processors.py +104 -0
- mirascope/ops/_internal/exporters/types.py +165 -0
- mirascope/ops/_internal/exporters/utils.py +66 -0
- mirascope/ops/_internal/instrumentation/__init__.py +28 -0
- mirascope/ops/_internal/instrumentation/llm/__init__.py +8 -0
- mirascope/ops/_internal/instrumentation/llm/common.py +500 -0
- mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
- mirascope/ops/_internal/instrumentation/llm/encode.py +238 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +38 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +31 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +38 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +18 -0
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +100 -0
- mirascope/ops/_internal/instrumentation/llm/llm.py +161 -0
- mirascope/ops/_internal/instrumentation/llm/model.py +1777 -0
- mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
- mirascope/ops/_internal/instrumentation/llm/serialize.py +324 -0
- mirascope/ops/_internal/instrumentation/providers/__init__.py +29 -0
- mirascope/ops/_internal/instrumentation/providers/anthropic.py +78 -0
- mirascope/ops/_internal/instrumentation/providers/base.py +179 -0
- mirascope/ops/_internal/instrumentation/providers/google_genai.py +85 -0
- mirascope/ops/_internal/instrumentation/providers/openai.py +82 -0
- mirascope/ops/_internal/propagation.py +198 -0
- mirascope/ops/_internal/protocols.py +133 -0
- mirascope/ops/_internal/session.py +139 -0
- mirascope/ops/_internal/spans.py +232 -0
- mirascope/ops/_internal/traced_calls.py +389 -0
- mirascope/ops/_internal/traced_functions.py +528 -0
- mirascope/ops/_internal/tracing.py +353 -0
- mirascope/ops/_internal/types.py +13 -0
- mirascope/ops/_internal/utils.py +131 -0
- mirascope/ops/_internal/versioned_calls.py +512 -0
- mirascope/ops/_internal/versioned_functions.py +357 -0
- mirascope/ops/_internal/versioning.py +303 -0
- mirascope/ops/exceptions.py +21 -0
- mirascope-2.1.1.dist-info/METADATA +231 -0
- mirascope-2.1.1.dist-info/RECORD +437 -0
- {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/WHEEL +1 -1
- {mirascope-1.0.5.dist-info → mirascope-2.1.1.dist-info}/licenses/LICENSE +1 -1
- mirascope/beta/__init__.py +0 -0
- mirascope/beta/openai/__init__.py +0 -5
- mirascope/beta/openai/parse.py +0 -129
- 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 -57
- mirascope/beta/rag/chroma/vectorstores.py +0 -97
- 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 -55
- mirascope/core/anthropic/__init__.py +0 -21
- mirascope/core/anthropic/_call.py +0 -71
- mirascope/core/anthropic/_utils/__init__.py +0 -16
- mirascope/core/anthropic/_utils/_calculate_cost.py +0 -63
- mirascope/core/anthropic/_utils/_convert_message_params.py +0 -54
- mirascope/core/anthropic/_utils/_get_json_output.py +0 -34
- mirascope/core/anthropic/_utils/_handle_stream.py +0 -89
- mirascope/core/anthropic/_utils/_setup_call.py +0 -76
- mirascope/core/anthropic/call_params.py +0 -36
- mirascope/core/anthropic/call_response.py +0 -158
- mirascope/core/anthropic/call_response_chunk.py +0 -104
- mirascope/core/anthropic/dynamic_config.py +0 -26
- mirascope/core/anthropic/py.typed +0 -0
- mirascope/core/anthropic/stream.py +0 -140
- mirascope/core/anthropic/tool.py +0 -77
- mirascope/core/base/__init__.py +0 -40
- mirascope/core/base/_call_factory.py +0 -323
- mirascope/core/base/_create.py +0 -167
- mirascope/core/base/_extract.py +0 -139
- mirascope/core/base/_partial.py +0 -63
- mirascope/core/base/_utils/__init__.py +0 -64
- mirascope/core/base/_utils/_base_type.py +0 -17
- mirascope/core/base/_utils/_convert_base_model_to_base_tool.py +0 -45
- mirascope/core/base/_utils/_convert_base_type_to_base_tool.py +0 -24
- mirascope/core/base/_utils/_convert_function_to_base_tool.py +0 -126
- mirascope/core/base/_utils/_default_tool_docstring.py +0 -6
- mirascope/core/base/_utils/_extract_tool_return.py +0 -36
- mirascope/core/base/_utils/_format_template.py +0 -29
- mirascope/core/base/_utils/_get_audio_type.py +0 -18
- mirascope/core/base/_utils/_get_fn_args.py +0 -14
- 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 -25
- mirascope/core/base/_utils/_get_template_values.py +0 -52
- mirascope/core/base/_utils/_get_template_variables.py +0 -38
- mirascope/core/base/_utils/_json_mode_content.py +0 -15
- mirascope/core/base/_utils/_parse_content_template.py +0 -157
- mirascope/core/base/_utils/_parse_prompt_messages.py +0 -51
- mirascope/core/base/_utils/_protocols.py +0 -215
- mirascope/core/base/_utils/_setup_call.py +0 -64
- mirascope/core/base/_utils/_setup_extract_tool.py +0 -24
- mirascope/core/base/call_params.py +0 -6
- mirascope/core/base/call_response.py +0 -189
- mirascope/core/base/call_response_chunk.py +0 -91
- mirascope/core/base/dynamic_config.py +0 -55
- mirascope/core/base/message_param.py +0 -61
- mirascope/core/base/metadata.py +0 -13
- mirascope/core/base/prompt.py +0 -415
- mirascope/core/base/stream.py +0 -365
- mirascope/core/base/structured_stream.py +0 -251
- mirascope/core/base/tool.py +0 -126
- mirascope/core/base/toolkit.py +0 -146
- mirascope/core/cohere/__init__.py +0 -21
- mirascope/core/cohere/_call.py +0 -71
- mirascope/core/cohere/_utils/__init__.py +0 -16
- mirascope/core/cohere/_utils/_calculate_cost.py +0 -39
- mirascope/core/cohere/_utils/_convert_message_params.py +0 -31
- mirascope/core/cohere/_utils/_get_json_output.py +0 -31
- mirascope/core/cohere/_utils/_handle_stream.py +0 -33
- mirascope/core/cohere/_utils/_setup_call.py +0 -89
- mirascope/core/cohere/call_params.py +0 -57
- mirascope/core/cohere/call_response.py +0 -167
- mirascope/core/cohere/call_response_chunk.py +0 -101
- mirascope/core/cohere/dynamic_config.py +0 -24
- mirascope/core/cohere/py.typed +0 -0
- mirascope/core/cohere/stream.py +0 -113
- mirascope/core/cohere/tool.py +0 -92
- mirascope/core/gemini/__init__.py +0 -21
- mirascope/core/gemini/_call.py +0 -71
- mirascope/core/gemini/_utils/__init__.py +0 -16
- mirascope/core/gemini/_utils/_calculate_cost.py +0 -8
- mirascope/core/gemini/_utils/_convert_message_params.py +0 -74
- mirascope/core/gemini/_utils/_get_json_output.py +0 -33
- mirascope/core/gemini/_utils/_handle_stream.py +0 -33
- mirascope/core/gemini/_utils/_setup_call.py +0 -68
- mirascope/core/gemini/call_params.py +0 -28
- mirascope/core/gemini/call_response.py +0 -173
- mirascope/core/gemini/call_response_chunk.py +0 -85
- mirascope/core/gemini/dynamic_config.py +0 -26
- mirascope/core/gemini/stream.py +0 -121
- mirascope/core/gemini/tool.py +0 -104
- mirascope/core/groq/__init__.py +0 -21
- mirascope/core/groq/_call.py +0 -71
- mirascope/core/groq/_utils/__init__.py +0 -16
- mirascope/core/groq/_utils/_calculate_cost.py +0 -68
- mirascope/core/groq/_utils/_convert_message_params.py +0 -23
- mirascope/core/groq/_utils/_get_json_output.py +0 -27
- mirascope/core/groq/_utils/_handle_stream.py +0 -121
- mirascope/core/groq/_utils/_setup_call.py +0 -67
- mirascope/core/groq/call_params.py +0 -51
- mirascope/core/groq/call_response.py +0 -160
- mirascope/core/groq/call_response_chunk.py +0 -89
- mirascope/core/groq/dynamic_config.py +0 -26
- mirascope/core/groq/py.typed +0 -0
- mirascope/core/groq/stream.py +0 -136
- mirascope/core/groq/tool.py +0 -79
- mirascope/core/litellm/__init__.py +0 -6
- mirascope/core/litellm/_call.py +0 -73
- mirascope/core/litellm/_utils/__init__.py +0 -5
- mirascope/core/litellm/_utils/_setup_call.py +0 -46
- mirascope/core/litellm/py.typed +0 -0
- mirascope/core/mistral/__init__.py +0 -21
- mirascope/core/mistral/_call.py +0 -69
- mirascope/core/mistral/_utils/__init__.py +0 -16
- mirascope/core/mistral/_utils/_calculate_cost.py +0 -47
- mirascope/core/mistral/_utils/_convert_message_params.py +0 -23
- mirascope/core/mistral/_utils/_get_json_output.py +0 -28
- mirascope/core/mistral/_utils/_handle_stream.py +0 -121
- mirascope/core/mistral/_utils/_setup_call.py +0 -86
- mirascope/core/mistral/call_params.py +0 -36
- mirascope/core/mistral/call_response.py +0 -156
- mirascope/core/mistral/call_response_chunk.py +0 -84
- mirascope/core/mistral/dynamic_config.py +0 -24
- mirascope/core/mistral/py.typed +0 -0
- mirascope/core/mistral/stream.py +0 -117
- mirascope/core/mistral/tool.py +0 -77
- mirascope/core/openai/__init__.py +0 -21
- mirascope/core/openai/_call.py +0 -71
- mirascope/core/openai/_utils/__init__.py +0 -16
- mirascope/core/openai/_utils/_calculate_cost.py +0 -110
- mirascope/core/openai/_utils/_convert_message_params.py +0 -53
- mirascope/core/openai/_utils/_get_json_output.py +0 -27
- mirascope/core/openai/_utils/_handle_stream.py +0 -125
- mirascope/core/openai/_utils/_setup_call.py +0 -62
- mirascope/core/openai/call_params.py +0 -54
- mirascope/core/openai/call_response.py +0 -162
- mirascope/core/openai/call_response_chunk.py +0 -90
- mirascope/core/openai/dynamic_config.py +0 -26
- mirascope/core/openai/py.typed +0 -0
- mirascope/core/openai/stream.py +0 -148
- mirascope/core/openai/tool.py +0 -79
- mirascope/core/py.typed +0 -0
- mirascope/integrations/__init__.py +0 -20
- mirascope/integrations/_middleware_factory.py +0 -277
- mirascope/integrations/langfuse/__init__.py +0 -3
- mirascope/integrations/langfuse/_utils.py +0 -114
- mirascope/integrations/langfuse/_with_langfuse.py +0 -71
- mirascope/integrations/logfire/__init__.py +0 -3
- mirascope/integrations/logfire/_utils.py +0 -188
- mirascope/integrations/logfire/_with_logfire.py +0 -60
- mirascope/integrations/otel/__init__.py +0 -5
- mirascope/integrations/otel/_utils.py +0 -268
- mirascope/integrations/otel/_with_hyperdx.py +0 -61
- mirascope/integrations/otel/_with_otel.py +0 -60
- mirascope/integrations/tenacity.py +0 -50
- mirascope/py.typed +0 -0
- 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.0.5.dist-info/METADATA +0 -519
- mirascope-1.0.5.dist-info/RECORD +0 -198
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Base parameters for LLM providers."""
|
|
2
|
+
|
|
3
|
+
from typing import TypedDict
|
|
4
|
+
|
|
5
|
+
from .thinking_config import ThinkingConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Params(TypedDict, total=False):
|
|
9
|
+
"""Common parameters shared across LLM providers.
|
|
10
|
+
|
|
11
|
+
Note: Each provider may handle these parameters differently or not support them at all.
|
|
12
|
+
Please check provider-specific documentation for parameter support and behavior.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
temperature: float
|
|
16
|
+
"""Controls randomness in the output (0.0 to 1.0).
|
|
17
|
+
|
|
18
|
+
Lower temperatures are good for prompts that require a less open-ended or
|
|
19
|
+
creative response, while higher temperatures can lead to more diverse or
|
|
20
|
+
creative results.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
max_tokens: int
|
|
24
|
+
"""Maximum number of tokens to generate."""
|
|
25
|
+
|
|
26
|
+
top_p: float
|
|
27
|
+
"""Nucleus sampling parameter (0.0 to 1.0).
|
|
28
|
+
|
|
29
|
+
Tokens are selected from the most to least probable until the sum of their
|
|
30
|
+
probabilities equals this value. Use a lower value for less random responses and a
|
|
31
|
+
higher value for more random responses.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
top_k: int
|
|
35
|
+
"""Limits token selection to the k most probable tokens (typically 1 to 100).
|
|
36
|
+
|
|
37
|
+
For each token selection step, the ``top_k`` tokens with the
|
|
38
|
+
highest probabilities are sampled. Then tokens are further filtered based
|
|
39
|
+
on ``top_p`` with the final token selected using temperature sampling. Use
|
|
40
|
+
a lower number for less random responses and a higher number for more
|
|
41
|
+
random responses.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
seed: int
|
|
45
|
+
"""Random seed for reproducibility.
|
|
46
|
+
|
|
47
|
+
When ``seed`` is fixed to a specific number, the model makes a best
|
|
48
|
+
effort to provide the same response for repeated requests.
|
|
49
|
+
|
|
50
|
+
Not supported by all providers, and does not guarantee strict reproducibility.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
stop_sequences: list[str]
|
|
54
|
+
"""Stop sequences to end generation.
|
|
55
|
+
|
|
56
|
+
The model will stop generating text if one of these strings is encountered in the
|
|
57
|
+
response.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
thinking: ThinkingConfig | None
|
|
61
|
+
"""Configuration for extended reasoning/thinking.
|
|
62
|
+
|
|
63
|
+
Pass a `ThinkingConfig` to configure thinking behavior. The `level` field controls
|
|
64
|
+
whether thinking is enabled and how much reasoning to use. Level may be one of
|
|
65
|
+
"minimal", "low", "medium", or "high". If level is unset, then thinking is enabled
|
|
66
|
+
with a provider-specific default level.
|
|
67
|
+
|
|
68
|
+
`ThinkingConfig` can also include `encode_thoughts_as_text`, which is an advanced
|
|
69
|
+
feature for providing past thoughts back to the model as text content. This is
|
|
70
|
+
primarily useful for making thoughts transferable when passing a conversation
|
|
71
|
+
to a different model or provider than the one that generated the thinking.
|
|
72
|
+
"""
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Configuration for extended reasoning/thinking in LLM responses."""
|
|
2
|
+
|
|
3
|
+
from typing import Literal
|
|
4
|
+
from typing_extensions import Required, TypedDict
|
|
5
|
+
|
|
6
|
+
ThinkingLevel = Literal["none", "default", "minimal", "low", "medium", "high", "max"]
|
|
7
|
+
"""Level of effort/reasoning to apply to thinking."""
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ThinkingConfig(TypedDict, total=False):
|
|
11
|
+
"""Configuration for extended reasoning/thinking in LLM responses.
|
|
12
|
+
|
|
13
|
+
Thinking is a process where the model spends additional tokens reasoning about
|
|
14
|
+
the prompt before generating a response. Providing any `ThinkingConfig` will enable
|
|
15
|
+
thinking (unless it is specifically disabled via level="minimal"). Depending on
|
|
16
|
+
the provider and model, thinking may always be active regardless of user settings.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
level: Required[ThinkingLevel]
|
|
20
|
+
"""Level of effort/reasoning to apply to thinking.
|
|
21
|
+
|
|
22
|
+
- none: Disable thinking entirely. Minimizes cost and latency.
|
|
23
|
+
- default: Use the provider's default
|
|
24
|
+
- minimal: Use the provider's lowest setting for reasoning
|
|
25
|
+
- medium: Use a moderate amount of reasoning tokens
|
|
26
|
+
- high: Allow extensive resources for thinking
|
|
27
|
+
- max: Uses as much thinking as allowed by the provider.
|
|
28
|
+
|
|
29
|
+
Mirascope makes a best effort to apply the chosen thinking level, but exact behavior
|
|
30
|
+
varies by provider and model. For example, some models may not support thinking,
|
|
31
|
+
while other models may not allow disabling it.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
include_thoughts: bool
|
|
35
|
+
"""Whether to include Thought content in the model output.
|
|
36
|
+
|
|
37
|
+
Depending on the model and provider, enabling include_thoughts to true may
|
|
38
|
+
request reasoning summaries (which are not the underlying reasoning tokens,
|
|
39
|
+
but a readable summary produced by another model), or it may be the original
|
|
40
|
+
reasoning tokens.
|
|
41
|
+
|
|
42
|
+
When include_thoughts is false, no summaries will be requested, and thoughts
|
|
43
|
+
will not be included in the output even if they were provided by the provider.
|
|
44
|
+
|
|
45
|
+
Defaults to false.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
encode_thoughts_as_text: bool
|
|
49
|
+
"""Re-encode Thought content as text for model consumption.
|
|
50
|
+
|
|
51
|
+
If `True`, when an `AssistantMessage` contains `Thoughts` and is passed back
|
|
52
|
+
to an LLM, those `Thoughts` will be encoded as `Text`, ensuring the assistant
|
|
53
|
+
can read its prior reasoning. This contrasts with provider defaults which may
|
|
54
|
+
ignore prior thoughts, particularly if tool calls are not involved.
|
|
55
|
+
|
|
56
|
+
When `True`, Mirascope will re-encode messages rather than reusing raw provider
|
|
57
|
+
response content, which may disable provider-specific optimizations like cached
|
|
58
|
+
reasoning tokens.
|
|
59
|
+
|
|
60
|
+
Defaults to `False` if unset.
|
|
61
|
+
"""
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"""The prompt templates module for LLM interactions.
|
|
2
|
+
|
|
3
|
+
This module defines the prompt templates used in LLM interactions, which are written as
|
|
4
|
+
python functions.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from . import _utils
|
|
8
|
+
from .decorator import PromptDecorator, prompt
|
|
9
|
+
from .prompts import (
|
|
10
|
+
AsyncContextPrompt,
|
|
11
|
+
AsyncPrompt,
|
|
12
|
+
ContextPrompt,
|
|
13
|
+
Prompt,
|
|
14
|
+
)
|
|
15
|
+
from .protocols import (
|
|
16
|
+
AsyncContextMessageTemplate,
|
|
17
|
+
AsyncMessageTemplate,
|
|
18
|
+
ContextMessageTemplate,
|
|
19
|
+
MessageTemplate,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
"AsyncContextMessageTemplate",
|
|
24
|
+
"AsyncContextPrompt",
|
|
25
|
+
"AsyncMessageTemplate",
|
|
26
|
+
"AsyncPrompt",
|
|
27
|
+
"ContextMessageTemplate",
|
|
28
|
+
"ContextPrompt",
|
|
29
|
+
"MessageTemplate",
|
|
30
|
+
"Prompt",
|
|
31
|
+
"PromptDecorator",
|
|
32
|
+
"_utils",
|
|
33
|
+
"prompt",
|
|
34
|
+
]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
from typing_extensions import TypeIs
|
|
3
|
+
|
|
4
|
+
from ..context import DepsT, _utils as _context_utils
|
|
5
|
+
from ..types import P
|
|
6
|
+
from .protocols import (
|
|
7
|
+
AsyncContextMessageTemplate,
|
|
8
|
+
AsyncMessageTemplate,
|
|
9
|
+
ContextMessageTemplate,
|
|
10
|
+
MessageTemplate,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def is_context_promptable(
|
|
15
|
+
fn: ContextMessageTemplate[P, DepsT]
|
|
16
|
+
| AsyncContextMessageTemplate[P, DepsT]
|
|
17
|
+
| MessageTemplate[P]
|
|
18
|
+
| AsyncMessageTemplate[P],
|
|
19
|
+
) -> TypeIs[ContextMessageTemplate[P, DepsT] | AsyncContextMessageTemplate[P, DepsT]]:
|
|
20
|
+
"""Type guard to check if a function is a context promptable function."""
|
|
21
|
+
return _context_utils.first_param_is_context(fn)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def is_async_promptable(
|
|
25
|
+
fn: ContextMessageTemplate[P, DepsT]
|
|
26
|
+
| AsyncContextMessageTemplate[P, DepsT]
|
|
27
|
+
| MessageTemplate[P]
|
|
28
|
+
| AsyncMessageTemplate[P],
|
|
29
|
+
) -> TypeIs[AsyncMessageTemplate[P] | AsyncContextMessageTemplate[P, DepsT]]:
|
|
30
|
+
"""Type guard to check if a function is an async promptable function."""
|
|
31
|
+
return inspect.iscoroutinefunction(fn)
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"""The `prompt` decorator for writing messages as string templates."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Sequence
|
|
4
|
+
from typing import Generic, cast, overload
|
|
5
|
+
|
|
6
|
+
from ..context import DepsT
|
|
7
|
+
from ..formatting import FormatSpec, FormattableT
|
|
8
|
+
from ..tools import (
|
|
9
|
+
AsyncContextTool,
|
|
10
|
+
AsyncContextToolkit,
|
|
11
|
+
AsyncTool,
|
|
12
|
+
AsyncToolkit,
|
|
13
|
+
ContextTool,
|
|
14
|
+
ContextToolkit,
|
|
15
|
+
Tool,
|
|
16
|
+
Toolkit,
|
|
17
|
+
ToolT,
|
|
18
|
+
)
|
|
19
|
+
from ..types import P
|
|
20
|
+
from . import _utils
|
|
21
|
+
from .prompts import (
|
|
22
|
+
AsyncContextPrompt,
|
|
23
|
+
AsyncPrompt,
|
|
24
|
+
ContextPrompt,
|
|
25
|
+
Prompt,
|
|
26
|
+
)
|
|
27
|
+
from .protocols import (
|
|
28
|
+
AsyncContextMessageTemplate,
|
|
29
|
+
AsyncMessageTemplate,
|
|
30
|
+
ContextMessageTemplate,
|
|
31
|
+
MessageTemplate,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class PromptDecorator(Generic[ToolT, FormattableT]):
|
|
36
|
+
"""Decorator for converting a `MessageTemplate` into a `Prompt`.
|
|
37
|
+
|
|
38
|
+
Takes a raw prompt function that returns message content and wraps it with
|
|
39
|
+
tools and format support, creating a `Prompt` that can be called with a model.
|
|
40
|
+
|
|
41
|
+
The decorator automatically detects whether the function is async or context-aware
|
|
42
|
+
and creates the appropriate Prompt variant (Prompt, AsyncPrompt, ContextPrompt,
|
|
43
|
+
or AsyncContextPrompt).
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
tools: Sequence[ToolT] | None
|
|
47
|
+
"""The tools that are included in the prompt, if any."""
|
|
48
|
+
|
|
49
|
+
format: FormatSpec[FormattableT] | None
|
|
50
|
+
"""The structured output format off the prompt, if any."""
|
|
51
|
+
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
tools: Sequence[ToolT] | None = None,
|
|
55
|
+
format: FormatSpec[FormattableT] | None = None,
|
|
56
|
+
) -> None:
|
|
57
|
+
"""Initialize the decorator with optional tools and format."""
|
|
58
|
+
self.tools = tools
|
|
59
|
+
self.format = format
|
|
60
|
+
|
|
61
|
+
@overload
|
|
62
|
+
def __call__(
|
|
63
|
+
self: "PromptDecorator[AsyncTool | AsyncContextTool[DepsT], FormattableT]",
|
|
64
|
+
fn: AsyncContextMessageTemplate[P, DepsT],
|
|
65
|
+
) -> AsyncContextPrompt[P, DepsT, FormattableT]:
|
|
66
|
+
"""Decorator for creating async context prompts."""
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
@overload
|
|
70
|
+
def __call__(
|
|
71
|
+
self: "PromptDecorator[Tool | ContextTool[DepsT], FormattableT]",
|
|
72
|
+
fn: ContextMessageTemplate[P, DepsT],
|
|
73
|
+
) -> ContextPrompt[P, DepsT, FormattableT]:
|
|
74
|
+
"""Decorator for creating context prompts."""
|
|
75
|
+
...
|
|
76
|
+
|
|
77
|
+
@overload
|
|
78
|
+
def __call__(
|
|
79
|
+
self: "PromptDecorator[AsyncTool, FormattableT]",
|
|
80
|
+
fn: AsyncMessageTemplate[P],
|
|
81
|
+
) -> AsyncPrompt[P, FormattableT]:
|
|
82
|
+
"""Decorator for creating async prompts."""
|
|
83
|
+
...
|
|
84
|
+
|
|
85
|
+
@overload
|
|
86
|
+
def __call__(
|
|
87
|
+
self: "PromptDecorator[Tool, FormattableT]",
|
|
88
|
+
fn: MessageTemplate[P],
|
|
89
|
+
) -> Prompt[P, FormattableT]:
|
|
90
|
+
"""Decorator for creating prompts."""
|
|
91
|
+
...
|
|
92
|
+
|
|
93
|
+
def __call__(
|
|
94
|
+
self,
|
|
95
|
+
fn: ContextMessageTemplate[P, DepsT]
|
|
96
|
+
| AsyncContextMessageTemplate[P, DepsT]
|
|
97
|
+
| MessageTemplate[P]
|
|
98
|
+
| AsyncMessageTemplate[P],
|
|
99
|
+
) -> (
|
|
100
|
+
Prompt[P, FormattableT]
|
|
101
|
+
| AsyncPrompt[P, FormattableT]
|
|
102
|
+
| ContextPrompt[P, DepsT, FormattableT]
|
|
103
|
+
| AsyncContextPrompt[P, DepsT, FormattableT]
|
|
104
|
+
):
|
|
105
|
+
"""Decorator for creating a prompt with tools and format."""
|
|
106
|
+
is_context = _utils.is_context_promptable(fn)
|
|
107
|
+
is_async = _utils.is_async_promptable(fn)
|
|
108
|
+
|
|
109
|
+
if is_context and is_async:
|
|
110
|
+
tools = cast(
|
|
111
|
+
Sequence[AsyncTool | AsyncContextTool[DepsT]] | None, self.tools
|
|
112
|
+
)
|
|
113
|
+
return AsyncContextPrompt(
|
|
114
|
+
fn=fn,
|
|
115
|
+
toolkit=AsyncContextToolkit(tools=tools),
|
|
116
|
+
format=self.format,
|
|
117
|
+
)
|
|
118
|
+
elif is_context:
|
|
119
|
+
tools = cast(Sequence[Tool | ContextTool[DepsT]] | None, self.tools)
|
|
120
|
+
return ContextPrompt(
|
|
121
|
+
fn=fn,
|
|
122
|
+
toolkit=ContextToolkit(tools=tools),
|
|
123
|
+
format=self.format,
|
|
124
|
+
)
|
|
125
|
+
elif is_async:
|
|
126
|
+
tools = cast(Sequence[AsyncTool] | None, self.tools)
|
|
127
|
+
return AsyncPrompt(
|
|
128
|
+
fn=fn, toolkit=AsyncToolkit(tools=tools), format=self.format
|
|
129
|
+
)
|
|
130
|
+
else:
|
|
131
|
+
tools = cast(Sequence[Tool] | None, self.tools)
|
|
132
|
+
return Prompt(fn=fn, toolkit=Toolkit(tools=tools), format=self.format)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@overload
|
|
136
|
+
def prompt( # pyright: ignore[reportOverlappingOverload]
|
|
137
|
+
__fn: ContextMessageTemplate[P, DepsT],
|
|
138
|
+
) -> ContextPrompt[P, DepsT, None]:
|
|
139
|
+
"""Create a decorator for sync ContextPrompt functions (no arguments)."""
|
|
140
|
+
...
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@overload
|
|
144
|
+
def prompt( # pyright: ignore[reportOverlappingOverload]
|
|
145
|
+
__fn: AsyncContextMessageTemplate[P, DepsT],
|
|
146
|
+
) -> AsyncContextPrompt[P, DepsT, None]:
|
|
147
|
+
"""Create a decorator for async ContextPrompt functions (no arguments)."""
|
|
148
|
+
...
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@overload
|
|
152
|
+
def prompt(
|
|
153
|
+
__fn: MessageTemplate[P],
|
|
154
|
+
) -> Prompt[P, None]:
|
|
155
|
+
"""Create a decorator for sync Prompt functions (no arguments)."""
|
|
156
|
+
...
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
@overload
|
|
160
|
+
def prompt(
|
|
161
|
+
__fn: AsyncMessageTemplate[P],
|
|
162
|
+
) -> AsyncPrompt[P, None]:
|
|
163
|
+
"""Create a decorator for async Prompt functions (no arguments)."""
|
|
164
|
+
...
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
@overload
|
|
168
|
+
def prompt(
|
|
169
|
+
*,
|
|
170
|
+
tools: Sequence[ToolT] | None = None,
|
|
171
|
+
format: FormatSpec[FormattableT] | None = None,
|
|
172
|
+
) -> PromptDecorator[ToolT, FormattableT]:
|
|
173
|
+
"""Create a decorator for Prompt functions with tools and format"""
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def prompt(
|
|
177
|
+
__fn: AsyncContextMessageTemplate[P, DepsT]
|
|
178
|
+
| ContextMessageTemplate[P, DepsT]
|
|
179
|
+
| AsyncMessageTemplate[P]
|
|
180
|
+
| MessageTemplate[P]
|
|
181
|
+
| None = None,
|
|
182
|
+
*,
|
|
183
|
+
tools: Sequence[ToolT] | None = None,
|
|
184
|
+
format: FormatSpec[FormattableT] | None = None,
|
|
185
|
+
) -> (
|
|
186
|
+
AsyncContextPrompt[P, DepsT, FormattableT]
|
|
187
|
+
| ContextPrompt[P, DepsT, FormattableT]
|
|
188
|
+
| AsyncPrompt[P, FormattableT]
|
|
189
|
+
| Prompt[P, FormattableT]
|
|
190
|
+
| PromptDecorator[ToolT, FormattableT]
|
|
191
|
+
):
|
|
192
|
+
"""Decorates a `MessageTemplate` to create a `Prompt` callable with a model.
|
|
193
|
+
|
|
194
|
+
This decorator transforms a raw prompt function (that returns message content)
|
|
195
|
+
into a `Prompt` object that can be invoked with a model to generate LLM responses.
|
|
196
|
+
|
|
197
|
+
The decorator automatically detects the function type:
|
|
198
|
+
- If the first parameter is named `'ctx'` with type `llm.Context[T]`, creates a `ContextPrompt`
|
|
199
|
+
- If the function is async, creates an `AsyncPrompt` or `AsyncContextPrompt`
|
|
200
|
+
- Otherwise, creates a regular `Prompt`
|
|
201
|
+
|
|
202
|
+
Args:
|
|
203
|
+
__fn: The prompt function to decorate (optional, for decorator syntax without parens)
|
|
204
|
+
tools: Optional `Sequence` of tools to make available to the LLM
|
|
205
|
+
format: Optional response format class (`BaseModel`) or Format instance
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
A `Prompt` variant (Prompt, AsyncPrompt, ContextPrompt, or AsyncContextPrompt)
|
|
209
|
+
or a `PromptDecorator` if called with arguments
|
|
210
|
+
"""
|
|
211
|
+
decorator = PromptDecorator(tools=tools, format=format)
|
|
212
|
+
if __fn is None:
|
|
213
|
+
return decorator
|
|
214
|
+
# TODO: See if we can do without the pyright: ignores here
|
|
215
|
+
return decorator(__fn) # pyright: ignore[reportUnknownVariableType, reportCallIssue]
|