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,167 +0,0 @@
|
|
|
1
|
-
"""This module contains the `CohereCallResponse` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/calls.md#handling-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from cohere.types import (
|
|
7
|
-
ApiMetaBilledUnits,
|
|
8
|
-
ChatMessage,
|
|
9
|
-
NonStreamedChatResponse,
|
|
10
|
-
ToolResult,
|
|
11
|
-
)
|
|
12
|
-
from pydantic import SkipValidation, computed_field
|
|
13
|
-
|
|
14
|
-
from ..base import BaseCallResponse
|
|
15
|
-
from ._utils import calculate_cost
|
|
16
|
-
from .call_params import CohereCallParams
|
|
17
|
-
from .dynamic_config import CohereDynamicConfig
|
|
18
|
-
from .tool import CohereTool
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class CohereCallResponse(
|
|
22
|
-
BaseCallResponse[
|
|
23
|
-
SkipValidation[NonStreamedChatResponse],
|
|
24
|
-
CohereTool,
|
|
25
|
-
CohereDynamicConfig,
|
|
26
|
-
SkipValidation[ChatMessage],
|
|
27
|
-
CohereCallParams,
|
|
28
|
-
SkipValidation[ChatMessage],
|
|
29
|
-
]
|
|
30
|
-
):
|
|
31
|
-
"""A convenience wrapper around the Cohere `ChatCompletion` response.
|
|
32
|
-
|
|
33
|
-
When calling the Cohere API using a function decorated with `cohere_call`, the
|
|
34
|
-
response will be an `CohereCallResponse` instance with properties that allow for
|
|
35
|
-
more convenience access to commonly used attributes.
|
|
36
|
-
|
|
37
|
-
Example:
|
|
38
|
-
|
|
39
|
-
```python
|
|
40
|
-
from mirascope.core import prompt_template
|
|
41
|
-
from mirascope.core.cohere import cohere_call
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@cohere_call("command-r-plus")
|
|
45
|
-
@prompt_template("Recommend a {genre} book")
|
|
46
|
-
def recommend_book(genre: str):
|
|
47
|
-
...
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
response = recommend_book("fantasy") # response is an `CohereCallResponse` instance
|
|
51
|
-
print(response.content)
|
|
52
|
-
```
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
_provider = "cohere"
|
|
56
|
-
|
|
57
|
-
@property
|
|
58
|
-
def content(self) -> str:
|
|
59
|
-
"""Returns the content of the chat completion for the 0th choice."""
|
|
60
|
-
return self.response.text
|
|
61
|
-
|
|
62
|
-
@property
|
|
63
|
-
def finish_reasons(self) -> list[str] | None:
|
|
64
|
-
"""Returns the finish reasons of the response."""
|
|
65
|
-
return [str(self.response.finish_reason)]
|
|
66
|
-
|
|
67
|
-
@property
|
|
68
|
-
def model(self) -> str:
|
|
69
|
-
"""Returns the name of the response model.
|
|
70
|
-
|
|
71
|
-
Cohere does not return model, so we return the model provided by the user.
|
|
72
|
-
"""
|
|
73
|
-
return self._model
|
|
74
|
-
|
|
75
|
-
@property
|
|
76
|
-
def id(self) -> str | None:
|
|
77
|
-
"""Returns the id of the response."""
|
|
78
|
-
return self.response.generation_id
|
|
79
|
-
|
|
80
|
-
@property
|
|
81
|
-
def usage(self) -> ApiMetaBilledUnits | None:
|
|
82
|
-
"""Returns the usage of the response."""
|
|
83
|
-
if self.response.meta:
|
|
84
|
-
return self.response.meta.billed_units
|
|
85
|
-
return None
|
|
86
|
-
|
|
87
|
-
@property
|
|
88
|
-
def input_tokens(self) -> float | None:
|
|
89
|
-
"""Returns the number of input tokens."""
|
|
90
|
-
if self.usage:
|
|
91
|
-
return self.usage.input_tokens
|
|
92
|
-
return None
|
|
93
|
-
|
|
94
|
-
@property
|
|
95
|
-
def output_tokens(self) -> float | None:
|
|
96
|
-
"""Returns the number of output tokens."""
|
|
97
|
-
if self.usage:
|
|
98
|
-
return self.usage.output_tokens
|
|
99
|
-
return None
|
|
100
|
-
|
|
101
|
-
@property
|
|
102
|
-
def cost(self) -> float | None:
|
|
103
|
-
"""Returns the cost of the response."""
|
|
104
|
-
return calculate_cost(self.input_tokens, self.output_tokens, self.model)
|
|
105
|
-
|
|
106
|
-
@computed_field
|
|
107
|
-
@property
|
|
108
|
-
def message_param(self) -> ChatMessage:
|
|
109
|
-
"""Returns the assistant's response as a message parameter."""
|
|
110
|
-
return ChatMessage(
|
|
111
|
-
message=self.response.text,
|
|
112
|
-
tool_calls=self.response.tool_calls,
|
|
113
|
-
role="assistant", # type: ignore
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
@computed_field
|
|
117
|
-
@property
|
|
118
|
-
def tools(self) -> list[CohereTool] | None:
|
|
119
|
-
"""Returns the tools for the 0th choice message.
|
|
120
|
-
|
|
121
|
-
Raises:
|
|
122
|
-
ValidationError: if a tool call doesn't match the tool's schema.
|
|
123
|
-
"""
|
|
124
|
-
if not self.tool_types or not self.response.tool_calls:
|
|
125
|
-
return None
|
|
126
|
-
extracted_tools: list[CohereTool] = []
|
|
127
|
-
for tool_call in self.response.tool_calls:
|
|
128
|
-
for tool_type in self.tool_types:
|
|
129
|
-
if tool_call.name == tool_type._name():
|
|
130
|
-
extracted_tools.append(tool_type.from_tool_call(tool_call))
|
|
131
|
-
break
|
|
132
|
-
return extracted_tools
|
|
133
|
-
|
|
134
|
-
@computed_field
|
|
135
|
-
@property
|
|
136
|
-
def tool(self) -> CohereTool | None:
|
|
137
|
-
"""Returns the 0th tool for the 0th choice message.
|
|
138
|
-
|
|
139
|
-
Raises:
|
|
140
|
-
ValidationError: if the tool call doesn't match the tool's schema.
|
|
141
|
-
"""
|
|
142
|
-
tools = self.tools
|
|
143
|
-
if tools:
|
|
144
|
-
return tools[0]
|
|
145
|
-
return None
|
|
146
|
-
|
|
147
|
-
@classmethod
|
|
148
|
-
def tool_message_params(
|
|
149
|
-
cls,
|
|
150
|
-
tools_and_outputs: list[tuple[CohereTool, str]],
|
|
151
|
-
) -> list[ToolResult]:
|
|
152
|
-
"""Returns the tool message parameters for tool call results.
|
|
153
|
-
|
|
154
|
-
Args:
|
|
155
|
-
tools_and_outputs: The list of tools and their outputs from which the tool
|
|
156
|
-
message parameters should be constructed.
|
|
157
|
-
|
|
158
|
-
Returns:
|
|
159
|
-
The list of constructed `ToolResult` parameters.
|
|
160
|
-
"""
|
|
161
|
-
return [
|
|
162
|
-
ToolResult(
|
|
163
|
-
call=tool.tool_call,
|
|
164
|
-
outputs=[{"output": output}],
|
|
165
|
-
)
|
|
166
|
-
for tool, output in tools_and_outputs
|
|
167
|
-
]
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"""This module contains the `CohereCallResponseChunk` class.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md#handling-streamed-responses
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from cohere import StreamedChatResponse_StreamEnd, StreamedChatResponse_StreamStart
|
|
7
|
-
from cohere.types import (
|
|
8
|
-
ApiMetaBilledUnits,
|
|
9
|
-
ChatStreamEndEventFinishReason,
|
|
10
|
-
StreamedChatResponse,
|
|
11
|
-
StreamedChatResponse_TextGeneration,
|
|
12
|
-
)
|
|
13
|
-
from pydantic import SkipValidation
|
|
14
|
-
|
|
15
|
-
from ..base import BaseCallResponseChunk
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class CohereCallResponseChunk(
|
|
19
|
-
BaseCallResponseChunk[
|
|
20
|
-
SkipValidation[StreamedChatResponse], ChatStreamEndEventFinishReason
|
|
21
|
-
]
|
|
22
|
-
):
|
|
23
|
-
"""A convenience wrapper around the Cohere `ChatCompletionChunk` streamed chunks.
|
|
24
|
-
|
|
25
|
-
When calling the Cohere API using a function decorated with `cohere_call` and
|
|
26
|
-
`stream` set to `True`, the stream will contain `CohereResponseChunk` instances with
|
|
27
|
-
properties that allow for more convenient access to commonly used attributes.
|
|
28
|
-
|
|
29
|
-
Example:
|
|
30
|
-
|
|
31
|
-
```python
|
|
32
|
-
from mirascope.core import prompt_template
|
|
33
|
-
from mirascope.core.cohere import cohere_call
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
@cohere_call("command-r-plus", stream=True)
|
|
37
|
-
@prompt_template("Recommend a {genre} book")
|
|
38
|
-
def recommend_book(genre: str):
|
|
39
|
-
...
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
stream = recommend_book("fantasy") # response is an `CohereStream`
|
|
43
|
-
for chunk, _ in stream:
|
|
44
|
-
print(chunk.content, end="", flush=True)
|
|
45
|
-
```
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
@property
|
|
49
|
-
def content(self) -> str:
|
|
50
|
-
"""Returns the content for the 0th choice delta."""
|
|
51
|
-
if isinstance(self.chunk, StreamedChatResponse_TextGeneration):
|
|
52
|
-
return self.chunk.text
|
|
53
|
-
return ""
|
|
54
|
-
|
|
55
|
-
@property
|
|
56
|
-
def finish_reasons(self) -> list[ChatStreamEndEventFinishReason] | None:
|
|
57
|
-
"""Returns the finish reasons of the response."""
|
|
58
|
-
if isinstance(self.chunk, StreamedChatResponse_StreamEnd):
|
|
59
|
-
return [self.chunk.finish_reason]
|
|
60
|
-
return None
|
|
61
|
-
|
|
62
|
-
@property
|
|
63
|
-
def model(self) -> str | None:
|
|
64
|
-
"""Returns the name of the response model.
|
|
65
|
-
|
|
66
|
-
Cohere does not return model, so we return None
|
|
67
|
-
"""
|
|
68
|
-
return None
|
|
69
|
-
|
|
70
|
-
@property
|
|
71
|
-
def id(self) -> str | None:
|
|
72
|
-
"""Returns the id of the response."""
|
|
73
|
-
if isinstance(self.chunk, StreamedChatResponse_StreamStart):
|
|
74
|
-
return self.chunk.generation_id
|
|
75
|
-
elif isinstance(self.chunk, StreamedChatResponse_StreamEnd):
|
|
76
|
-
return self.chunk.response.generation_id
|
|
77
|
-
return None
|
|
78
|
-
|
|
79
|
-
@property
|
|
80
|
-
def usage(self) -> ApiMetaBilledUnits | None:
|
|
81
|
-
"""Returns the usage of the response."""
|
|
82
|
-
if (
|
|
83
|
-
isinstance(self.chunk, StreamedChatResponse_StreamEnd)
|
|
84
|
-
and self.chunk.response.meta
|
|
85
|
-
):
|
|
86
|
-
return self.chunk.response.meta.billed_units
|
|
87
|
-
return None
|
|
88
|
-
|
|
89
|
-
@property
|
|
90
|
-
def input_tokens(self) -> float | None:
|
|
91
|
-
"""Returns the number of input tokens."""
|
|
92
|
-
if self.usage:
|
|
93
|
-
return self.usage.input_tokens
|
|
94
|
-
return None
|
|
95
|
-
|
|
96
|
-
@property
|
|
97
|
-
def output_tokens(self) -> float | None:
|
|
98
|
-
"""Returns the number of output tokens."""
|
|
99
|
-
if self.usage:
|
|
100
|
-
return self.usage.output_tokens
|
|
101
|
-
return None
|
|
@@ -1,24 +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 ..base import BaseDynamicConfig, BaseMessageParam
|
|
7
|
-
from .call_params import CohereCallParams
|
|
8
|
-
|
|
9
|
-
CohereDynamicConfig = BaseDynamicConfig[BaseMessageParam, CohereCallParams]
|
|
10
|
-
"""The function return type for functions wrapped with the `cohere_call` decorator.
|
|
11
|
-
|
|
12
|
-
Example:
|
|
13
|
-
|
|
14
|
-
```python
|
|
15
|
-
from mirascope.core import prompt_template
|
|
16
|
-
from mirascope.core.cohere import CohereDynamicConfig, cohere_call
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@cohere_call("command-r-plus")
|
|
20
|
-
@prompt_template("Recommend a {capitalized_genre} book")
|
|
21
|
-
def recommend_book(genre: str) -> CohereDynamicConfig:
|
|
22
|
-
return {"computed_fields": {"capitalized_genre": genre.capitalize()}}
|
|
23
|
-
```
|
|
24
|
-
"""
|
mirascope/core/cohere/py.typed
DELETED
|
File without changes
|
mirascope/core/cohere/stream.py
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"""The `CohereStream` class for convenience around streaming LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/streams.md
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from cohere.types import (
|
|
7
|
-
ApiMeta,
|
|
8
|
-
ApiMetaBilledUnits,
|
|
9
|
-
ChatMessage,
|
|
10
|
-
ChatStreamEndEventFinishReason,
|
|
11
|
-
NonStreamedChatResponse,
|
|
12
|
-
ToolCall,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
from ..base.stream import BaseStream
|
|
16
|
-
from ._utils import calculate_cost
|
|
17
|
-
from .call_params import CohereCallParams
|
|
18
|
-
from .call_response import CohereCallResponse
|
|
19
|
-
from .call_response_chunk import CohereCallResponseChunk
|
|
20
|
-
from .dynamic_config import CohereDynamicConfig
|
|
21
|
-
from .tool import CohereTool
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class CohereStream(
|
|
25
|
-
BaseStream[
|
|
26
|
-
CohereCallResponse,
|
|
27
|
-
CohereCallResponseChunk,
|
|
28
|
-
ChatMessage,
|
|
29
|
-
ChatMessage,
|
|
30
|
-
ChatMessage,
|
|
31
|
-
ChatMessage,
|
|
32
|
-
CohereTool,
|
|
33
|
-
CohereDynamicConfig,
|
|
34
|
-
CohereCallParams,
|
|
35
|
-
ChatStreamEndEventFinishReason,
|
|
36
|
-
]
|
|
37
|
-
):
|
|
38
|
-
"""A class for convenience around streaming Cohere LLM calls.
|
|
39
|
-
|
|
40
|
-
Example:
|
|
41
|
-
|
|
42
|
-
```python
|
|
43
|
-
from mirascope.core import prompt_template
|
|
44
|
-
from mirascope.core.cohere import cohere_call
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@cohere_call("command-r-plus", stream=True)
|
|
48
|
-
@prompt_template("Recommend a {genre} book")
|
|
49
|
-
def recommend_book(genre: str):
|
|
50
|
-
...
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
stream = recommend_book("fantasy") # returns `CohereStream` instance
|
|
54
|
-
for chunk, _ in stream:
|
|
55
|
-
print(chunk.content, end="", flush=True)
|
|
56
|
-
```
|
|
57
|
-
"""
|
|
58
|
-
|
|
59
|
-
_provider = "cohere"
|
|
60
|
-
|
|
61
|
-
@property
|
|
62
|
-
def cost(self) -> float | None:
|
|
63
|
-
"""Returns the cost of the call."""
|
|
64
|
-
return calculate_cost(self.input_tokens, self.output_tokens, self.model)
|
|
65
|
-
|
|
66
|
-
def _construct_message_param(
|
|
67
|
-
self, tool_calls: list[ToolCall] | None = None, content: str | None = None
|
|
68
|
-
) -> ChatMessage:
|
|
69
|
-
return ChatMessage(
|
|
70
|
-
role="assistant", # type: ignore
|
|
71
|
-
message=content if content else "",
|
|
72
|
-
tool_calls=tool_calls,
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
def construct_call_response(self) -> CohereCallResponse:
|
|
76
|
-
"""Constructs the call response from a consumed CohereStream.
|
|
77
|
-
|
|
78
|
-
Raises:
|
|
79
|
-
ValueError: if the stream has not yet been consumed.
|
|
80
|
-
"""
|
|
81
|
-
if not hasattr(self, "message_param"):
|
|
82
|
-
raise ValueError(
|
|
83
|
-
"No stream response, check if the stream has been consumed."
|
|
84
|
-
)
|
|
85
|
-
if not self.input_tokens and not self.output_tokens:
|
|
86
|
-
meta = None
|
|
87
|
-
else:
|
|
88
|
-
meta = ApiMeta(
|
|
89
|
-
billed_units=ApiMetaBilledUnits(
|
|
90
|
-
input_tokens=self.input_tokens, output_tokens=self.output_tokens
|
|
91
|
-
)
|
|
92
|
-
)
|
|
93
|
-
completion = NonStreamedChatResponse(
|
|
94
|
-
generation_id=self.id,
|
|
95
|
-
text=self.message_param.message,
|
|
96
|
-
meta=meta,
|
|
97
|
-
finish_reason=self.finish_reasons[0] if self.finish_reasons else None,
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
return CohereCallResponse(
|
|
101
|
-
metadata=self.metadata,
|
|
102
|
-
response=completion,
|
|
103
|
-
tool_types=self.tool_types,
|
|
104
|
-
prompt_template=self.prompt_template,
|
|
105
|
-
fn_args=self.fn_args if self.fn_args else {},
|
|
106
|
-
dynamic_config=self.dynamic_config,
|
|
107
|
-
messages=self.messages,
|
|
108
|
-
call_params=self.call_params,
|
|
109
|
-
call_kwargs=self.call_kwargs,
|
|
110
|
-
user_message_param=self.user_message_param,
|
|
111
|
-
start_time=self.start_time,
|
|
112
|
-
end_time=self.end_time,
|
|
113
|
-
)
|
mirascope/core/cohere/tool.py
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"""The `CohereTool` class for easy tool usage with Cohere LLM calls.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md#using-tools-with-standard-calls
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
from cohere.types import Tool, ToolCall, ToolParameterDefinitionsValue
|
|
9
|
-
from pydantic import SkipValidation
|
|
10
|
-
from pydantic.json_schema import SkipJsonSchema
|
|
11
|
-
|
|
12
|
-
from ..base import BaseTool
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class CohereTool(BaseTool):
|
|
16
|
-
"""A class for defining tools for Cohere LLM calls.
|
|
17
|
-
|
|
18
|
-
Example:
|
|
19
|
-
|
|
20
|
-
```python
|
|
21
|
-
from mirascope.core import prompt_template
|
|
22
|
-
from mirascope.core.cohere import cohere_call
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def format_book(title: str, author: str) -> str:
|
|
26
|
-
return f"{title} by {author}"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@cohere_call("command-r-plus", tools=[format_book])
|
|
30
|
-
@prompt_template("Recommend a {genre} book")
|
|
31
|
-
def recommend_book(genre: str):
|
|
32
|
-
...
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
response = recommend_book("fantasy")
|
|
36
|
-
if tool := response.tool: # returns an `CohereTool` instance
|
|
37
|
-
print(tool.call())
|
|
38
|
-
```
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
tool_call: SkipValidation[SkipJsonSchema[ToolCall]]
|
|
42
|
-
|
|
43
|
-
@classmethod
|
|
44
|
-
def tool_schema(cls) -> Tool:
|
|
45
|
-
"""Constructs a JSON Schema tool schema from the `BaseModel` schema defined.
|
|
46
|
-
|
|
47
|
-
Example:
|
|
48
|
-
```python
|
|
49
|
-
from mirascope.core.cohere import CohereTool
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def format_book(title: str, author: str) -> str:
|
|
53
|
-
return f"{title} by {author}"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
tool_type = CohereTool.type_from_fn(format_book)
|
|
57
|
-
print(tool_type.tool_schema()) # prints the Cohere-specific tool schema
|
|
58
|
-
```
|
|
59
|
-
"""
|
|
60
|
-
model_schema = cls.model_tool_schema()
|
|
61
|
-
parameter_definitions = None
|
|
62
|
-
if "properties" in model_schema:
|
|
63
|
-
if "$defs" in model_schema["properties"]:
|
|
64
|
-
raise ValueError( # pragma: no cover
|
|
65
|
-
"Unfortunately Cohere's chat API cannot handle nested structures "
|
|
66
|
-
"with $defs."
|
|
67
|
-
)
|
|
68
|
-
parameter_definitions = {
|
|
69
|
-
prop: ToolParameterDefinitionsValue(
|
|
70
|
-
description=prop_schema.get("description", None),
|
|
71
|
-
type=prop_schema["type"],
|
|
72
|
-
required="required" in model_schema
|
|
73
|
-
and prop in model_schema["required"],
|
|
74
|
-
)
|
|
75
|
-
for prop, prop_schema in model_schema["properties"].items()
|
|
76
|
-
}
|
|
77
|
-
return Tool(
|
|
78
|
-
name=cls._name(),
|
|
79
|
-
description=cls._description(),
|
|
80
|
-
parameter_definitions=parameter_definitions,
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
@classmethod
|
|
84
|
-
def from_tool_call(cls, tool_call: ToolCall) -> CohereTool:
|
|
85
|
-
"""Constructs an `CohereTool` instance from a `tool_call`.
|
|
86
|
-
|
|
87
|
-
Args:
|
|
88
|
-
tool_call: The Cohere tool call from which to construct this tool instance.
|
|
89
|
-
"""
|
|
90
|
-
model_json = {**tool_call.parameters}
|
|
91
|
-
model_json["tool_call"] = tool_call.dict()
|
|
92
|
-
return cls.model_validate(model_json)
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Gemini Module."""
|
|
2
|
-
|
|
3
|
-
from ._call import gemini_call
|
|
4
|
-
from ._call import gemini_call as call
|
|
5
|
-
from .call_params import GeminiCallParams
|
|
6
|
-
from .call_response import GeminiCallResponse
|
|
7
|
-
from .call_response_chunk import GeminiCallResponseChunk
|
|
8
|
-
from .dynamic_config import GeminiDynamicConfig
|
|
9
|
-
from .stream import GeminiStream
|
|
10
|
-
from .tool import GeminiTool
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"call",
|
|
14
|
-
"GeminiDynamicConfig",
|
|
15
|
-
"GeminiCallParams",
|
|
16
|
-
"GeminiCallResponse",
|
|
17
|
-
"GeminiCallResponseChunk",
|
|
18
|
-
"GeminiStream",
|
|
19
|
-
"GeminiTool",
|
|
20
|
-
"gemini_call",
|
|
21
|
-
]
|
mirascope/core/gemini/_call.py
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"""The `gemini_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 GeminiCallParams
|
|
11
|
-
from .call_response import GeminiCallResponse
|
|
12
|
-
from .call_response_chunk import GeminiCallResponseChunk
|
|
13
|
-
from .dynamic_config import GeminiDynamicConfig
|
|
14
|
-
from .stream import GeminiStream
|
|
15
|
-
from .tool import GeminiTool
|
|
16
|
-
|
|
17
|
-
gemini_call = call_factory(
|
|
18
|
-
TCallResponse=GeminiCallResponse,
|
|
19
|
-
TCallResponseChunk=GeminiCallResponseChunk,
|
|
20
|
-
TDynamicConfig=GeminiDynamicConfig,
|
|
21
|
-
TStream=GeminiStream,
|
|
22
|
-
TToolType=GeminiTool,
|
|
23
|
-
TCallParams=GeminiCallParams,
|
|
24
|
-
default_call_params=GeminiCallParams(),
|
|
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 Gemini 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 Gemini 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.gemini import gemini_call
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@gemini_call("gemini-1.5-flash")
|
|
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 Gemini 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 Gemini API call.
|
|
58
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
59
|
-
should be structured.
|
|
60
|
-
output_parser (Callable[[GeminiCallResponse | ResponseModelT], Any]): A function
|
|
61
|
-
for parsing the call response whose value will be returned in place of the
|
|
62
|
-
original call response.
|
|
63
|
-
json_modem (bool): Whether to use JSON Mode.
|
|
64
|
-
client (object): An optional custom client to use in place of the default client.
|
|
65
|
-
call_params (GeminiCallParams): The `GeminiCallParams` call parameters to use in the
|
|
66
|
-
API call.
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
decorator (Callable): The decorator for turning a typed function into a Gemini API
|
|
70
|
-
call.
|
|
71
|
-
"""
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Gemini 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,74 +0,0 @@
|
|
|
1
|
-
"""Utility for converting `BaseMessageParam` to `ContentsType`"""
|
|
2
|
-
|
|
3
|
-
import io
|
|
4
|
-
|
|
5
|
-
import PIL.Image
|
|
6
|
-
from google.generativeai.types import ContentDict
|
|
7
|
-
|
|
8
|
-
from ...base import BaseMessageParam
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def convert_message_params(
|
|
12
|
-
message_params: list[BaseMessageParam | ContentDict],
|
|
13
|
-
) -> list[ContentDict]:
|
|
14
|
-
converted_message_params = []
|
|
15
|
-
for message_param in message_params:
|
|
16
|
-
if not isinstance(message_param, BaseMessageParam):
|
|
17
|
-
converted_message_params.append(message_param)
|
|
18
|
-
elif (role := message_param.role) == "system":
|
|
19
|
-
content = message_param.content
|
|
20
|
-
if not isinstance(message_param.content, str):
|
|
21
|
-
raise ValueError(
|
|
22
|
-
"System message content must be a single text string."
|
|
23
|
-
) # pragma: no cover
|
|
24
|
-
converted_message_params += [
|
|
25
|
-
{
|
|
26
|
-
"role": "user",
|
|
27
|
-
"parts": [message_param.content],
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"role": "model",
|
|
31
|
-
"parts": ["Ok! I will adhere to this system message."],
|
|
32
|
-
},
|
|
33
|
-
]
|
|
34
|
-
elif isinstance((content := message_param.content), str):
|
|
35
|
-
converted_message_params.append({"role": "user", "parts": [content]})
|
|
36
|
-
else:
|
|
37
|
-
converted_content = []
|
|
38
|
-
for part in content:
|
|
39
|
-
if part.type == "text":
|
|
40
|
-
converted_content.append(part.text)
|
|
41
|
-
elif part.type == "image":
|
|
42
|
-
if part.media_type not in [
|
|
43
|
-
"image/jpeg",
|
|
44
|
-
"image/png",
|
|
45
|
-
"image/webp",
|
|
46
|
-
"image/heic",
|
|
47
|
-
"image/heif",
|
|
48
|
-
]:
|
|
49
|
-
raise ValueError(
|
|
50
|
-
f"Unsupported image media type: {part.media_type}. "
|
|
51
|
-
"Gemini currently only supports JPEG, PNG, WebP, HEIC, "
|
|
52
|
-
"and HEIF images."
|
|
53
|
-
)
|
|
54
|
-
image = PIL.Image.open(io.BytesIO(part.image))
|
|
55
|
-
converted_content.append(image)
|
|
56
|
-
else:
|
|
57
|
-
if part.media_type not in [
|
|
58
|
-
"audio/wav",
|
|
59
|
-
"audio/mp3",
|
|
60
|
-
"audio/aiff",
|
|
61
|
-
"audio/aac",
|
|
62
|
-
"audio/ogg",
|
|
63
|
-
"audio/flac",
|
|
64
|
-
]:
|
|
65
|
-
raise ValueError(
|
|
66
|
-
f"Unsupported audio media type: {part.media_type}. "
|
|
67
|
-
"Gemini currently only supports WAV, MP3, AIFF, AAC, OGG, "
|
|
68
|
-
"and FLAC audio file types."
|
|
69
|
-
)
|
|
70
|
-
converted_content.append(
|
|
71
|
-
{"mime_type": part.media_type, "data": part.audio}
|
|
72
|
-
)
|
|
73
|
-
converted_message_params.append({"role": role, "parts": converted_content})
|
|
74
|
-
return converted_message_params
|