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,64 +0,0 @@
|
|
|
1
|
-
"""Internal Utilities."""
|
|
2
|
-
|
|
3
|
-
from ._base_type import BaseType, is_base_type
|
|
4
|
-
from ._convert_base_model_to_base_tool import convert_base_model_to_base_tool
|
|
5
|
-
from ._convert_base_type_to_base_tool import convert_base_type_to_base_tool
|
|
6
|
-
from ._convert_function_to_base_tool import convert_function_to_base_tool
|
|
7
|
-
from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
|
|
8
|
-
from ._extract_tool_return import extract_tool_return
|
|
9
|
-
from ._format_template import format_template
|
|
10
|
-
from ._get_audio_type import get_audio_type
|
|
11
|
-
from ._get_fn_args import get_fn_args
|
|
12
|
-
from ._get_image_type import get_image_type
|
|
13
|
-
from ._get_metadata import get_metadata
|
|
14
|
-
from ._get_possible_user_message_param import get_possible_user_message_param
|
|
15
|
-
from ._get_prompt_template import get_prompt_template
|
|
16
|
-
from ._get_template_values import get_template_values
|
|
17
|
-
from ._get_template_variables import get_template_variables
|
|
18
|
-
from ._json_mode_content import json_mode_content
|
|
19
|
-
from ._parse_content_template import parse_content_template
|
|
20
|
-
from ._parse_prompt_messages import parse_prompt_messages
|
|
21
|
-
from ._protocols import (
|
|
22
|
-
AsyncCreateFn,
|
|
23
|
-
CalculateCost,
|
|
24
|
-
CreateFn,
|
|
25
|
-
GetJsonOutput,
|
|
26
|
-
HandleStream,
|
|
27
|
-
HandleStreamAsync,
|
|
28
|
-
LLMFunctionDecorator,
|
|
29
|
-
SetupCall,
|
|
30
|
-
)
|
|
31
|
-
from ._setup_call import setup_call
|
|
32
|
-
from ._setup_extract_tool import setup_extract_tool
|
|
33
|
-
|
|
34
|
-
__all__ = [
|
|
35
|
-
"AsyncCreateFn",
|
|
36
|
-
"BaseType",
|
|
37
|
-
"CalculateCost",
|
|
38
|
-
"convert_base_model_to_base_tool",
|
|
39
|
-
"convert_base_type_to_base_tool",
|
|
40
|
-
"convert_function_to_base_tool",
|
|
41
|
-
"CreateFn",
|
|
42
|
-
"DEFAULT_TOOL_DOCSTRING",
|
|
43
|
-
"extract_tool_return",
|
|
44
|
-
"format_template",
|
|
45
|
-
"GetJsonOutput",
|
|
46
|
-
"get_audio_type",
|
|
47
|
-
"get_fn_args",
|
|
48
|
-
"get_image_type",
|
|
49
|
-
"get_metadata",
|
|
50
|
-
"get_possible_user_message_param",
|
|
51
|
-
"get_prompt_template",
|
|
52
|
-
"get_template_values",
|
|
53
|
-
"get_template_variables",
|
|
54
|
-
"HandleStream",
|
|
55
|
-
"HandleStreamAsync",
|
|
56
|
-
"is_base_type",
|
|
57
|
-
"json_mode_content",
|
|
58
|
-
"LLMFunctionDecorator",
|
|
59
|
-
"parse_content_template",
|
|
60
|
-
"parse_prompt_messages",
|
|
61
|
-
"SetupCall",
|
|
62
|
-
"setup_call",
|
|
63
|
-
"setup_extract_tool",
|
|
64
|
-
]
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"""This module contains utility functions for base types."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from enum import Enum
|
|
5
|
-
from typing import Annotated, Any, Literal, TypeGuard, Union, get_origin
|
|
6
|
-
|
|
7
|
-
BaseType = str | int | float | bool | bytes | list | set | tuple | dict
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def is_base_type(type_: Any) -> TypeGuard[type[BaseType]]: # noqa: ANN401
|
|
11
|
-
"""Check if a type is a base type."""
|
|
12
|
-
base_types = {str, int, float, bool, bytes, list, set, tuple, dict}
|
|
13
|
-
return (
|
|
14
|
-
(inspect.isclass(type_) and issubclass(type_, Enum))
|
|
15
|
-
or type_ in base_types
|
|
16
|
-
or get_origin(type_) in base_types.union({Literal, Union, Annotated})
|
|
17
|
-
)
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"""Utility for converting a model into a base tool."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from abc import update_abstractmethods
|
|
5
|
-
from typing import Any, TypeVar, cast
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel, create_model
|
|
8
|
-
|
|
9
|
-
from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
|
|
10
|
-
|
|
11
|
-
BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def convert_base_model_to_base_tool(
|
|
15
|
-
model: type[BaseModel], base: type[BaseToolT]
|
|
16
|
-
) -> type[BaseToolT]:
|
|
17
|
-
"""Converts a `BaseModel` schema to a `BaseToolT` type.
|
|
18
|
-
|
|
19
|
-
By adding a docstring (if needed) and passing on fields and field information in
|
|
20
|
-
dictionary format, a Pydantic `BaseModel` can be converted into an `BaseTool` for
|
|
21
|
-
performing extraction.
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
model: The `BaseModel` schema to convert.
|
|
25
|
-
base: The base type to extend with the `BaseModel` fields.
|
|
26
|
-
|
|
27
|
-
Returns:
|
|
28
|
-
The constructed `BaseModelT` type.
|
|
29
|
-
"""
|
|
30
|
-
field_definitions = {
|
|
31
|
-
field_name: (field_info.annotation, field_info)
|
|
32
|
-
for field_name, field_info in model.model_fields.items()
|
|
33
|
-
}
|
|
34
|
-
tool_type = create_model(
|
|
35
|
-
f"{model.__name__}",
|
|
36
|
-
__base__=base,
|
|
37
|
-
__doc__=model.__doc__ if model.__doc__ else DEFAULT_TOOL_DOCSTRING,
|
|
38
|
-
**cast(dict[str, Any], field_definitions),
|
|
39
|
-
)
|
|
40
|
-
bases = list(tool_type.__bases__)
|
|
41
|
-
tool_type.__bases__ = tuple(bases) if model in bases else tuple([model] + bases)
|
|
42
|
-
for name, value in inspect.getmembers(model):
|
|
43
|
-
if not hasattr(tool_type, name) or name in ["_name", "_description", "call"]:
|
|
44
|
-
setattr(tool_type, name, value)
|
|
45
|
-
return update_abstractmethods(tool_type)
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"""This module contains the `convert_base_type_to_base_tool` function."""
|
|
2
|
-
|
|
3
|
-
from typing import Annotated, TypeVar, get_args, get_origin
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel, create_model
|
|
6
|
-
|
|
7
|
-
from ._base_type import BaseType
|
|
8
|
-
from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
|
|
9
|
-
|
|
10
|
-
BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def convert_base_type_to_base_tool(
|
|
14
|
-
schema: type[BaseType], base: type[BaseToolT]
|
|
15
|
-
) -> type[BaseToolT]:
|
|
16
|
-
"""Converts a `BaseType` to a `BaseToolT` type."""
|
|
17
|
-
if get_origin(schema) == Annotated:
|
|
18
|
-
schema.__name__ = get_args(schema)[0].__name__
|
|
19
|
-
return create_model(
|
|
20
|
-
schema.__name__,
|
|
21
|
-
__base__=base,
|
|
22
|
-
__doc__=DEFAULT_TOOL_DOCSTRING,
|
|
23
|
-
value=(schema, ...),
|
|
24
|
-
)
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import inspect
|
|
2
|
-
from abc import update_abstractmethods
|
|
3
|
-
from collections.abc import Callable
|
|
4
|
-
from typing import Any, TypeVar, cast, get_type_hints
|
|
5
|
-
|
|
6
|
-
import jiter
|
|
7
|
-
from docstring_parser import parse
|
|
8
|
-
from pydantic import BaseModel, create_model
|
|
9
|
-
from pydantic.fields import FieldInfo
|
|
10
|
-
|
|
11
|
-
from ._default_tool_docstring import DEFAULT_TOOL_DOCSTRING
|
|
12
|
-
|
|
13
|
-
BaseToolT = TypeVar("BaseToolT", bound=BaseModel)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def convert_function_to_base_tool(
|
|
17
|
-
fn: Callable,
|
|
18
|
-
base: type[BaseToolT],
|
|
19
|
-
__doc__: str | None = None,
|
|
20
|
-
__namespace__: str | None = None,
|
|
21
|
-
) -> type[BaseToolT]:
|
|
22
|
-
"""Constructs a `BaseToolT` type from the given function.
|
|
23
|
-
|
|
24
|
-
This method expects all function parameters to be properly documented in identical
|
|
25
|
-
order with identical variable names, as well as descriptions of each parameter.
|
|
26
|
-
Errors will be raised if any of these conditions are not met.
|
|
27
|
-
|
|
28
|
-
Args:
|
|
29
|
-
fn: The function to convert.
|
|
30
|
-
base: The `BaseToolT` type to which the function is converted.
|
|
31
|
-
__doc__: The docstring to use for the constructed `BaseToolT` type.
|
|
32
|
-
__namespace__: The namespace to use for the constructed `BaseToolT` type.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
The constructed `BaseToolT` type.
|
|
36
|
-
|
|
37
|
-
Raises:
|
|
38
|
-
ValueError: if the given function's parameters don't have type annotations.
|
|
39
|
-
ValueError: if a given function's parameter is in the docstring args section but
|
|
40
|
-
the name doesn't match the docstring's parameter name.
|
|
41
|
-
ValueError: if a given function's parameter is in the docstring args section but
|
|
42
|
-
doesn't have a docstring description.
|
|
43
|
-
"""
|
|
44
|
-
docstring, examples = None, []
|
|
45
|
-
func_doc = __doc__ or fn.__doc__
|
|
46
|
-
if func_doc:
|
|
47
|
-
docstring = parse(func_doc)
|
|
48
|
-
for example in docstring.examples or []:
|
|
49
|
-
if example.description:
|
|
50
|
-
examples.append(jiter.from_json(example.description.encode()))
|
|
51
|
-
|
|
52
|
-
field_definitions = {}
|
|
53
|
-
hints = get_type_hints(fn)
|
|
54
|
-
has_self = False
|
|
55
|
-
for i, parameter in enumerate(inspect.signature(fn).parameters.values()):
|
|
56
|
-
if parameter.name == "self":
|
|
57
|
-
has_self = True
|
|
58
|
-
continue
|
|
59
|
-
if parameter.name == "cls":
|
|
60
|
-
continue
|
|
61
|
-
if parameter.annotation == inspect.Parameter.empty:
|
|
62
|
-
raise ValueError("All parameters must have a type annotation.")
|
|
63
|
-
|
|
64
|
-
docstring_description = None
|
|
65
|
-
if docstring and i < len(docstring.params):
|
|
66
|
-
docstring_param = docstring.params[i]
|
|
67
|
-
if docstring_param.arg_name != parameter.name:
|
|
68
|
-
raise ValueError(
|
|
69
|
-
f"Function parameter name {parameter.name} does not match docstring "
|
|
70
|
-
f"parameter name {docstring_param.arg_name}. Make sure that the "
|
|
71
|
-
"parameter names match exactly."
|
|
72
|
-
)
|
|
73
|
-
if not docstring_param.description:
|
|
74
|
-
raise ValueError("All parameters must have a description.")
|
|
75
|
-
docstring_description = docstring_param.description
|
|
76
|
-
|
|
77
|
-
field_info = FieldInfo(annotation=hints[parameter.name])
|
|
78
|
-
if parameter.default != inspect.Parameter.empty:
|
|
79
|
-
field_info.default = parameter.default
|
|
80
|
-
if docstring_description: # we check falsy here because this comes from docstr
|
|
81
|
-
field_info.description = docstring_description
|
|
82
|
-
|
|
83
|
-
param_name = parameter.name
|
|
84
|
-
if param_name.startswith("model_"): # model_ is a BaseModel reserved namespace
|
|
85
|
-
param_name = "aliased_" + param_name
|
|
86
|
-
field_info.alias = parameter.name
|
|
87
|
-
field_info.validation_alias = parameter.name
|
|
88
|
-
field_info.serialization_alias = parameter.name
|
|
89
|
-
|
|
90
|
-
field_definitions[param_name] = (
|
|
91
|
-
hints[parameter.name],
|
|
92
|
-
field_info,
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
model = create_model(
|
|
96
|
-
f"{__namespace__}_{fn.__name__}" if __namespace__ else fn.__name__,
|
|
97
|
-
__base__=base,
|
|
98
|
-
__doc__=inspect.cleandoc(func_doc) if func_doc else DEFAULT_TOOL_DOCSTRING,
|
|
99
|
-
**cast(dict[str, Any], field_definitions),
|
|
100
|
-
)
|
|
101
|
-
if examples:
|
|
102
|
-
model.model_config["json_schema_extra"] = {"examples": examples}
|
|
103
|
-
|
|
104
|
-
def call(self: base) -> Any: # noqa: ANN401
|
|
105
|
-
return fn(
|
|
106
|
-
**(
|
|
107
|
-
({"self": self} if has_self else {})
|
|
108
|
-
| {
|
|
109
|
-
str(
|
|
110
|
-
self.model_fields[field_name].alias
|
|
111
|
-
if self.model_fields[field_name].alias
|
|
112
|
-
else field_name
|
|
113
|
-
): getattr(self, field_name)
|
|
114
|
-
for field_name in self.model_dump(exclude={"tool_call"})
|
|
115
|
-
}
|
|
116
|
-
)
|
|
117
|
-
)
|
|
118
|
-
|
|
119
|
-
async def call_async(self: base) -> Callable:
|
|
120
|
-
return await call(self)
|
|
121
|
-
|
|
122
|
-
if inspect.iscoroutinefunction(fn):
|
|
123
|
-
model.call = call_async # pyright: ignore [reportAttributeAccessIssue]
|
|
124
|
-
else:
|
|
125
|
-
model.call = call # pyright: ignore [reportAttributeAccessIssue]
|
|
126
|
-
return update_abstractmethods(model)
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"""The default docstring to use when tools don't have a docstring."""
|
|
2
|
-
|
|
3
|
-
DEFAULT_TOOL_DOCSTRING = """\
|
|
4
|
-
Correctly formatted and typed parameters extracted from the completion. \
|
|
5
|
-
Must include required parameters and may exclude optional parameters unless present in the text.\
|
|
6
|
-
"""
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"""This module contains the function to extract the return value of a tool."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeVar
|
|
4
|
-
|
|
5
|
-
import jiter
|
|
6
|
-
from pydantic import BaseModel
|
|
7
|
-
|
|
8
|
-
from .._partial import partial
|
|
9
|
-
from ._base_type import BaseType, is_base_type
|
|
10
|
-
from ._convert_base_type_to_base_tool import convert_base_type_to_base_tool
|
|
11
|
-
|
|
12
|
-
_ResponseModelT = TypeVar("_ResponseModelT", bound=BaseModel | BaseType)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def extract_tool_return(
|
|
16
|
-
response_model: type[_ResponseModelT],
|
|
17
|
-
json_output: str | object,
|
|
18
|
-
allow_partial: bool,
|
|
19
|
-
) -> _ResponseModelT:
|
|
20
|
-
json_obj = (
|
|
21
|
-
jiter.from_json(
|
|
22
|
-
json_output.encode(),
|
|
23
|
-
partial_mode="trailing-strings" if allow_partial else "off",
|
|
24
|
-
)
|
|
25
|
-
if isinstance(json_output, str)
|
|
26
|
-
else json_output
|
|
27
|
-
)
|
|
28
|
-
if is_base_type(response_model):
|
|
29
|
-
temp_model = convert_base_type_to_base_tool(response_model, BaseModel) # type: ignore
|
|
30
|
-
if allow_partial:
|
|
31
|
-
return partial(temp_model).model_validate(json_obj).value # type: ignore
|
|
32
|
-
return temp_model.model_validate(json_obj).value # type: ignore
|
|
33
|
-
|
|
34
|
-
if allow_partial:
|
|
35
|
-
return partial(response_model).model_validate(json_obj) # type: ignore
|
|
36
|
-
return response_model.model_validate(json_obj) # type: ignore
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"""This module contains the `format_template` function."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
from ._get_template_values import get_template_values
|
|
7
|
-
from ._get_template_variables import get_template_variables
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def format_template(template: str, attrs: dict[str, Any]) -> str:
|
|
11
|
-
"""Formats the given prompt `template`
|
|
12
|
-
|
|
13
|
-
Args:
|
|
14
|
-
template: The template to format.
|
|
15
|
-
attrs: The attributes to use for formatting.
|
|
16
|
-
|
|
17
|
-
Returns:
|
|
18
|
-
The formatted template.
|
|
19
|
-
|
|
20
|
-
"""
|
|
21
|
-
dedented_template = inspect.cleandoc(template).strip()
|
|
22
|
-
template_vars = get_template_variables(dedented_template, True)
|
|
23
|
-
|
|
24
|
-
values = get_template_values(template_vars, attrs)
|
|
25
|
-
|
|
26
|
-
# Remove any special format specs that are actually invalid normally
|
|
27
|
-
dedented_template = dedented_template.replace(":lists", "").replace(":list", "")
|
|
28
|
-
|
|
29
|
-
return dedented_template.format(**values).strip()
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"""Utility for determining the type of an audio file from its bytes."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def get_audio_type(audio_data: bytes) -> str:
|
|
5
|
-
if audio_data.startswith(b"RIFF") and audio_data[8:12] == b"WAVE":
|
|
6
|
-
return "wav"
|
|
7
|
-
elif audio_data.startswith(b"ID3") or audio_data.startswith(b"\xff\xfb"):
|
|
8
|
-
return "mp3"
|
|
9
|
-
elif audio_data.startswith(b"FORM") and audio_data[8:12] == b"AIFF":
|
|
10
|
-
return "aiff"
|
|
11
|
-
elif audio_data.startswith(b"\xff\xf1") or audio_data.startswith(b"\xff\xf9"):
|
|
12
|
-
return "aac"
|
|
13
|
-
elif audio_data.startswith(b"OggS"):
|
|
14
|
-
return "ogg"
|
|
15
|
-
elif audio_data.startswith(b"fLaC"):
|
|
16
|
-
return "flac"
|
|
17
|
-
|
|
18
|
-
raise ValueError("Unsupported audio type")
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""Function for binding `args` and `kwargs` as a dictionary to the fn's signature."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from collections.abc import Callable
|
|
5
|
-
from typing import Any
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def get_fn_args(
|
|
9
|
-
fn: Callable, args: tuple[object, ...], kwargs: dict[str, Any]
|
|
10
|
-
) -> dict[str, Any]:
|
|
11
|
-
"""Returns the `args` and `kwargs` as a dictionary bound by `fn`'s signature."""
|
|
12
|
-
bound_args = inspect.signature(fn).bind_partial(*args, **kwargs)
|
|
13
|
-
bound_args.apply_defaults()
|
|
14
|
-
return bound_args.arguments
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"""Utility for determining the type of an image from its bytes."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def get_image_type(image_data: bytes) -> str:
|
|
5
|
-
if image_data.startswith(b"\xff\xd8\xff"):
|
|
6
|
-
return "jpeg"
|
|
7
|
-
elif image_data.startswith(b"\x89PNG\r\n\x1a\n"):
|
|
8
|
-
return "png"
|
|
9
|
-
elif image_data.startswith(b"GIF87a") or image_data.startswith(b"GIF89a"):
|
|
10
|
-
return "gif"
|
|
11
|
-
elif image_data.startswith(b"RIFF") and image_data[8:12] == b"WEBP":
|
|
12
|
-
return "webp"
|
|
13
|
-
elif image_data[4:12] in (
|
|
14
|
-
b"ftypmif1",
|
|
15
|
-
b"ftypmsf1",
|
|
16
|
-
b"ftypheic",
|
|
17
|
-
b"ftypheix",
|
|
18
|
-
b"ftyphevc",
|
|
19
|
-
b"ftyphevx",
|
|
20
|
-
):
|
|
21
|
-
subtype = image_data[8:12]
|
|
22
|
-
if subtype in (b"heic", b"heix"):
|
|
23
|
-
return "heic"
|
|
24
|
-
elif subtype in (b"mif1", b"msf1", b"hevc", b"hevx"):
|
|
25
|
-
return "heif"
|
|
26
|
-
raise ValueError("Unsupported image type")
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"""Utility for pulling metadata from a call and merging with any dynamic metadata."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import Callable
|
|
4
|
-
|
|
5
|
-
from pydantic import BaseModel
|
|
6
|
-
|
|
7
|
-
from ..dynamic_config import BaseDynamicConfig
|
|
8
|
-
from ..metadata import Metadata
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def get_metadata(
|
|
12
|
-
fn: Callable | BaseModel, dynamic_config: BaseDynamicConfig
|
|
13
|
-
) -> Metadata:
|
|
14
|
-
"""Get the metadata from the function and merge with any dynamic metadata."""
|
|
15
|
-
if dynamic_config and "metadata" in dynamic_config:
|
|
16
|
-
return dynamic_config["metadata"]
|
|
17
|
-
return getattr(fn, "_metadata", Metadata())
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"""Utility for getting the possible most recent user message."""
|
|
2
|
-
|
|
3
|
-
from typing import TypeVar
|
|
4
|
-
|
|
5
|
-
_T = TypeVar("_T")
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def get_possible_user_message_param(messages: list[_T]) -> _T | None:
|
|
9
|
-
"""Get the possible most recent user message."""
|
|
10
|
-
if not messages:
|
|
11
|
-
return None
|
|
12
|
-
most_recent_message = messages[-1]
|
|
13
|
-
if (
|
|
14
|
-
isinstance(most_recent_message, dict)
|
|
15
|
-
and "role" in most_recent_message
|
|
16
|
-
and most_recent_message["role"] == "user"
|
|
17
|
-
):
|
|
18
|
-
return most_recent_message
|
|
19
|
-
if hasattr(most_recent_message, "role") and most_recent_message.role == "user": # pyright: ignore [reportAttributeAccessIssue]
|
|
20
|
-
return most_recent_message
|
|
21
|
-
return None
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"""Utility for pulling the `prompt_template` from a call or `BasePrompt`."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
import os
|
|
5
|
-
from collections.abc import Callable
|
|
6
|
-
|
|
7
|
-
from pydantic import BaseModel
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def get_prompt_template(fn: Callable | BaseModel) -> str:
|
|
11
|
-
"""Get the metadata from the function and merge with any dynamic metadata."""
|
|
12
|
-
prompt_template = getattr(fn, "_prompt_template", None)
|
|
13
|
-
if prompt_template:
|
|
14
|
-
return prompt_template
|
|
15
|
-
|
|
16
|
-
docstring_prompt_enabled = os.getenv("MIRASCOPE_DOCSTRING_PROMPT_TEMPLATE")
|
|
17
|
-
doc = fn.__doc__
|
|
18
|
-
if not doc:
|
|
19
|
-
raise ValueError("No prompt template set!")
|
|
20
|
-
if docstring_prompt_enabled != "ENABLED":
|
|
21
|
-
raise ValueError(
|
|
22
|
-
"You must explicitly enable docstring prompt templates by setting "
|
|
23
|
-
"`MIRASCOPE_DOCSTRING_PROMPT_TEMPLATE=ENABLED` in your environment."
|
|
24
|
-
)
|
|
25
|
-
return inspect.cleandoc(doc)
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"""This module contains the `get_template_values` function."""
|
|
2
|
-
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
def get_template_values(
|
|
7
|
-
template_variables: list[tuple[str, str | None]], attrs: dict[str, Any]
|
|
8
|
-
) -> dict[str, Any]:
|
|
9
|
-
"""Returns the values of the given `template_variables` from the provided `attrs`.
|
|
10
|
-
|
|
11
|
-
Args:
|
|
12
|
-
template_variables: The variables to extract from the `attrs`.
|
|
13
|
-
attrs: The attributes to extract the variables from.
|
|
14
|
-
|
|
15
|
-
Returns:
|
|
16
|
-
The values of the template variables.
|
|
17
|
-
"""
|
|
18
|
-
values = {}
|
|
19
|
-
attrs.update(attrs.pop("kwargs", {}))
|
|
20
|
-
if "self" in attrs:
|
|
21
|
-
values["self"] = attrs.get("self")
|
|
22
|
-
for var, format_spec in template_variables:
|
|
23
|
-
if var.startswith("self"):
|
|
24
|
-
values["self"] = attrs.get("self")
|
|
25
|
-
elif "." in var:
|
|
26
|
-
var = var.split(".")[0]
|
|
27
|
-
values[var] = attrs.get(var)
|
|
28
|
-
continue
|
|
29
|
-
elif format_spec in ["list", "lists"]:
|
|
30
|
-
value = attrs[var]
|
|
31
|
-
if format_spec == "list":
|
|
32
|
-
if not isinstance(value, list):
|
|
33
|
-
raise ValueError(
|
|
34
|
-
f"Template variable '{var}' must be a list when using the "
|
|
35
|
-
"'list' format spec."
|
|
36
|
-
)
|
|
37
|
-
values[var] = "\n".join([str(item) for item in attrs[var]])
|
|
38
|
-
else:
|
|
39
|
-
if not isinstance(value, list) or (
|
|
40
|
-
value
|
|
41
|
-
and not all(isinstance(item, list | tuple | set) for item in value)
|
|
42
|
-
):
|
|
43
|
-
raise ValueError(
|
|
44
|
-
f"Template variable '{var}' must be a list of lists when using "
|
|
45
|
-
"the 'lists' format spec."
|
|
46
|
-
)
|
|
47
|
-
values[var] = "\n\n".join(
|
|
48
|
-
["\n".join([str(subitem) for subitem in item]) for item in value]
|
|
49
|
-
)
|
|
50
|
-
else:
|
|
51
|
-
values[var] = attrs[var] if attrs[var] is not None else ""
|
|
52
|
-
return values
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"""This module provides a function to get the variables in a template string."""
|
|
2
|
-
|
|
3
|
-
from string import Formatter
|
|
4
|
-
from typing import Literal, overload
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@overload
|
|
8
|
-
def get_template_variables(
|
|
9
|
-
template: str, include_format_spec: Literal[True]
|
|
10
|
-
) -> list[tuple[str, str | None]]: ...
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@overload
|
|
14
|
-
def get_template_variables(
|
|
15
|
-
template: str, include_format_spec: Literal[False]
|
|
16
|
-
) -> list[str]: ...
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def get_template_variables(
|
|
20
|
-
template: str, include_format_spec: bool
|
|
21
|
-
) -> list[str] | list[tuple[str, str | None]]:
|
|
22
|
-
"""Returns the variables in the given template string.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
template: The template string to parse.
|
|
26
|
-
include_format_spec: A boolean indicating whether to include format specifications.
|
|
27
|
-
|
|
28
|
-
Returns:
|
|
29
|
-
The variables in the template string.
|
|
30
|
-
"""
|
|
31
|
-
if include_format_spec:
|
|
32
|
-
return [
|
|
33
|
-
(var, format_spec)
|
|
34
|
-
for _, var, format_spec, _ in Formatter().parse(template)
|
|
35
|
-
if var
|
|
36
|
-
]
|
|
37
|
-
else:
|
|
38
|
-
return [var for _, var, _, _ in Formatter().parse(template) if var]
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"""A function generating content to request JSON mode from models without it."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
from ..tool import BaseTool
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def json_mode_content(tool_type: type[BaseTool] | None) -> str:
|
|
9
|
-
"""Returns the content to request JSON mode from models without it."""
|
|
10
|
-
if not tool_type:
|
|
11
|
-
return "\n\nExtract ONLY a valid JSON dict using the schema."
|
|
12
|
-
return f"""
|
|
13
|
-
|
|
14
|
-
Extract ONLY a valid JSON dict (NOT THE SCHEMA) from the content that adheres to this schema:
|
|
15
|
-
{json.dumps(tool_type.model_json_schema(), indent=2)}"""
|