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,89 +0,0 @@
|
|
|
1
|
-
"""This module contains the `GroqCallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from groq.types.chat import ChatCompletionChunk
|
|
7
|
-
from groq.types.chat.chat_completion import Choice
|
|
8
|
-
from groq.types.completion_usage import CompletionUsage
|
|
9
|
-
|
|
10
|
-
from ..base import BaseCallResponseChunk
|
|
11
|
-
|
|
12
|
-
FinishReason = Choice.__annotations__["finish_reason"]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class GroqCallResponseChunk(BaseCallResponseChunk[ChatCompletionChunk, FinishReason]):
|
|
16
|
-
"""A convenience wrapper around the Groq `ChatCompletionChunk` streamed chunks.
|
|
17
|
-
|
|
18
|
-
When calling the Groq API using a function decorated with `groq_call` and
|
|
19
|
-
`stream` set to `True`, the stream will contain `GroqResponseChunk` instances with
|
|
20
|
-
properties that allow for more convenient access to commonly used attributes.
|
|
21
|
-
|
|
22
|
-
Example:
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
from mirascope.core import prompt_template
|
|
26
|
-
from mirascope.core.groq import groq_call
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@groq_call("llama-3.1-8b-instant", stream=True)
|
|
30
|
-
@prompt_template("Recommend a {genre} book")
|
|
31
|
-
def recommend_book(genre: str):
|
|
32
|
-
...
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
stream = recommend_book("fantasy") # response is an `GroqStream`
|
|
36
|
-
for chunk, _ in stream:
|
|
37
|
-
print(chunk.content, end="", flush=True)
|
|
38
|
-
```
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
@property
|
|
42
|
-
def content(self) -> str:
|
|
43
|
-
"""Returns the content for the 0th choice delta."""
|
|
44
|
-
delta = None
|
|
45
|
-
if self.chunk.choices:
|
|
46
|
-
delta = self.chunk.choices[0].delta
|
|
47
|
-
return delta.content if delta is not None and delta.content else ""
|
|
48
|
-
|
|
49
|
-
@property
|
|
50
|
-
def finish_reasons(
|
|
51
|
-
self,
|
|
52
|
-
) -> list[FinishReason]:
|
|
53
|
-
"""Returns the finish reasons of the response."""
|
|
54
|
-
return [
|
|
55
|
-
choice.finish_reason
|
|
56
|
-
for choice in self.chunk.choices
|
|
57
|
-
if choice.finish_reason
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
@property
|
|
61
|
-
def model(self) -> str:
|
|
62
|
-
"""Returns the name of the response model."""
|
|
63
|
-
return self.chunk.model
|
|
64
|
-
|
|
65
|
-
@property
|
|
66
|
-
def id(self) -> str:
|
|
67
|
-
"""Returns the id of the response."""
|
|
68
|
-
return self.chunk.id
|
|
69
|
-
|
|
70
|
-
@property
|
|
71
|
-
def usage(self) -> CompletionUsage | None:
|
|
72
|
-
"""Returns the usage of the chat completion."""
|
|
73
|
-
if self.chunk.usage:
|
|
74
|
-
return self.chunk.usage
|
|
75
|
-
return None
|
|
76
|
-
|
|
77
|
-
@property
|
|
78
|
-
def input_tokens(self) -> int | None:
|
|
79
|
-
"""Returns the number of input tokens."""
|
|
80
|
-
if self.usage:
|
|
81
|
-
return self.usage.prompt_tokens
|
|
82
|
-
return None
|
|
83
|
-
|
|
84
|
-
@property
|
|
85
|
-
def output_tokens(self) -> int | None:
|
|
86
|
-
"""Returns the number of output tokens."""
|
|
87
|
-
if self.usage:
|
|
88
|
-
return self.usage.completion_tokens
|
|
89
|
-
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 groq.types.chat import ChatCompletionMessageParam
|
|
7
|
-
|
|
8
|
-
from ..base import BaseDynamicConfig
|
|
9
|
-
from .call_params import GroqCallParams
|
|
10
|
-
|
|
11
|
-
GroqDynamicConfig = BaseDynamicConfig[ChatCompletionMessageParam, GroqCallParams]
|
|
12
|
-
"""The function return type for functions wrapped with the `groq_call` decorator.
|
|
13
|
-
|
|
14
|
-
Example:
|
|
15
|
-
|
|
16
|
-
```python
|
|
17
|
-
from mirascope.core import prompt_template
|
|
18
|
-
from mirascope.core.groq import GroqDynamicConfig, groq_call
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
@groq_call("llama-3.1-8b-instant")
|
|
22
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
23
|
-
def recommend_book(genre: str) -> GroqDynamicConfig:
|
|
24
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
25
|
-
```
|
|
26
|
-
"""
|
mirascope/core/groq/py.typed
DELETED
|
File without changes
|
mirascope/core/groq/stream.py
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"""The `GroqStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from groq.types.chat import (
|
|
7
|
-
ChatCompletion,
|
|
8
|
-
ChatCompletionAssistantMessageParam,
|
|
9
|
-
ChatCompletionMessageParam,
|
|
10
|
-
ChatCompletionMessageToolCallParam,
|
|
11
|
-
ChatCompletionToolMessageParam,
|
|
12
|
-
ChatCompletionUserMessageParam,
|
|
13
|
-
)
|
|
14
|
-
from groq.types.chat.chat_completion import Choice
|
|
15
|
-
from groq.types.chat.chat_completion_message import ChatCompletionMessage
|
|
16
|
-
from groq.types.completion_usage import CompletionUsage
|
|
17
|
-
|
|
18
|
-
from ..base.stream import BaseStream
|
|
19
|
-
from ._utils import calculate_cost
|
|
20
|
-
from .call_params import GroqCallParams
|
|
21
|
-
from .call_response import GroqCallResponse
|
|
22
|
-
from .call_response_chunk import GroqCallResponseChunk
|
|
23
|
-
from .dynamic_config import GroqDynamicConfig
|
|
24
|
-
from .tool import GroqTool
|
|
25
|
-
|
|
26
|
-
FinishReason = Choice.__annotations__["finish_reason"]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class GroqStream(
|
|
30
|
-
BaseStream[
|
|
31
|
-
GroqCallResponse,
|
|
32
|
-
GroqCallResponseChunk,
|
|
33
|
-
ChatCompletionUserMessageParam,
|
|
34
|
-
ChatCompletionAssistantMessageParam,
|
|
35
|
-
ChatCompletionToolMessageParam,
|
|
36
|
-
ChatCompletionMessageParam,
|
|
37
|
-
GroqTool,
|
|
38
|
-
GroqDynamicConfig,
|
|
39
|
-
GroqCallParams,
|
|
40
|
-
FinishReason,
|
|
41
|
-
]
|
|
42
|
-
):
|
|
43
|
-
"""A class for convenience around streaming Groq LLM calls.
|
|
44
|
-
|
|
45
|
-
Example:
|
|
46
|
-
|
|
47
|
-
```python
|
|
48
|
-
from mirascope.core import prompt_template
|
|
49
|
-
from mirascope.core.groq import groq_call
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
@groq_call("llama-3.1-8b-instant", stream=True)
|
|
53
|
-
@prompt_template("Recommend a {genre} book")
|
|
54
|
-
def recommend_book(genre: str):
|
|
55
|
-
...
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
stream = recommend_book("fantasy") # returns `GroqStream` instance
|
|
59
|
-
for chunk, _ in stream:
|
|
60
|
-
print(chunk.content, end="", flush=True)
|
|
61
|
-
```
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
_provider = "groq"
|
|
65
|
-
|
|
66
|
-
@property
|
|
67
|
-
def cost(self) -> float | None:
|
|
68
|
-
"""Returns the cost of the call."""
|
|
69
|
-
return calculate_cost(self.input_tokens, self.output_tokens, self.model)
|
|
70
|
-
|
|
71
|
-
def _construct_message_param(
|
|
72
|
-
self,
|
|
73
|
-
tool_calls: list[ChatCompletionMessageToolCallParam] | None = None,
|
|
74
|
-
content: str | None = None,
|
|
75
|
-
) -> ChatCompletionAssistantMessageParam:
|
|
76
|
-
message_param = ChatCompletionAssistantMessageParam(
|
|
77
|
-
role="assistant",
|
|
78
|
-
content=content,
|
|
79
|
-
)
|
|
80
|
-
if tool_calls:
|
|
81
|
-
message_param["tool_calls"] = tool_calls
|
|
82
|
-
return message_param
|
|
83
|
-
|
|
84
|
-
def construct_call_response(self) -> GroqCallResponse:
|
|
85
|
-
"""Constructs the call response from a consumed GroqStream.
|
|
86
|
-
|
|
87
|
-
Raises:
|
|
88
|
-
ValueError: if the stream has not yet been consumed.
|
|
89
|
-
"""
|
|
90
|
-
if not hasattr(self, "message_param"):
|
|
91
|
-
raise ValueError(
|
|
92
|
-
"No stream response, check if the stream has been consumed."
|
|
93
|
-
)
|
|
94
|
-
message = {
|
|
95
|
-
"role": self.message_param["role"],
|
|
96
|
-
"content": self.message_param.get("content", ""),
|
|
97
|
-
"tool_calls": self.message_param.get("tool_calls", []),
|
|
98
|
-
}
|
|
99
|
-
if not self.input_tokens and not self.output_tokens:
|
|
100
|
-
usage = None
|
|
101
|
-
else:
|
|
102
|
-
usage = CompletionUsage(
|
|
103
|
-
prompt_tokens=int(self.input_tokens or 0),
|
|
104
|
-
completion_tokens=int(self.output_tokens or 0),
|
|
105
|
-
total_tokens=int(self.input_tokens or 0) + int(self.output_tokens or 0),
|
|
106
|
-
)
|
|
107
|
-
completion = ChatCompletion(
|
|
108
|
-
id=self.id if self.id else "",
|
|
109
|
-
model=self.model,
|
|
110
|
-
choices=[
|
|
111
|
-
Choice(
|
|
112
|
-
finish_reason=self.finish_reasons[0]
|
|
113
|
-
if self.finish_reasons and self.finish_reasons[0]
|
|
114
|
-
else "stop",
|
|
115
|
-
index=0,
|
|
116
|
-
message=ChatCompletionMessage.model_validate(message),
|
|
117
|
-
)
|
|
118
|
-
],
|
|
119
|
-
created=0,
|
|
120
|
-
object="chat.completion",
|
|
121
|
-
usage=usage,
|
|
122
|
-
)
|
|
123
|
-
return GroqCallResponse(
|
|
124
|
-
metadata=self.metadata,
|
|
125
|
-
response=completion,
|
|
126
|
-
tool_types=self.tool_types,
|
|
127
|
-
prompt_template=self.prompt_template,
|
|
128
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
129
|
-
dynamic_config=self.dynamic_config,
|
|
130
|
-
messages=self.messages,
|
|
131
|
-
call_params=self.call_params,
|
|
132
|
-
call_kwargs=self.call_kwargs,
|
|
133
|
-
user_message_param=self.user_message_param,
|
|
134
|
-
start_time=self.start_time,
|
|
135
|
-
end_time=self.end_time,
|
|
136
|
-
)
|
mirascope/core/groq/tool.py
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"""The `GroqTool` class for easy tool usage with Groq 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 groq.types.chat import (
|
|
10
|
-
ChatCompletionMessageToolCall,
|
|
11
|
-
ChatCompletionToolParam,
|
|
12
|
-
)
|
|
13
|
-
from groq.types.shared_params import FunctionDefinition
|
|
14
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
15
|
-
|
|
16
|
-
from ..base import BaseTool
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class GroqTool(BaseTool):
|
|
20
|
-
"""A class for defining tools for Groq LLM calls.
|
|
21
|
-
|
|
22
|
-
Example:
|
|
23
|
-
|
|
24
|
-
```python
|
|
25
|
-
from mirascope.core import prompt_template
|
|
26
|
-
from mirascope.core.groq import groq_call
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def format_book(title: str, author: str) -> str:
|
|
30
|
-
return f"{title} by {author}"
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@groq_call("llama-3.1-8b-instant", 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 `GroqTool` 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.groq import GroqTool
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def format_book(title: str, author: str) -> str:
|
|
57
|
-
return f"{title} by {author}"
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
tool_type = GroqTool.type_from_fn(format_book)
|
|
61
|
-
print(tool_type.tool_schema()) # prints the Groq-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) -> GroqTool:
|
|
72
|
-
"""Constructs an `GroqTool` instance from a `tool_call`.
|
|
73
|
-
|
|
74
|
-
Args:
|
|
75
|
-
tool_call: The Groq 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/litellm/_call.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"""The `litellm_call` decorator for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from ..base import call_factory
|
|
4
|
-
from ..openai import (
|
|
5
|
-
OpenAICallParams,
|
|
6
|
-
OpenAICallResponse,
|
|
7
|
-
OpenAICallResponseChunk,
|
|
8
|
-
OpenAIDynamicConfig,
|
|
9
|
-
OpenAIStream,
|
|
10
|
-
OpenAITool,
|
|
11
|
-
)
|
|
12
|
-
from ..openai._utils import (
|
|
13
|
-
get_json_output,
|
|
14
|
-
handle_stream,
|
|
15
|
-
handle_stream_async,
|
|
16
|
-
)
|
|
17
|
-
from ._utils import setup_call
|
|
18
|
-
|
|
19
|
-
litellm_call = call_factory(
|
|
20
|
-
TCallResponse=OpenAICallResponse,
|
|
21
|
-
TCallResponseChunk=OpenAICallResponseChunk,
|
|
22
|
-
TDynamicConfig=OpenAIDynamicConfig,
|
|
23
|
-
TToolType=OpenAITool,
|
|
24
|
-
TStream=OpenAIStream,
|
|
25
|
-
TCallParams=OpenAICallParams,
|
|
26
|
-
default_call_params=OpenAICallParams(),
|
|
27
|
-
setup_call=setup_call, # type: ignore
|
|
28
|
-
get_json_output=get_json_output, # type: ignore
|
|
29
|
-
handle_stream=handle_stream,
|
|
30
|
-
handle_stream_async=handle_stream_async,
|
|
31
|
-
)
|
|
32
|
-
"""A decorator for calling the LiteLLM API with a typed function.
|
|
33
|
-
|
|
34
|
-
usage docs: learn/calls.md
|
|
35
|
-
|
|
36
|
-
This decorator is used to wrap a typed function that calls the LiteLLM API. It parses
|
|
37
|
-
the docstring of the wrapped function as the messages array and templates the input
|
|
38
|
-
arguments for the function into each message's template.
|
|
39
|
-
|
|
40
|
-
Example:
|
|
41
|
-
|
|
42
|
-
```python
|
|
43
|
-
from mirascope.core import prompt_template
|
|
44
|
-
from mirascope.core.litellm import litellm_call
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@litellm_call("gpt-4o-mini")
|
|
48
|
-
@prompt_template("Recommend a {genre} book")
|
|
49
|
-
def recommend_book(genre: str):
|
|
50
|
-
...
|
|
51
|
-
|
|
52
|
-
response = recommend_book("fantasy")
|
|
53
|
-
print(response.content)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
model (str): The model to use in the API call.
|
|
58
|
-
stream (bool): Whether to stream the response from the API call.
|
|
59
|
-
tools (list[BaseTool | Callable]): The tools to use in the API call.
|
|
60
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
61
|
-
should be structured.
|
|
62
|
-
output_parser (Callable[[OpenAICallResponse | ResponseModelT], Any]): A function for
|
|
63
|
-
parsing the call response whose value will be returned in place of the original
|
|
64
|
-
call response.
|
|
65
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
66
|
-
client (None): LiteLLM does not support a custom client.
|
|
67
|
-
call_params (OpenAICallParams): The `OpenAICallParams` call parameters to use in the
|
|
68
|
-
API call.
|
|
69
|
-
|
|
70
|
-
Returns:
|
|
71
|
-
decorator (Callable): The decorator for turning a typed function into a LiteLLM
|
|
72
|
-
routed LLM API call.
|
|
73
|
-
"""
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"""This module contains the setup_call function for OpenAI tools."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from collections.abc import Awaitable, Callable
|
|
5
|
-
from typing import Any
|
|
6
|
-
|
|
7
|
-
from litellm import acompletion, completion
|
|
8
|
-
from openai import OpenAI
|
|
9
|
-
from openai.types.chat import ChatCompletion, ChatCompletionMessageParam
|
|
10
|
-
|
|
11
|
-
from ...base import BaseTool
|
|
12
|
-
from ...openai import OpenAICallParams, OpenAIDynamicConfig, OpenAITool
|
|
13
|
-
from ...openai._utils import setup_call as setup_call_openai
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def setup_call(
|
|
17
|
-
*,
|
|
18
|
-
model: str,
|
|
19
|
-
client: None,
|
|
20
|
-
fn: Callable[..., OpenAIDynamicConfig | Awaitable[OpenAIDynamicConfig]],
|
|
21
|
-
fn_args: dict[str, Any],
|
|
22
|
-
dynamic_config: OpenAIDynamicConfig,
|
|
23
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
24
|
-
json_mode: bool,
|
|
25
|
-
call_params: OpenAICallParams,
|
|
26
|
-
extract: bool,
|
|
27
|
-
) -> tuple[
|
|
28
|
-
Callable[..., ChatCompletion] | Callable[..., Awaitable[ChatCompletion]],
|
|
29
|
-
str,
|
|
30
|
-
list[ChatCompletionMessageParam],
|
|
31
|
-
list[type[OpenAITool]] | None,
|
|
32
|
-
dict[str, Any],
|
|
33
|
-
]:
|
|
34
|
-
_, prompt_template, messages, tool_types, call_kwargs = setup_call_openai(
|
|
35
|
-
model=model,
|
|
36
|
-
client=OpenAI(api_key="NOT_USED"),
|
|
37
|
-
fn=fn,
|
|
38
|
-
fn_args=fn_args,
|
|
39
|
-
dynamic_config=dynamic_config,
|
|
40
|
-
tools=tools,
|
|
41
|
-
json_mode=json_mode,
|
|
42
|
-
call_params=call_params,
|
|
43
|
-
extract=extract,
|
|
44
|
-
)
|
|
45
|
-
create = acompletion if inspect.iscoroutinefunction(fn) else completion
|
|
46
|
-
return create, prompt_template, messages, tool_types, call_kwargs # type: ignore
|
mirascope/core/litellm/py.typed
DELETED
|
File without changes
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Mistral Module."""
|
|
2
|
-
|
|
3
|
-
from ._call import mistral_call
|
|
4
|
-
from ._call import mistral_call as call
|
|
5
|
-
from .call_params import MistralCallParams
|
|
6
|
-
from .call_response import MistralCallResponse
|
|
7
|
-
from .call_response_chunk import MistralCallResponseChunk
|
|
8
|
-
from .dynamic_config import MistralDynamicConfig
|
|
9
|
-
from .stream import MistralStream
|
|
10
|
-
from .tool import MistralTool
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"call",
|
|
14
|
-
"MistralDynamicConfig",
|
|
15
|
-
"MistralCallParams",
|
|
16
|
-
"MistralCallResponse",
|
|
17
|
-
"MistralCallResponseChunk",
|
|
18
|
-
"MistralStream",
|
|
19
|
-
"MistralTool",
|
|
20
|
-
"mistral_call",
|
|
21
|
-
]
|
mirascope/core/mistral/_call.py
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"""The `mistral_call` decorator for functions as LLM calls."""
|
|
2
|
-
|
|
3
|
-
from ..base import call_factory
|
|
4
|
-
from ._utils import (
|
|
5
|
-
get_json_output,
|
|
6
|
-
handle_stream,
|
|
7
|
-
handle_stream_async,
|
|
8
|
-
setup_call,
|
|
9
|
-
)
|
|
10
|
-
from .call_params import MistralCallParams
|
|
11
|
-
from .call_response import MistralCallResponse
|
|
12
|
-
from .call_response_chunk import MistralCallResponseChunk
|
|
13
|
-
from .dynamic_config import MistralDynamicConfig
|
|
14
|
-
from .stream import MistralStream
|
|
15
|
-
from .tool import MistralTool
|
|
16
|
-
|
|
17
|
-
mistral_call = call_factory(
|
|
18
|
-
TCallResponse=MistralCallResponse,
|
|
19
|
-
TCallResponseChunk=MistralCallResponseChunk,
|
|
20
|
-
TDynamicConfig=MistralDynamicConfig,
|
|
21
|
-
TToolType=MistralTool,
|
|
22
|
-
TStream=MistralStream,
|
|
23
|
-
TCallParams=MistralCallParams,
|
|
24
|
-
default_call_params=MistralCallParams(),
|
|
25
|
-
setup_call=setup_call, # type: ignore
|
|
26
|
-
get_json_output=get_json_output,
|
|
27
|
-
handle_stream=handle_stream,
|
|
28
|
-
handle_stream_async=handle_stream_async,
|
|
29
|
-
)
|
|
30
|
-
"""A decorator for calling the Mistral API with a typed function.
|
|
31
|
-
|
|
32
|
-
usage docs: learn/calls.md
|
|
33
|
-
|
|
34
|
-
This decorator is used to wrap a typed function that calls the Mistral API. It parses
|
|
35
|
-
the docstring of the wrapped function as the messages array and templates the input
|
|
36
|
-
arguments for the function into each message's template.
|
|
37
|
-
|
|
38
|
-
Example:
|
|
39
|
-
|
|
40
|
-
```python
|
|
41
|
-
from mirascope.core import prompt_template
|
|
42
|
-
from mirascope.core.mistral import mistral_call
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@mistral_call("mistral-large-latest")
|
|
46
|
-
@prompt_template("Recommend a {genre} book")
|
|
47
|
-
def recommend_book(genre: str):
|
|
48
|
-
...
|
|
49
|
-
|
|
50
|
-
response = recommend_book("fantasy")
|
|
51
|
-
print(response.content)
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Args:
|
|
55
|
-
model (str): The Mistral model to use in the API call.
|
|
56
|
-
stream (bool): Whether to stream the response from the API call.
|
|
57
|
-
tools (list[BaseTool | Callable]): The tools to use in the Mistral API call.
|
|
58
|
-
response_model (BaseModel | BaseType): The response model into which the response should be structured.
|
|
59
|
-
output_parser (Callable[[MistralCallResponse | ResponseModelT], Any]): A function for
|
|
60
|
-
parsing the call response whose value will be returned in place of the original call response.
|
|
61
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
62
|
-
client (object): An optional custom client to use in place of the default client.
|
|
63
|
-
call_params (MistralCallParams): The `MistralCallParams` call parameters to use in
|
|
64
|
-
the API call.
|
|
65
|
-
|
|
66
|
-
Returns:
|
|
67
|
-
decorator (Callable): The decorator for turning a typed function into a Mistral API
|
|
68
|
-
call.
|
|
69
|
-
"""
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Mistral utilities for decorator factories."""
|
|
2
|
-
|
|
3
|
-
from ._calculate_cost import calculate_cost
|
|
4
|
-
from ._convert_message_params import convert_message_params
|
|
5
|
-
from ._get_json_output import get_json_output
|
|
6
|
-
from ._handle_stream import handle_stream, handle_stream_async
|
|
7
|
-
from ._setup_call import setup_call
|
|
8
|
-
|
|
9
|
-
__all__ = [
|
|
10
|
-
"calculate_cost",
|
|
11
|
-
"convert_message_params",
|
|
12
|
-
"get_json_output",
|
|
13
|
-
"handle_stream",
|
|
14
|
-
"handle_stream_async",
|
|
15
|
-
"setup_call",
|
|
16
|
-
]
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"""Calculate the cost of a completion using the Mistral API."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def calculate_cost(
|
|
5
|
-
input_tokens: int | float | None,
|
|
6
|
-
output_tokens: int | float | None,
|
|
7
|
-
model: str = "open-mistral-7b",
|
|
8
|
-
) -> float | None:
|
|
9
|
-
"""Calculate the cost of a completion using the Mistral API.
|
|
10
|
-
|
|
11
|
-
https://mistral.ai/technology/#pricing
|
|
12
|
-
|
|
13
|
-
Model Input Output
|
|
14
|
-
open-mistral-nemo $0.3/1M tokens $0.3/1M tokens
|
|
15
|
-
mistral-large-latest $3/1M tokens $9/1M tokens
|
|
16
|
-
codestral-2405 $1/1M tokens $3/1M tokens
|
|
17
|
-
open-mistral-7b $0.25/1M tokens $0.25/1M tokens
|
|
18
|
-
open-mixtral-8x7b $0.7/1M tokens $0.7/1M tokens
|
|
19
|
-
open-mixtral-8x22b $2/1M tokens $6/1M tokens
|
|
20
|
-
mistral-small-latest $2/1M tokens $6/1M tokens
|
|
21
|
-
mistral-medium-latest $2.75/1M tokens $8.1/1M tokens
|
|
22
|
-
"""
|
|
23
|
-
pricing = {
|
|
24
|
-
"open-mistral-nemo": {"prompt": 0.000_000_3, "completion": 0.000_000_3},
|
|
25
|
-
"open-mistral-nemo-2407": {"prompt": 0.000_000_3, "completion": 0.000_000_3},
|
|
26
|
-
"mistral-large-latest": {"prompt": 0.000_003, "completion": 0.000_009},
|
|
27
|
-
"mistral-large-2407": {"prompt": 0.000_003, "completion": 0.000_009},
|
|
28
|
-
"open-mistral-7b": {"prompt": 0.000_000_25, "completion": 0.000_000_25},
|
|
29
|
-
"open-mixtral-8x7b": {"prompt": 0.000_000_7, "completion": 0.000_000_7},
|
|
30
|
-
"open-mixtral-8x22b": {"prompt": 0.000_002, "completion": 0.000_006},
|
|
31
|
-
"mistral-small-latest": {"prompt": 0.000_002, "completion": 0.000_006},
|
|
32
|
-
"mistral-medium-latest": {"prompt": 0.000_002_75, "completion": 0.000_008_1},
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if input_tokens is None or output_tokens is None:
|
|
36
|
-
return None
|
|
37
|
-
|
|
38
|
-
try:
|
|
39
|
-
model_pricing = pricing[model]
|
|
40
|
-
except KeyError:
|
|
41
|
-
return None
|
|
42
|
-
|
|
43
|
-
prompt_cost = input_tokens * model_pricing["prompt"]
|
|
44
|
-
completion_cost = output_tokens * model_pricing["completion"]
|
|
45
|
-
total_cost = prompt_cost + completion_cost
|
|
46
|
-
|
|
47
|
-
return total_cost
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"""Utility for converting `BaseMessageParam` to `ChatMessage`."""
|
|
2
|
-
|
|
3
|
-
from mistralai.models.chat_completion import ChatMessage
|
|
4
|
-
|
|
5
|
-
from ...base import BaseMessageParam
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def convert_message_params(
|
|
9
|
-
message_params: list[BaseMessageParam | ChatMessage],
|
|
10
|
-
) -> list[ChatMessage]:
|
|
11
|
-
converted_message_params = []
|
|
12
|
-
for message_param in message_params:
|
|
13
|
-
if isinstance(message_param, ChatMessage):
|
|
14
|
-
converted_message_params.append(message_param)
|
|
15
|
-
elif isinstance(content := message_param.content, str):
|
|
16
|
-
converted_message_params.append(ChatMessage(**message_param.model_dump()))
|
|
17
|
-
else:
|
|
18
|
-
if len(content) != 1 or content[0].type != "text":
|
|
19
|
-
raise ValueError("Mistral does not currently support multimodalities.")
|
|
20
|
-
converted_message_params.append(
|
|
21
|
-
ChatMessage(role=message_param.role, content=content[0].text)
|
|
22
|
-
)
|
|
23
|
-
return converted_message_params
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"""Get the JSON output from a completion response."""
|
|
2
|
-
|
|
3
|
-
from ..call_response import MistralCallResponse
|
|
4
|
-
from ..call_response_chunk import MistralCallResponseChunk
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def get_json_output(
|
|
8
|
-
response: MistralCallResponse | MistralCallResponseChunk, json_mode: bool
|
|
9
|
-
) -> str:
|
|
10
|
-
"""Get the JSON output from a completion response."""
|
|
11
|
-
if isinstance(response, MistralCallResponse):
|
|
12
|
-
if json_mode and response.content:
|
|
13
|
-
return response.content
|
|
14
|
-
elif tool_calls := response.response.choices[0].message.tool_calls:
|
|
15
|
-
return tool_calls[0].function.arguments
|
|
16
|
-
raise ValueError("No tool call or JSON object found in response.")
|
|
17
|
-
else:
|
|
18
|
-
# raise ValueError("Mistral does not support structured streaming... :(")
|
|
19
|
-
if json_mode:
|
|
20
|
-
return response.content
|
|
21
|
-
elif (
|
|
22
|
-
(choices := response.chunk.choices)
|
|
23
|
-
and (tool_calls := choices[0].delta.tool_calls)
|
|
24
|
-
and (function := tool_calls[0].function)
|
|
25
|
-
and (arguments := function.arguments) is not None
|
|
26
|
-
):
|
|
27
|
-
return arguments
|
|
28
|
-
return ""
|