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
mirascope/core/base/tool.py
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"""This module defines the base class for tools used in LLM calls.
|
|
2
|
-
|
|
3
|
-
usage-docs: learn/tools.md#the-basetool-class
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import inspect
|
|
9
|
-
from abc import abstractmethod
|
|
10
|
-
from collections.abc import Callable
|
|
11
|
-
from typing import Any, ClassVar, TypeVar, cast
|
|
12
|
-
|
|
13
|
-
from pydantic import BaseModel, ConfigDict
|
|
14
|
-
|
|
15
|
-
from . import _utils
|
|
16
|
-
|
|
17
|
-
_BaseToolT = TypeVar("_BaseToolT")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class BaseTool(BaseModel):
|
|
21
|
-
'''A class for defining tools for LLM calls.
|
|
22
|
-
|
|
23
|
-
Example:
|
|
24
|
-
|
|
25
|
-
```python
|
|
26
|
-
from mirascope.core import BaseTool
|
|
27
|
-
from pydantic import Field
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class FormatBook(BaseTool):
|
|
31
|
-
"""Returns a nicely formatted book recommendation."""
|
|
32
|
-
|
|
33
|
-
title: str = Field(..., description="The title of the book.")
|
|
34
|
-
author: str = Field(..., description="The author of the book.")
|
|
35
|
-
|
|
36
|
-
def call(self) -> str:
|
|
37
|
-
return f"{self.title} by {self.author}"
|
|
38
|
-
```
|
|
39
|
-
'''
|
|
40
|
-
|
|
41
|
-
__custom_name__: ClassVar[str] = ""
|
|
42
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
43
|
-
|
|
44
|
-
@classmethod
|
|
45
|
-
def _name(cls) -> str:
|
|
46
|
-
"""Returns the name of the tool."""
|
|
47
|
-
return cls.__custom_name__ if cls.__custom_name__ else cls.__name__
|
|
48
|
-
|
|
49
|
-
@classmethod
|
|
50
|
-
def _description(cls) -> str:
|
|
51
|
-
"""Returns the description of the tool."""
|
|
52
|
-
return (
|
|
53
|
-
inspect.cleandoc(cls.__doc__)
|
|
54
|
-
if cls.__doc__
|
|
55
|
-
else _utils.DEFAULT_TOOL_DOCSTRING
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
@property
|
|
59
|
-
def args(self) -> dict[str, Any]:
|
|
60
|
-
"""The arguments of the tool as a dictionary."""
|
|
61
|
-
return {
|
|
62
|
-
field: getattr(self, field)
|
|
63
|
-
for field in self.model_fields
|
|
64
|
-
if field != "tool_call"
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
@abstractmethod
|
|
68
|
-
def call(self) -> Any: # noqa: ANN401
|
|
69
|
-
"""The method to call the tool."""
|
|
70
|
-
...
|
|
71
|
-
|
|
72
|
-
@classmethod
|
|
73
|
-
def model_tool_schema(cls) -> dict[str, Any]:
|
|
74
|
-
"""Returns the model_json_schema modified for reduced token usage."""
|
|
75
|
-
model_schema = cls.model_json_schema()
|
|
76
|
-
model_schema.pop("title", None)
|
|
77
|
-
model_schema.pop("description", None)
|
|
78
|
-
|
|
79
|
-
def remove_schema_titles(obj: Any) -> Any: # noqa: ANN401
|
|
80
|
-
if isinstance(obj, dict):
|
|
81
|
-
# Remove the 'title' key only if it's a direct child of a schema object
|
|
82
|
-
if "type" in obj or "$ref" in obj or "properties" in obj:
|
|
83
|
-
obj.pop("title", None)
|
|
84
|
-
|
|
85
|
-
# Recursively process nested objects
|
|
86
|
-
for key, value in list(obj.items()):
|
|
87
|
-
obj[key] = remove_schema_titles(value)
|
|
88
|
-
elif isinstance(obj, list):
|
|
89
|
-
# Recursively process list items
|
|
90
|
-
return [remove_schema_titles(item) for item in obj]
|
|
91
|
-
|
|
92
|
-
return obj
|
|
93
|
-
|
|
94
|
-
return cast(dict[str, Any], remove_schema_titles(model_schema))
|
|
95
|
-
|
|
96
|
-
@classmethod
|
|
97
|
-
def type_from_fn(cls: _BaseToolT, fn: Callable) -> _BaseToolT:
|
|
98
|
-
"""Returns this tool type converted from a function.
|
|
99
|
-
|
|
100
|
-
Args:
|
|
101
|
-
fn: The function to convert into this tool type.
|
|
102
|
-
"""
|
|
103
|
-
return _utils.convert_function_to_base_tool(fn, cls) # type: ignore
|
|
104
|
-
|
|
105
|
-
@classmethod
|
|
106
|
-
def type_from_base_model_type(
|
|
107
|
-
cls: _BaseToolT, tool_type: type[BaseModel]
|
|
108
|
-
) -> _BaseToolT:
|
|
109
|
-
"""Returns this tool type converted from a given base tool type.
|
|
110
|
-
|
|
111
|
-
Args:
|
|
112
|
-
tool_type: The tool type to convert into this tool type. This can be a
|
|
113
|
-
custom `BaseTool` or `BaseModel` definition.
|
|
114
|
-
"""
|
|
115
|
-
return _utils.convert_base_model_to_base_tool(tool_type, cls) # type: ignore
|
|
116
|
-
|
|
117
|
-
@classmethod
|
|
118
|
-
def type_from_base_type(
|
|
119
|
-
cls: _BaseToolT, base_type: type[_utils.BaseType]
|
|
120
|
-
) -> _BaseToolT:
|
|
121
|
-
"""Returns this tool type converted from a base type.
|
|
122
|
-
|
|
123
|
-
Args:
|
|
124
|
-
base_type: The base type (e.g. `int`) to convert into this tool type.
|
|
125
|
-
"""
|
|
126
|
-
return _utils.convert_base_type_to_base_tool(base_type, cls) # type: ignore
|
mirascope/core/base/toolkit.py
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"""The module for defining the toolkit class for LLM call tools.
|
|
2
|
-
|
|
3
|
-
usage docs: learn/tools.md#basetoolkit
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from __future__ import annotations
|
|
7
|
-
|
|
8
|
-
import inspect
|
|
9
|
-
from abc import ABC
|
|
10
|
-
from collections.abc import Callable
|
|
11
|
-
from typing import Any, ClassVar, Concatenate, NamedTuple, TypeVar
|
|
12
|
-
|
|
13
|
-
from pydantic import BaseModel, ConfigDict
|
|
14
|
-
from typing_extensions import ParamSpec
|
|
15
|
-
|
|
16
|
-
from . import BaseTool
|
|
17
|
-
from ._utils import convert_function_to_base_tool, get_template_variables
|
|
18
|
-
|
|
19
|
-
_TOOLKIT_TOOL_METHOD_MARKER: str = "__toolkit_tool_method__"
|
|
20
|
-
|
|
21
|
-
_namespaces: set[str] = set()
|
|
22
|
-
|
|
23
|
-
P = ParamSpec("P")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class ToolKitToolMethod(NamedTuple):
|
|
27
|
-
method: Callable[..., str]
|
|
28
|
-
template_vars: list[str]
|
|
29
|
-
template: str
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class BaseToolKit(BaseModel, ABC):
|
|
33
|
-
"""A class for defining tools for LLM call tools.
|
|
34
|
-
|
|
35
|
-
The class should have methods decorated with `@toolkit_tool` to create tools.
|
|
36
|
-
|
|
37
|
-
Example:
|
|
38
|
-
```python
|
|
39
|
-
from mirascope.core.base import BaseToolKit, toolkit_tool
|
|
40
|
-
from mirascope.core import openai
|
|
41
|
-
|
|
42
|
-
class BookRecommendationToolKit(BaseToolKit):
|
|
43
|
-
'''A toolkit for recommending books.'''
|
|
44
|
-
|
|
45
|
-
__namespace__: ClassVar[str | None] = 'book_tools'
|
|
46
|
-
reading_level: Literal["beginner", "advanced"]
|
|
47
|
-
|
|
48
|
-
@toolkit_tool
|
|
49
|
-
def format_book(self, title: str, author: str) -> str:
|
|
50
|
-
'''Returns the title and author of a book nicely formatted.
|
|
51
|
-
|
|
52
|
-
Reading level: {self.reading_level}
|
|
53
|
-
'''
|
|
54
|
-
return f"{title} by {author}"
|
|
55
|
-
|
|
56
|
-
@openai.call(model="gpt-4o")
|
|
57
|
-
def recommend_book(genre: str, reading_level: Literal["beginner", "advanced"]):
|
|
58
|
-
'''Recommend a {genre} book.'''
|
|
59
|
-
toolkit = BookRecommendationToolKit(reading_level=reading_level)
|
|
60
|
-
return {"tools": toolkit.create_tools()}
|
|
61
|
-
|
|
62
|
-
response = recommend_book("fantasy", "beginner")
|
|
63
|
-
if tool := response.tool:
|
|
64
|
-
output = tool.call()
|
|
65
|
-
print(output)
|
|
66
|
-
#> The Name of the Wind by Patrick Rothfuss
|
|
67
|
-
else:
|
|
68
|
-
print(response.content)
|
|
69
|
-
#> Sure! I would recommend...
|
|
70
|
-
```
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
74
|
-
_toolkit_tool_methods: ClassVar[list[ToolKitToolMethod]]
|
|
75
|
-
__namespace__: ClassVar[str | None] = None
|
|
76
|
-
|
|
77
|
-
def create_tools(self) -> list[type[BaseTool]]:
|
|
78
|
-
"""The method to create the tools."""
|
|
79
|
-
tools = []
|
|
80
|
-
for method, template_vars, template in self._toolkit_tool_methods:
|
|
81
|
-
for var in template_vars:
|
|
82
|
-
if var.startswith("self."):
|
|
83
|
-
continue
|
|
84
|
-
# Replace non-self template variables with escaped double brackets so
|
|
85
|
-
# that templating `self` results in a future templateable string.
|
|
86
|
-
template = template.replace(f"{{{var}}}", f"{{{{{var}}}}}")
|
|
87
|
-
converted_method = convert_function_to_base_tool(
|
|
88
|
-
method, BaseTool, template.format(self=self), self.__namespace__
|
|
89
|
-
)
|
|
90
|
-
for key, value in self:
|
|
91
|
-
setattr(converted_method, key, value)
|
|
92
|
-
tools.append(converted_method)
|
|
93
|
-
return tools
|
|
94
|
-
|
|
95
|
-
@classmethod
|
|
96
|
-
def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: # noqa: ANN401
|
|
97
|
-
# validate the namespace
|
|
98
|
-
if cls.__namespace__:
|
|
99
|
-
if cls.__namespace__ in _namespaces:
|
|
100
|
-
raise ValueError(f"The namespace {cls.__namespace__} is already used")
|
|
101
|
-
_namespaces.add(cls.__namespace__)
|
|
102
|
-
|
|
103
|
-
cls._toolkit_tool_methods = []
|
|
104
|
-
for attr in cls.__dict__.values():
|
|
105
|
-
if not getattr(attr, _TOOLKIT_TOOL_METHOD_MARKER, False):
|
|
106
|
-
continue
|
|
107
|
-
# Validate the toolkit_tool_method
|
|
108
|
-
if (template := attr.__doc__) is None:
|
|
109
|
-
raise ValueError("The toolkit_tool method must have a docstring")
|
|
110
|
-
|
|
111
|
-
dedented_template = inspect.cleandoc(template)
|
|
112
|
-
template_vars = get_template_variables(dedented_template, False)
|
|
113
|
-
|
|
114
|
-
for var in template_vars:
|
|
115
|
-
if not var.startswith("self."):
|
|
116
|
-
# Skip template variables that do not start with self as they may
|
|
117
|
-
# be later templated e.g. if using a call as a tool.
|
|
118
|
-
continue
|
|
119
|
-
|
|
120
|
-
self_var = var[5:]
|
|
121
|
-
|
|
122
|
-
# Expecting pydantic model fields or class attribute and property
|
|
123
|
-
if self_var in cls.model_fields or hasattr(cls, self_var):
|
|
124
|
-
continue
|
|
125
|
-
raise ValueError(
|
|
126
|
-
f"The toolkit_tool method template variable {var} is not found in "
|
|
127
|
-
"the class"
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
cls._toolkit_tool_methods.append(
|
|
131
|
-
ToolKitToolMethod(attr, template_vars, dedented_template)
|
|
132
|
-
)
|
|
133
|
-
if not cls._toolkit_tool_methods:
|
|
134
|
-
raise ValueError("No toolkit_tool method found")
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
_BaseToolKitT = TypeVar("_BaseToolKitT", bound=BaseToolKit)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def toolkit_tool(
|
|
141
|
-
method: Callable[Concatenate[_BaseToolKitT, P], str],
|
|
142
|
-
) -> Callable[Concatenate[_BaseToolKitT, P], str]:
|
|
143
|
-
# Mark the method as a toolkit tool
|
|
144
|
-
setattr(method, _TOOLKIT_TOOL_METHOD_MARKER, True)
|
|
145
|
-
|
|
146
|
-
return method
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"""The Mirascope Cohere Module."""
|
|
2
|
-
|
|
3
|
-
from ._call import cohere_call
|
|
4
|
-
from ._call import cohere_call as call
|
|
5
|
-
from .call_params import CohereCallParams
|
|
6
|
-
from .call_response import CohereCallResponse
|
|
7
|
-
from .call_response_chunk import CohereCallResponseChunk
|
|
8
|
-
from .dynamic_config import CohereDynamicConfig
|
|
9
|
-
from .stream import CohereStream
|
|
10
|
-
from .tool import CohereTool
|
|
11
|
-
|
|
12
|
-
__all__ = [
|
|
13
|
-
"call",
|
|
14
|
-
"CohereDynamicConfig",
|
|
15
|
-
"CohereCallParams",
|
|
16
|
-
"CohereCallResponse",
|
|
17
|
-
"CohereCallResponseChunk",
|
|
18
|
-
"CohereStream",
|
|
19
|
-
"CohereTool",
|
|
20
|
-
"cohere_call",
|
|
21
|
-
]
|
mirascope/core/cohere/_call.py
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"""The `cohere_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 CohereCallParams
|
|
11
|
-
from .call_response import CohereCallResponse
|
|
12
|
-
from .call_response_chunk import CohereCallResponseChunk
|
|
13
|
-
from .dynamic_config import CohereDynamicConfig
|
|
14
|
-
from .stream import CohereStream
|
|
15
|
-
from .tool import CohereTool
|
|
16
|
-
|
|
17
|
-
cohere_call = call_factory(
|
|
18
|
-
TCallResponse=CohereCallResponse,
|
|
19
|
-
TCallResponseChunk=CohereCallResponseChunk,
|
|
20
|
-
TDynamicConfig=CohereDynamicConfig,
|
|
21
|
-
TToolType=CohereTool,
|
|
22
|
-
TStream=CohereStream,
|
|
23
|
-
TCallParams=CohereCallParams,
|
|
24
|
-
default_call_params=CohereCallParams(),
|
|
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 Cohere 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 Cohere 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.cohere import cohere_call
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@cohere_call("command-r-plus")
|
|
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 Cohere 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 Cohere API call.
|
|
58
|
-
response_model (BaseModel | BaseType): The response model into which the response
|
|
59
|
-
should be structured.
|
|
60
|
-
output_parser (Callable[[CohereCallResponse | ResponseModelT], Any]): A function for
|
|
61
|
-
parsing the call response whose value will be returned in place of the original
|
|
62
|
-
call response.
|
|
63
|
-
json_mode (bool): Whether to use JSON Mode.
|
|
64
|
-
client (object): An optional custom client to use in place of the default client.
|
|
65
|
-
call_params (CohereCallParams): The `CohereCallParams` call parameters to use in the
|
|
66
|
-
API call.
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
decorator (Callable): The decorator for turning a typed function into a Cohere API
|
|
70
|
-
call.
|
|
71
|
-
"""
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Cohere 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,39 +0,0 @@
|
|
|
1
|
-
"""Calculate the cost of a completion using the Cohere API."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def calculate_cost(
|
|
5
|
-
input_tokens: int | float | None,
|
|
6
|
-
output_tokens: int | float | None,
|
|
7
|
-
model: str = "command-r-plus",
|
|
8
|
-
) -> float | None:
|
|
9
|
-
"""Calculate the cost of a completion using the Cohere API.
|
|
10
|
-
|
|
11
|
-
https://cohere.com/pricing
|
|
12
|
-
|
|
13
|
-
Model Input Output
|
|
14
|
-
command-r $0.5 / 1M tokens $1.5 / 1M tokens
|
|
15
|
-
command-r-plus $3 / 1M tokens $15 / 1M tokens
|
|
16
|
-
"""
|
|
17
|
-
pricing = {
|
|
18
|
-
"command-r": {
|
|
19
|
-
"prompt": 0.000_000_5,
|
|
20
|
-
"completion": 0.000_001_5,
|
|
21
|
-
},
|
|
22
|
-
"command-r-plus": {
|
|
23
|
-
"prompt": 0.000_003,
|
|
24
|
-
"completion": 0.000_015,
|
|
25
|
-
},
|
|
26
|
-
}
|
|
27
|
-
if input_tokens is None or output_tokens is None:
|
|
28
|
-
return None
|
|
29
|
-
|
|
30
|
-
try:
|
|
31
|
-
model_pricing = pricing[model]
|
|
32
|
-
except KeyError:
|
|
33
|
-
return None
|
|
34
|
-
|
|
35
|
-
prompt_cost = input_tokens * model_pricing["prompt"]
|
|
36
|
-
completion_cost = output_tokens * model_pricing["completion"]
|
|
37
|
-
total_cost = prompt_cost + completion_cost
|
|
38
|
-
|
|
39
|
-
return total_cost
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"""Utility for converting `BaseMessageParam` to `ChatCompletionMessageParam`"""
|
|
2
|
-
|
|
3
|
-
from cohere.types import ChatMessage
|
|
4
|
-
|
|
5
|
-
from ...base import BaseMessageParam
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def convert_message_params(
|
|
9
|
-
message_params: list[BaseMessageParam | ChatMessage],
|
|
10
|
-
) -> list[ChatMessage]:
|
|
11
|
-
converted_message_params = []
|
|
12
|
-
for message_param in message_params:
|
|
13
|
-
if isinstance(message_param, ChatMessage):
|
|
14
|
-
converted_message_params.append(message_param)
|
|
15
|
-
elif isinstance(content := message_param.content, str):
|
|
16
|
-
converted_message_params.append(
|
|
17
|
-
ChatMessage(
|
|
18
|
-
role=message_param.role.upper(), # type: ignore
|
|
19
|
-
message=content,
|
|
20
|
-
)
|
|
21
|
-
)
|
|
22
|
-
else:
|
|
23
|
-
if len(content) != 1 or content[0].type != "text":
|
|
24
|
-
raise ValueError("Cohere does not currently support multimodalities.")
|
|
25
|
-
converted_message_params.append(
|
|
26
|
-
ChatMessage(
|
|
27
|
-
role=message_param.role.upper(), # type: ignore
|
|
28
|
-
message=content[0].text,
|
|
29
|
-
)
|
|
30
|
-
)
|
|
31
|
-
return converted_message_params
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"""Get the JSON output from a completion response."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
|
|
5
|
-
from cohere.types import StreamedChatResponse_ToolCallsGeneration
|
|
6
|
-
|
|
7
|
-
from ..call_response import CohereCallResponse
|
|
8
|
-
from ..call_response_chunk import CohereCallResponseChunk
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def get_json_output(
|
|
12
|
-
response: CohereCallResponse | CohereCallResponseChunk, json_mode: bool
|
|
13
|
-
) -> str:
|
|
14
|
-
"""Get the JSON output from a completion response."""
|
|
15
|
-
if isinstance(response, CohereCallResponse):
|
|
16
|
-
if json_mode and response.content:
|
|
17
|
-
return response.content
|
|
18
|
-
elif response.response.tool_calls:
|
|
19
|
-
return json.dumps(response.response.tool_calls[0].parameters)
|
|
20
|
-
raise ValueError("No tool call or JSON object found in response.")
|
|
21
|
-
else:
|
|
22
|
-
# raise ValueError("Cohere does not support structured streaming... :(")
|
|
23
|
-
if json_mode:
|
|
24
|
-
return response.content
|
|
25
|
-
elif (
|
|
26
|
-
isinstance(response.chunk, StreamedChatResponse_ToolCallsGeneration)
|
|
27
|
-
and (tool_calls := response.chunk.tool_calls)
|
|
28
|
-
and (parameters := tool_calls[0].parameters)
|
|
29
|
-
):
|
|
30
|
-
return json.dumps(parameters)
|
|
31
|
-
return ""
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""Handles the stream of completion chunks."""
|
|
2
|
-
|
|
3
|
-
from collections.abc import AsyncGenerator, Generator
|
|
4
|
-
|
|
5
|
-
from cohere.types import StreamedChatResponse
|
|
6
|
-
|
|
7
|
-
from ..call_response_chunk import CohereCallResponseChunk
|
|
8
|
-
from ..tool import CohereTool
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def handle_stream(
|
|
12
|
-
stream: Generator[StreamedChatResponse, None, None],
|
|
13
|
-
tool_types: list[type[CohereTool]] | None = None,
|
|
14
|
-
) -> Generator[tuple[CohereCallResponseChunk, None], None, None]:
|
|
15
|
-
"""Iterator over the stream and constructs tools as they are streamed.
|
|
16
|
-
|
|
17
|
-
Note: cohere does not currently support streaming tools.
|
|
18
|
-
"""
|
|
19
|
-
for chunk in stream:
|
|
20
|
-
yield CohereCallResponseChunk(chunk=chunk), None
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
async def handle_stream_async(
|
|
24
|
-
stream: AsyncGenerator[StreamedChatResponse, None],
|
|
25
|
-
tool_types: list[type[CohereTool]] | None = None,
|
|
26
|
-
) -> AsyncGenerator[tuple[CohereCallResponseChunk, None], None]:
|
|
27
|
-
"""
|
|
28
|
-
Async iterator over the stream and constructs tools as they are streamed.
|
|
29
|
-
|
|
30
|
-
Note: cohere does not currently support streaming tools.
|
|
31
|
-
"""
|
|
32
|
-
async for chunk in stream:
|
|
33
|
-
yield CohereCallResponseChunk(chunk=chunk), None
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"""This module contains the setup_call function for Cohere tools."""
|
|
2
|
-
|
|
3
|
-
import inspect
|
|
4
|
-
from collections.abc import AsyncIterator, Awaitable, Callable, Coroutine, Iterator
|
|
5
|
-
from typing import Any, cast
|
|
6
|
-
|
|
7
|
-
from cohere import (
|
|
8
|
-
AsyncClient,
|
|
9
|
-
Client,
|
|
10
|
-
NonStreamedChatResponse,
|
|
11
|
-
)
|
|
12
|
-
from cohere.types import ChatMessage
|
|
13
|
-
|
|
14
|
-
from ...base import BaseMessageParam, BaseTool, _utils
|
|
15
|
-
from ..call_params import CohereCallParams
|
|
16
|
-
from ..dynamic_config import CohereDynamicConfig
|
|
17
|
-
from ..tool import CohereTool
|
|
18
|
-
from ._convert_message_params import convert_message_params
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def setup_call(
|
|
22
|
-
*,
|
|
23
|
-
model: str,
|
|
24
|
-
client: Client | AsyncClient | None,
|
|
25
|
-
fn: Callable[..., CohereDynamicConfig | Awaitable[CohereDynamicConfig]],
|
|
26
|
-
fn_args: dict[str, Any],
|
|
27
|
-
dynamic_config: CohereDynamicConfig,
|
|
28
|
-
tools: list[type[BaseTool] | Callable] | None,
|
|
29
|
-
json_mode: bool,
|
|
30
|
-
call_params: CohereCallParams,
|
|
31
|
-
extract: bool,
|
|
32
|
-
) -> tuple[
|
|
33
|
-
Callable[..., NonStreamedChatResponse]
|
|
34
|
-
| Callable[..., Awaitable[NonStreamedChatResponse]],
|
|
35
|
-
str,
|
|
36
|
-
list[ChatMessage],
|
|
37
|
-
list[type[CohereTool]] | None,
|
|
38
|
-
dict[str, Any],
|
|
39
|
-
]:
|
|
40
|
-
prompt_template, messages, tool_types, call_kwargs = _utils.setup_call(
|
|
41
|
-
fn, fn_args, dynamic_config, tools, CohereTool, call_params
|
|
42
|
-
)
|
|
43
|
-
messages = cast(list[BaseMessageParam | ChatMessage], messages)
|
|
44
|
-
messages = convert_message_params(messages)
|
|
45
|
-
|
|
46
|
-
preamble = ""
|
|
47
|
-
if "preamble" in call_kwargs and call_kwargs["preamble"] is not None:
|
|
48
|
-
preamble += call_kwargs.pop("preamble")
|
|
49
|
-
if messages[0].role == "SYSTEM": # type: ignore
|
|
50
|
-
if preamble:
|
|
51
|
-
preamble += "\n\n"
|
|
52
|
-
preamble += messages.pop(0).message
|
|
53
|
-
if preamble:
|
|
54
|
-
call_kwargs["preamble"] = preamble
|
|
55
|
-
if len(messages) > 1:
|
|
56
|
-
call_kwargs["chat_history"] = messages[:-1]
|
|
57
|
-
if json_mode:
|
|
58
|
-
# Cannot mutate ChatMessage in place
|
|
59
|
-
messages[-1] = ChatMessage(
|
|
60
|
-
role=messages[-1].role, # type: ignore
|
|
61
|
-
message=messages[-1].message
|
|
62
|
-
+ _utils.json_mode_content(tool_types[0] if tool_types else None),
|
|
63
|
-
tool_calls=messages[-1].tool_calls,
|
|
64
|
-
)
|
|
65
|
-
call_kwargs.pop("tools", None)
|
|
66
|
-
elif extract:
|
|
67
|
-
assert tool_types, "At least one tool must be provided for extraction."
|
|
68
|
-
call_kwargs |= {
|
|
69
|
-
"model": model,
|
|
70
|
-
"message": messages[-1].message,
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if client is None:
|
|
74
|
-
client = AsyncClient() if inspect.iscoroutinefunction(fn) else Client()
|
|
75
|
-
|
|
76
|
-
def create_or_stream(
|
|
77
|
-
stream: bool,
|
|
78
|
-
**kwargs: Any, # noqa: ANN401
|
|
79
|
-
) -> (
|
|
80
|
-
Iterator[Any]
|
|
81
|
-
| AsyncIterator[Any]
|
|
82
|
-
| NonStreamedChatResponse
|
|
83
|
-
| Coroutine[Any, Any, NonStreamedChatResponse]
|
|
84
|
-
):
|
|
85
|
-
if stream:
|
|
86
|
-
return client.chat_stream(**kwargs)
|
|
87
|
-
return client.chat(**kwargs)
|
|
88
|
-
|
|
89
|
-
return create_or_stream, prompt_template, messages, tool_types, call_kwargs # type: ignore
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"""usage docs: learn/calls.md#provider-specific-parameters"""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
from collections.abc import Sequence
|
|
6
|
-
|
|
7
|
-
from cohere.types import (
|
|
8
|
-
ChatConnector,
|
|
9
|
-
ChatDocument,
|
|
10
|
-
ChatRequestPromptTruncation,
|
|
11
|
-
ToolResult,
|
|
12
|
-
)
|
|
13
|
-
from typing_extensions import NotRequired
|
|
14
|
-
|
|
15
|
-
from ..base import BaseCallParams
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class CohereCallParams(BaseCallParams):
|
|
19
|
-
"""The parameters to use when calling the Cohere API.
|
|
20
|
-
|
|
21
|
-
[Cohere API Reference](https://docs.cohere.com/reference/chat)
|
|
22
|
-
|
|
23
|
-
Attributes:
|
|
24
|
-
conversation_id: ...
|
|
25
|
-
prompt_truncation: ...
|
|
26
|
-
connectors: ...
|
|
27
|
-
search_queries_only: ...
|
|
28
|
-
documents: ...
|
|
29
|
-
temperature: ...
|
|
30
|
-
max_tokens: ...
|
|
31
|
-
max_input_tokens: ...
|
|
32
|
-
k: ...
|
|
33
|
-
p: ...
|
|
34
|
-
seed: ...
|
|
35
|
-
stop_sequences: ...
|
|
36
|
-
frequency_penalty: ...
|
|
37
|
-
presence_penalty: ...
|
|
38
|
-
raw_prompting: ...
|
|
39
|
-
tool_results: ...
|
|
40
|
-
"""
|
|
41
|
-
|
|
42
|
-
conversation_id: NotRequired[str | None]
|
|
43
|
-
prompt_truncation: NotRequired[ChatRequestPromptTruncation | None]
|
|
44
|
-
connectors: NotRequired[Sequence[ChatConnector] | None]
|
|
45
|
-
search_queries_only: NotRequired[bool | None]
|
|
46
|
-
documents: NotRequired[Sequence[ChatDocument] | None]
|
|
47
|
-
temperature: NotRequired[float | None]
|
|
48
|
-
max_tokens: NotRequired[int | None]
|
|
49
|
-
max_input_tokens: NotRequired[int | None]
|
|
50
|
-
k: NotRequired[int | None]
|
|
51
|
-
p: NotRequired[float | None]
|
|
52
|
-
seed: NotRequired[int | None]
|
|
53
|
-
stop_sequences: NotRequired[Sequence[str] | None]
|
|
54
|
-
frequency_penalty: NotRequired[float | None]
|
|
55
|
-
presence_penalty: NotRequired[float | None]
|
|
56
|
-
raw_prompting: NotRequired[bool | None]
|
|
57
|
-
tool_results: NotRequired[Sequence[ToolResult] | None]
|