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
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"""This module contains the `OpenAICallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from openai.types.chat import (
|
|
7
|
-
ChatCompletion,
|
|
8
|
-
ChatCompletionAssistantMessageParam,
|
|
9
|
-
ChatCompletionMessageParam,
|
|
10
|
-
ChatCompletionToolMessageParam,
|
|
11
|
-
ChatCompletionUserMessageParam,
|
|
12
|
-
)
|
|
13
|
-
from openai.types.completion_usage import CompletionUsage
|
|
14
|
-
from pydantic import SerializeAsAny, SkipValidation, computed_field
|
|
15
|
-
|
|
16
|
-
from ..base import BaseCallResponse
|
|
17
|
-
from ._utils import calculate_cost
|
|
18
|
-
from .call_params import OpenAICallParams
|
|
19
|
-
from .dynamic_config import OpenAIDynamicConfig
|
|
20
|
-
from .tool import OpenAITool
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class OpenAICallResponse(
|
|
24
|
-
BaseCallResponse[
|
|
25
|
-
ChatCompletion,
|
|
26
|
-
OpenAITool,
|
|
27
|
-
OpenAIDynamicConfig,
|
|
28
|
-
ChatCompletionMessageParam,
|
|
29
|
-
OpenAICallParams,
|
|
30
|
-
ChatCompletionUserMessageParam,
|
|
31
|
-
]
|
|
32
|
-
):
|
|
33
|
-
"""A convenience wrapper around the OpenAI `ChatCompletion` response.
|
|
34
|
-
|
|
35
|
-
When calling the OpenAI API using a function decorated with `openai_call`, the
|
|
36
|
-
response will be an `OpenAICallResponse` instance with properties that allow for
|
|
37
|
-
more convenience access to commonly used attributes.
|
|
38
|
-
|
|
39
|
-
Example:
|
|
40
|
-
|
|
41
|
-
```python
|
|
42
|
-
from mirascope.core import prompt_template
|
|
43
|
-
from mirascope.core.openai import openai_call
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
@openai_call("gpt-4o")
|
|
47
|
-
@prompt_template("Recommend a {genre} book")
|
|
48
|
-
def recommend_book(genre: str):
|
|
49
|
-
...
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
response = recommend_book("fantasy") # response is an `OpenAICallResponse` instance
|
|
53
|
-
print(response.content)
|
|
54
|
-
```
|
|
55
|
-
"""
|
|
56
|
-
|
|
57
|
-
response: SkipValidation[ChatCompletion]
|
|
58
|
-
|
|
59
|
-
_provider = "openai"
|
|
60
|
-
|
|
61
|
-
@property
|
|
62
|
-
def content(self) -> str:
|
|
63
|
-
"""Returns the content of the chat completion for the 0th choice."""
|
|
64
|
-
message = self.response.choices[0].message
|
|
65
|
-
return message.content if message.content is not None else ""
|
|
66
|
-
|
|
67
|
-
@property
|
|
68
|
-
def finish_reasons(self) -> list[str]:
|
|
69
|
-
"""Returns the finish reasons of the response."""
|
|
70
|
-
return [str(choice.finish_reason) for choice in self.response.choices]
|
|
71
|
-
|
|
72
|
-
@property
|
|
73
|
-
def model(self) -> str:
|
|
74
|
-
"""Returns the name of the response model."""
|
|
75
|
-
return self.response.model
|
|
76
|
-
|
|
77
|
-
@property
|
|
78
|
-
def id(self) -> str:
|
|
79
|
-
"""Returns the id of the response."""
|
|
80
|
-
return self.response.id
|
|
81
|
-
|
|
82
|
-
@property
|
|
83
|
-
def usage(self) -> CompletionUsage | None:
|
|
84
|
-
"""Returns the usage of the chat completion."""
|
|
85
|
-
return self.response.usage
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def input_tokens(self) -> int | None:
|
|
89
|
-
"""Returns the number of input tokens."""
|
|
90
|
-
return self.usage.prompt_tokens if self.usage else None
|
|
91
|
-
|
|
92
|
-
@property
|
|
93
|
-
def output_tokens(self) -> int | None:
|
|
94
|
-
"""Returns the number of output tokens."""
|
|
95
|
-
return self.usage.completion_tokens if self.usage else None
|
|
96
|
-
|
|
97
|
-
@property
|
|
98
|
-
def cost(self) -> float | None:
|
|
99
|
-
"""Returns the cost of the call."""
|
|
100
|
-
return calculate_cost(self.input_tokens, self.output_tokens, self.model)
|
|
101
|
-
|
|
102
|
-
@computed_field
|
|
103
|
-
@property
|
|
104
|
-
def message_param(self) -> SerializeAsAny[ChatCompletionAssistantMessageParam]:
|
|
105
|
-
"""Returns the assistants's response as a message parameter."""
|
|
106
|
-
return self.response.choices[0].message.model_dump(exclude={"function_call"}) # type: ignore
|
|
107
|
-
|
|
108
|
-
@computed_field
|
|
109
|
-
@property
|
|
110
|
-
def tools(self) -> list[OpenAITool] | None:
|
|
111
|
-
"""Returns any available tool calls as their `OpenAITool` definition.
|
|
112
|
-
|
|
113
|
-
Raises:
|
|
114
|
-
ValidationError: if a tool call doesn't match the tool's schema.
|
|
115
|
-
"""
|
|
116
|
-
tool_calls = self.response.choices[0].message.tool_calls
|
|
117
|
-
if not self.tool_types or not tool_calls:
|
|
118
|
-
return None
|
|
119
|
-
|
|
120
|
-
extracted_tools = []
|
|
121
|
-
for tool_call in tool_calls:
|
|
122
|
-
for tool_type in self.tool_types:
|
|
123
|
-
if tool_call.function.name == tool_type._name():
|
|
124
|
-
extracted_tools.append(tool_type.from_tool_call(tool_call))
|
|
125
|
-
break
|
|
126
|
-
|
|
127
|
-
return extracted_tools
|
|
128
|
-
|
|
129
|
-
@computed_field
|
|
130
|
-
@property
|
|
131
|
-
def tool(self) -> OpenAITool | None:
|
|
132
|
-
"""Returns the 0th tool for the 0th choice message.
|
|
133
|
-
|
|
134
|
-
Raises:
|
|
135
|
-
ValidationError: if the tool call doesn't match the tool's schema.
|
|
136
|
-
"""
|
|
137
|
-
if tools := self.tools:
|
|
138
|
-
return tools[0]
|
|
139
|
-
return None
|
|
140
|
-
|
|
141
|
-
@classmethod
|
|
142
|
-
def tool_message_params(
|
|
143
|
-
cls, tools_and_outputs: list[tuple[OpenAITool, str]]
|
|
144
|
-
) -> list[ChatCompletionToolMessageParam]:
|
|
145
|
-
"""Returns the tool message parameters for tool call results.
|
|
146
|
-
|
|
147
|
-
Args:
|
|
148
|
-
tools_and_outputs: The list of tools and their outputs from which the tool
|
|
149
|
-
message parameters should be constructed.
|
|
150
|
-
|
|
151
|
-
Returns:
|
|
152
|
-
The list of constructed `ChatCompletionToolMessageParam` parameters.
|
|
153
|
-
"""
|
|
154
|
-
return [
|
|
155
|
-
ChatCompletionToolMessageParam(
|
|
156
|
-
role="tool",
|
|
157
|
-
content=output,
|
|
158
|
-
tool_call_id=tool.tool_call.id,
|
|
159
|
-
name=tool._name(), # type: ignore
|
|
160
|
-
)
|
|
161
|
-
for tool, output in tools_and_outputs
|
|
162
|
-
]
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"""This module contains the `OpenAICallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from openai.types.chat import ChatCompletionChunk
|
|
7
|
-
from openai.types.chat.chat_completion_chunk import Choice
|
|
8
|
-
from openai.types.completion_usage import CompletionUsage
|
|
9
|
-
from pydantic import SkipValidation
|
|
10
|
-
|
|
11
|
-
from ..base import BaseCallResponseChunk
|
|
12
|
-
|
|
13
|
-
FinishReason = Choice.__annotations__["finish_reason"]
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class OpenAICallResponseChunk(BaseCallResponseChunk[ChatCompletionChunk, FinishReason]):
|
|
17
|
-
"""A convenience wrapper around the OpenAI `ChatCompletionChunk` streamed chunks.
|
|
18
|
-
|
|
19
|
-
When calling the OpenAI API using a function decorated with `openai_call` and
|
|
20
|
-
`stream` set to `True`, the stream will contain `OpenAIResponseChunk` instances with
|
|
21
|
-
properties that allow for more convenient access to commonly used attributes.
|
|
22
|
-
|
|
23
|
-
Example:
|
|
24
|
-
|
|
25
|
-
```python
|
|
26
|
-
from mirascope.core import prompt_template
|
|
27
|
-
from mirascope.core.openai import openai_call
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
@openai_call("gpt-4o-mini", stream=True)
|
|
31
|
-
@prompt_template("Recommend a {genre} book")
|
|
32
|
-
def recommend_book(genre: str):
|
|
33
|
-
...
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
stream = recommend_book("fantasy") # response is an `OpenAIStream`
|
|
37
|
-
for chunk, _ in stream:
|
|
38
|
-
print(chunk.content, end="", flush=True)
|
|
39
|
-
```
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
chunk: SkipValidation[ChatCompletionChunk]
|
|
43
|
-
|
|
44
|
-
@property
|
|
45
|
-
def content(self) -> str:
|
|
46
|
-
"""Returns the content for the 0th choice delta."""
|
|
47
|
-
delta = None
|
|
48
|
-
if self.chunk.choices:
|
|
49
|
-
delta = self.chunk.choices[0].delta
|
|
50
|
-
return delta.content if delta is not None and delta.content else ""
|
|
51
|
-
|
|
52
|
-
@property
|
|
53
|
-
def finish_reasons(self) -> list[FinishReason]:
|
|
54
|
-
"""Returns the finish reasons of the response."""
|
|
55
|
-
return [
|
|
56
|
-
choice.finish_reason
|
|
57
|
-
for choice in self.chunk.choices
|
|
58
|
-
if choice.finish_reason
|
|
59
|
-
]
|
|
60
|
-
|
|
61
|
-
@property
|
|
62
|
-
def model(self) -> str:
|
|
63
|
-
"""Returns the name of the response model."""
|
|
64
|
-
return self.chunk.model
|
|
65
|
-
|
|
66
|
-
@property
|
|
67
|
-
def id(self) -> str:
|
|
68
|
-
"""Returns the id of the response."""
|
|
69
|
-
return self.chunk.id
|
|
70
|
-
|
|
71
|
-
@property
|
|
72
|
-
def usage(self) -> CompletionUsage | None:
|
|
73
|
-
"""Returns the usage of the chat completion."""
|
|
74
|
-
if hasattr(self.chunk, "usage") and self.chunk.usage:
|
|
75
|
-
return self.chunk.usage
|
|
76
|
-
return None
|
|
77
|
-
|
|
78
|
-
@property
|
|
79
|
-
def input_tokens(self) -> int | None:
|
|
80
|
-
"""Returns the number of input tokens."""
|
|
81
|
-
if self.usage:
|
|
82
|
-
return self.usage.prompt_tokens
|
|
83
|
-
return None
|
|
84
|
-
|
|
85
|
-
@property
|
|
86
|
-
def output_tokens(self) -> int | None:
|
|
87
|
-
"""Returns the number of output tokens."""
|
|
88
|
-
if self.usage:
|
|
89
|
-
return self.usage.completion_tokens
|
|
90
|
-
return None
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"""This module defines the function return type for functions as LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/dynamic_configuration.md#dynamic-configuration-options
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from openai.types.chat import ChatCompletionMessageParam
|
|
7
|
-
|
|
8
|
-
from ..base import BaseDynamicConfig
|
|
9
|
-
from .call_params import OpenAICallParams
|
|
10
|
-
|
|
11
|
-
OpenAIDynamicConfig = BaseDynamicConfig[ChatCompletionMessageParam, OpenAICallParams]
|
|
12
|
-
"""The function return type for functions wrapped with the `openai_call` decorator.
|
|
13
|
-
|
|
14
|
-
Example:
|
|
15
|
-
|
|
16
|
-
```python
|
|
17
|
-
from mirascope.core import prompt_template
|
|
18
|
-
from mirascope.core.openai import OpenAIDynamicConfig, openai_call
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@openai_call("gpt-4o-mini")
|
|
22
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
23
|
-
def recommend_book(genre: str) -> OpenAIDynamicConfig:
|
|
24
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
25
|
-
```
|
|
26
|
-
"""
|
mirascope/core/openai/py.typed
DELETED
|
File without changes
|
mirascope/core/openai/stream.py
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"""The `OpenAIStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from openai.types.chat import (
|
|
7
|
-
ChatCompletion,
|
|
8
|
-
ChatCompletionAssistantMessageParam,
|
|
9
|
-
ChatCompletionMessage,
|
|
10
|
-
ChatCompletionMessageParam,
|
|
11
|
-
ChatCompletionMessageToolCall,
|
|
12
|
-
ChatCompletionMessageToolCallParam,
|
|
13
|
-
ChatCompletionToolMessageParam,
|
|
14
|
-
ChatCompletionUserMessageParam,
|
|
15
|
-
)
|
|
16
|
-
from openai.types.chat.chat_completion import Choice
|
|
17
|
-
from openai.types.chat.chat_completion_message_tool_call_param import Function
|
|
18
|
-
from openai.types.completion_usage import CompletionUsage
|
|
19
|
-
|
|
20
|
-
from ..base.stream import BaseStream
|
|
21
|
-
from ._utils import calculate_cost
|
|
22
|
-
from .call_params import OpenAICallParams
|
|
23
|
-
from .call_response import OpenAICallResponse
|
|
24
|
-
from .call_response_chunk import OpenAICallResponseChunk
|
|
25
|
-
from .dynamic_config import OpenAIDynamicConfig
|
|
26
|
-
from .tool import OpenAITool
|
|
27
|
-
|
|
28
|
-
FinishReason = Choice.__annotations__["finish_reason"]
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
class OpenAIStream(
|
|
32
|
-
BaseStream[
|
|
33
|
-
OpenAICallResponse,
|
|
34
|
-
OpenAICallResponseChunk,
|
|
35
|
-
ChatCompletionUserMessageParam,
|
|
36
|
-
ChatCompletionAssistantMessageParam,
|
|
37
|
-
ChatCompletionToolMessageParam,
|
|
38
|
-
ChatCompletionMessageParam,
|
|
39
|
-
OpenAITool,
|
|
40
|
-
OpenAIDynamicConfig,
|
|
41
|
-
OpenAICallParams,
|
|
42
|
-
FinishReason,
|
|
43
|
-
]
|
|
44
|
-
):
|
|
45
|
-
"""A class for convenience around streaming OpenAI LLM calls.
|
|
46
|
-
|
|
47
|
-
Example:
|
|
48
|
-
|
|
49
|
-
```python
|
|
50
|
-
from mirascope.core import prompt_template
|
|
51
|
-
from mirascope.core.openai import openai_call
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
@openai_call("gpt-4o-mini", stream=True)
|
|
55
|
-
@prompt_template("Recommend a {genre} book")
|
|
56
|
-
def recommend_book(genre: str):
|
|
57
|
-
...
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
stream = recommend_book("fantasy") # returns `OpenAIStream` instance
|
|
61
|
-
for chunk, _ in stream:
|
|
62
|
-
print(chunk.content, end="", flush=True)
|
|
63
|
-
```
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
_provider = "openai"
|
|
67
|
-
|
|
68
|
-
@property
|
|
69
|
-
def cost(self) -> float | None:
|
|
70
|
-
"""Returns the cost of the call."""
|
|
71
|
-
return calculate_cost(self.input_tokens, self.output_tokens, self.model)
|
|
72
|
-
|
|
73
|
-
def _construct_message_param(
|
|
74
|
-
self,
|
|
75
|
-
tool_calls: list[ChatCompletionMessageToolCall] | None = None,
|
|
76
|
-
content: str | None = None,
|
|
77
|
-
) -> ChatCompletionAssistantMessageParam:
|
|
78
|
-
"""Constructs the message parameter for the assistant."""
|
|
79
|
-
message_param = ChatCompletionAssistantMessageParam(
|
|
80
|
-
role="assistant", content=content
|
|
81
|
-
)
|
|
82
|
-
if tool_calls:
|
|
83
|
-
message_param["tool_calls"] = [
|
|
84
|
-
ChatCompletionMessageToolCallParam(
|
|
85
|
-
type="function",
|
|
86
|
-
function=Function(
|
|
87
|
-
arguments=tool_call.function.arguments,
|
|
88
|
-
name=tool_call.function.name,
|
|
89
|
-
),
|
|
90
|
-
id=tool_call.id,
|
|
91
|
-
)
|
|
92
|
-
for tool_call in tool_calls
|
|
93
|
-
]
|
|
94
|
-
return message_param
|
|
95
|
-
|
|
96
|
-
def construct_call_response(self) -> OpenAICallResponse:
|
|
97
|
-
"""Constructs the call response from a consumed OpenAIStream.
|
|
98
|
-
|
|
99
|
-
Raises:
|
|
100
|
-
ValueError: if the stream has not yet been consumed.
|
|
101
|
-
"""
|
|
102
|
-
if not hasattr(self, "message_param"):
|
|
103
|
-
raise ValueError(
|
|
104
|
-
"No stream response, check if the stream has been consumed."
|
|
105
|
-
)
|
|
106
|
-
message = {
|
|
107
|
-
"role": self.message_param["role"],
|
|
108
|
-
"content": self.message_param.get("content", ""),
|
|
109
|
-
"tool_calls": self.message_param.get("tool_calls", []),
|
|
110
|
-
}
|
|
111
|
-
if not self.input_tokens and not self.output_tokens:
|
|
112
|
-
usage = None
|
|
113
|
-
else:
|
|
114
|
-
usage = CompletionUsage(
|
|
115
|
-
prompt_tokens=int(self.input_tokens or 0),
|
|
116
|
-
completion_tokens=int(self.output_tokens or 0),
|
|
117
|
-
total_tokens=int(self.input_tokens or 0) + int(self.output_tokens or 0),
|
|
118
|
-
)
|
|
119
|
-
completion = ChatCompletion(
|
|
120
|
-
id=self.id if self.id else "",
|
|
121
|
-
model=self.model,
|
|
122
|
-
choices=[
|
|
123
|
-
Choice(
|
|
124
|
-
finish_reason=self.finish_reasons[0]
|
|
125
|
-
if self.finish_reasons
|
|
126
|
-
else "stop",
|
|
127
|
-
index=0,
|
|
128
|
-
message=ChatCompletionMessage.model_validate(message),
|
|
129
|
-
)
|
|
130
|
-
],
|
|
131
|
-
created=0,
|
|
132
|
-
object="chat.completion",
|
|
133
|
-
usage=usage,
|
|
134
|
-
)
|
|
135
|
-
return OpenAICallResponse(
|
|
136
|
-
metadata=self.metadata,
|
|
137
|
-
response=completion,
|
|
138
|
-
tool_types=self.tool_types,
|
|
139
|
-
prompt_template=self.prompt_template,
|
|
140
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
141
|
-
dynamic_config=self.dynamic_config,
|
|
142
|
-
messages=self.messages,
|
|
143
|
-
call_params=self.call_params,
|
|
144
|
-
call_kwargs=self.call_kwargs,
|
|
145
|
-
user_message_param=self.user_message_param,
|
|
146
|
-
start_time=self.start_time,
|
|
147
|
-
end_time=self.end_time,
|
|
148
|
-
)
|
mirascope/core/openai/tool.py
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"""The `OpenAITool` class for easy tool usage with OpenAI LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md#using-tools-with-standard-calls
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import jiter
|
|
9
|
-
from openai.types.chat import (
|
|
10
|
-
ChatCompletionMessageToolCall,
|
|
11
|
-
ChatCompletionToolParam,
|
|
12
|
-
)
|
|
13
|
-
from openai.types.shared_params import FunctionDefinition
|
|
14
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
15
|
-
|
|
16
|
-
from ..base import BaseTool
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class OpenAITool(BaseTool):
|
|
20
|
-
"""A class for defining tools for OpenAI LLM calls.
|
|
21
|
-
|
|
22
|
-
Example:
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
from mirascope.core import prompt_template
|
|
26
|
-
from mirascope.core.openai import openai_call
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def format_book(title: str, author: str) -> str:
|
|
30
|
-
return f"{title} by {author}"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@openai_call("gpt-4o-mini", tools=[format_book])
|
|
34
|
-
@prompt_template("Recommend a {genre} book")
|
|
35
|
-
def recommend_book(genre: str):
|
|
36
|
-
...
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
response = recommend_book("fantasy")
|
|
40
|
-
if tool := response.tool: # returns an `OpenAITool` instance
|
|
41
|
-
print(tool.call())
|
|
42
|
-
```
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
tool_call: SkipJsonSchema[ChatCompletionMessageToolCall]
|
|
46
|
-
|
|
47
|
-
@classmethod
|
|
48
|
-
def tool_schema(cls) -> ChatCompletionToolParam:
|
|
49
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
50
|
-
|
|
51
|
-
Example:
|
|
52
|
-
```python
|
|
53
|
-
from mirascope.core.openai import OpenAITool
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def format_book(title: str, author: str) -> str:
|
|
57
|
-
return f"{title} by {author}"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
tool_type = OpenAITool.type_from_fn(format_book)
|
|
61
|
-
print(tool_type.tool_schema()) # prints the OpenAI-specific tool schema
|
|
62
|
-
```
|
|
63
|
-
"""
|
|
64
|
-
fn = FunctionDefinition(name=cls._name(), description=cls._description())
|
|
65
|
-
model_schema = cls.model_tool_schema()
|
|
66
|
-
if model_schema["properties"]:
|
|
67
|
-
fn["parameters"] = model_schema
|
|
68
|
-
return ChatCompletionToolParam(function=fn, type="function")
|
|
69
|
-
|
|
70
|
-
@classmethod
|
|
71
|
-
def from_tool_call(cls, tool_call: ChatCompletionMessageToolCall) -> OpenAITool:
|
|
72
|
-
"""Constructs an `OpenAITool` instance from a `tool_call`.
|
|
73
|
-
|
|
74
|
-
Args:
|
|
75
|
-
tool_call: The OpenAI tool call from which to construct this tool instance.
|
|
76
|
-
"""
|
|
77
|
-
model_json = jiter.from_json(tool_call.function.arguments.encode())
|
|
78
|
-
model_json["tool_call"] = tool_call.model_dump()
|
|
79
|
-
return cls.model_validate(model_json)
|
mirascope/core/py.typed
DELETED
|
File without changes
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"""Integrations with third party libraries."""
|
|
2
|
-
|
|
3
|
-
from contextlib import suppress
|
|
4
|
-
|
|
5
|
-
from ._middleware_factory import middleware_factory
|
|
6
|
-
|
|
7
|
-
with suppress(ImportError):
|
|
8
|
-
from . import logfire as logfire
|
|
9
|
-
|
|
10
|
-
with suppress(ImportError):
|
|
11
|
-
from . import langfuse as langfuse
|
|
12
|
-
|
|
13
|
-
with suppress(ImportError):
|
|
14
|
-
from . import otel as otel
|
|
15
|
-
|
|
16
|
-
with suppress(ImportError):
|
|
17
|
-
from . import tenacity as tenacity
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
__all__ = ["langfuse", "logfire", "middleware_factory", "otel", "tenacity"]
|