mirascope 2.0.0__py3-none-any.whl → 2.0.0a0__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 +2 -11
- mirascope/graphs/__init__.py +22 -0
- mirascope/graphs/finite_state_machine.py +625 -0
- mirascope/llm/__init__.py +16 -101
- mirascope/llm/agents/__init__.py +15 -0
- mirascope/llm/agents/agent.py +97 -0
- mirascope/llm/agents/agent_template.py +45 -0
- mirascope/llm/agents/decorator.py +176 -0
- mirascope/llm/calls/__init__.py +1 -2
- mirascope/llm/calls/base_call.py +33 -0
- mirascope/llm/calls/calls.py +58 -84
- mirascope/llm/calls/decorator.py +120 -140
- mirascope/llm/clients/__init__.py +34 -0
- mirascope/llm/clients/anthropic/__init__.py +11 -0
- mirascope/llm/{providers/openai/completions → clients/anthropic}/_utils/__init__.py +0 -2
- mirascope/llm/{providers → clients}/anthropic/_utils/decode.py +22 -66
- mirascope/llm/clients/anthropic/_utils/encode.py +243 -0
- mirascope/llm/clients/anthropic/clients.py +819 -0
- mirascope/llm/clients/anthropic/model_ids.py +8 -0
- mirascope/llm/{providers → clients}/base/__init__.py +5 -4
- mirascope/llm/{providers → clients}/base/_utils.py +17 -78
- mirascope/llm/{providers/base/base_provider.py → clients/base/client.py} +145 -468
- mirascope/llm/{models → clients/base}/params.py +37 -16
- mirascope/llm/clients/google/__init__.py +6 -0
- mirascope/llm/{providers/openai/responses → clients/google}/_utils/__init__.py +0 -2
- mirascope/llm/{providers → clients}/google/_utils/decode.py +22 -98
- mirascope/llm/{providers → clients}/google/_utils/encode.py +46 -168
- mirascope/llm/clients/google/clients.py +853 -0
- mirascope/llm/clients/google/model_ids.py +15 -0
- mirascope/llm/clients/openai/__init__.py +25 -0
- mirascope/llm/clients/openai/completions/__init__.py +9 -0
- mirascope/llm/{providers/google → clients/openai/completions}/_utils/__init__.py +0 -4
- mirascope/llm/{providers → clients}/openai/completions/_utils/decode.py +9 -74
- mirascope/llm/{providers → clients}/openai/completions/_utils/encode.py +52 -70
- mirascope/llm/clients/openai/completions/_utils/model_features.py +81 -0
- mirascope/llm/clients/openai/completions/clients.py +833 -0
- mirascope/llm/clients/openai/completions/model_ids.py +8 -0
- mirascope/llm/clients/openai/responses/__init__.py +9 -0
- mirascope/llm/clients/openai/responses/_utils/__init__.py +13 -0
- mirascope/llm/{providers → clients}/openai/responses/_utils/decode.py +14 -80
- mirascope/llm/{providers → clients}/openai/responses/_utils/encode.py +41 -92
- mirascope/llm/clients/openai/responses/_utils/model_features.py +87 -0
- mirascope/llm/clients/openai/responses/clients.py +832 -0
- mirascope/llm/clients/openai/responses/model_ids.py +8 -0
- mirascope/llm/clients/openai/shared/__init__.py +7 -0
- mirascope/llm/clients/openai/shared/_utils.py +55 -0
- mirascope/llm/clients/providers.py +175 -0
- mirascope/llm/content/__init__.py +2 -3
- mirascope/llm/content/tool_call.py +0 -6
- mirascope/llm/content/tool_output.py +5 -22
- mirascope/llm/context/_utils.py +6 -19
- mirascope/llm/exceptions.py +43 -298
- mirascope/llm/formatting/__init__.py +2 -19
- mirascope/llm/formatting/_utils.py +74 -0
- mirascope/llm/formatting/format.py +30 -219
- mirascope/llm/formatting/from_call_args.py +2 -2
- mirascope/llm/formatting/partial.py +7 -80
- mirascope/llm/formatting/types.py +64 -21
- mirascope/llm/mcp/__init__.py +2 -2
- mirascope/llm/mcp/client.py +118 -0
- mirascope/llm/messages/__init__.py +0 -3
- mirascope/llm/messages/message.py +5 -13
- mirascope/llm/models/__init__.py +2 -7
- mirascope/llm/models/models.py +139 -315
- mirascope/llm/prompts/__init__.py +12 -13
- mirascope/llm/prompts/_utils.py +43 -14
- mirascope/llm/prompts/decorator.py +204 -144
- mirascope/llm/prompts/protocols.py +59 -25
- mirascope/llm/responses/__init__.py +1 -9
- mirascope/llm/responses/_utils.py +12 -102
- mirascope/llm/responses/base_response.py +6 -18
- mirascope/llm/responses/base_stream_response.py +50 -173
- mirascope/llm/responses/finish_reason.py +0 -1
- mirascope/llm/responses/response.py +13 -34
- mirascope/llm/responses/root_response.py +29 -100
- mirascope/llm/responses/stream_response.py +31 -40
- mirascope/llm/tools/__init__.py +2 -9
- mirascope/llm/tools/_utils.py +3 -12
- mirascope/llm/tools/decorator.py +16 -25
- mirascope/llm/tools/protocols.py +4 -4
- mirascope/llm/tools/tool_schema.py +19 -87
- mirascope/llm/tools/toolkit.py +27 -35
- mirascope/llm/tools/tools.py +41 -135
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/METADATA +9 -95
- mirascope-2.0.0a0.dist-info/RECORD +101 -0
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/WHEEL +1 -1
- {mirascope-2.0.0.dist-info → mirascope-2.0.0a0.dist-info}/licenses/LICENSE +1 -1
- mirascope/_stubs.py +0 -363
- mirascope/api/__init__.py +0 -14
- mirascope/api/_generated/README.md +0 -207
- mirascope/api/_generated/__init__.py +0 -440
- mirascope/api/_generated/annotations/__init__.py +0 -33
- mirascope/api/_generated/annotations/client.py +0 -506
- mirascope/api/_generated/annotations/raw_client.py +0 -1414
- mirascope/api/_generated/annotations/types/__init__.py +0 -31
- mirascope/api/_generated/annotations/types/annotations_create_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_create_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_create_response_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_get_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_get_response_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_list_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_list_response.py +0 -21
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +0 -50
- mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_update_request_label.py +0 -5
- mirascope/api/_generated/annotations/types/annotations_update_response.py +0 -48
- mirascope/api/_generated/annotations/types/annotations_update_response_label.py +0 -5
- mirascope/api/_generated/api_keys/__init__.py +0 -17
- mirascope/api/_generated/api_keys/client.py +0 -530
- mirascope/api/_generated/api_keys/raw_client.py +0 -1236
- mirascope/api/_generated/api_keys/types/__init__.py +0 -15
- mirascope/api/_generated/api_keys/types/api_keys_create_response.py +0 -28
- mirascope/api/_generated/api_keys/types/api_keys_get_response.py +0 -27
- mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +0 -40
- mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +0 -27
- mirascope/api/_generated/client.py +0 -211
- mirascope/api/_generated/core/__init__.py +0 -52
- mirascope/api/_generated/core/api_error.py +0 -23
- mirascope/api/_generated/core/client_wrapper.py +0 -46
- mirascope/api/_generated/core/datetime_utils.py +0 -28
- mirascope/api/_generated/core/file.py +0 -67
- mirascope/api/_generated/core/force_multipart.py +0 -16
- mirascope/api/_generated/core/http_client.py +0 -543
- mirascope/api/_generated/core/http_response.py +0 -55
- mirascope/api/_generated/core/jsonable_encoder.py +0 -100
- mirascope/api/_generated/core/pydantic_utilities.py +0 -255
- mirascope/api/_generated/core/query_encoder.py +0 -58
- mirascope/api/_generated/core/remove_none_from_dict.py +0 -11
- mirascope/api/_generated/core/request_options.py +0 -35
- mirascope/api/_generated/core/serialization.py +0 -276
- mirascope/api/_generated/docs/__init__.py +0 -4
- mirascope/api/_generated/docs/client.py +0 -91
- mirascope/api/_generated/docs/raw_client.py +0 -178
- mirascope/api/_generated/environment.py +0 -9
- mirascope/api/_generated/environments/__init__.py +0 -23
- mirascope/api/_generated/environments/client.py +0 -649
- mirascope/api/_generated/environments/raw_client.py +0 -1567
- mirascope/api/_generated/environments/types/__init__.py +0 -25
- mirascope/api/_generated/environments/types/environments_create_response.py +0 -24
- mirascope/api/_generated/environments/types/environments_get_analytics_response.py +0 -60
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +0 -24
- mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +0 -22
- mirascope/api/_generated/environments/types/environments_get_response.py +0 -24
- mirascope/api/_generated/environments/types/environments_list_response_item.py +0 -24
- mirascope/api/_generated/environments/types/environments_update_response.py +0 -24
- mirascope/api/_generated/errors/__init__.py +0 -25
- mirascope/api/_generated/errors/bad_request_error.py +0 -14
- mirascope/api/_generated/errors/conflict_error.py +0 -14
- mirascope/api/_generated/errors/forbidden_error.py +0 -11
- mirascope/api/_generated/errors/internal_server_error.py +0 -10
- mirascope/api/_generated/errors/not_found_error.py +0 -11
- mirascope/api/_generated/errors/payment_required_error.py +0 -15
- mirascope/api/_generated/errors/service_unavailable_error.py +0 -14
- mirascope/api/_generated/errors/too_many_requests_error.py +0 -15
- mirascope/api/_generated/errors/unauthorized_error.py +0 -11
- mirascope/api/_generated/functions/__init__.py +0 -39
- mirascope/api/_generated/functions/client.py +0 -647
- mirascope/api/_generated/functions/raw_client.py +0 -1890
- mirascope/api/_generated/functions/types/__init__.py +0 -53
- mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_create_response.py +0 -37
- mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +0 -39
- mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_get_by_env_response.py +0 -53
- mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +0 -22
- mirascope/api/_generated/functions/types/functions_get_response.py +0 -37
- mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +0 -20
- mirascope/api/_generated/functions/types/functions_list_by_env_response.py +0 -25
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +0 -56
- mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +0 -22
- mirascope/api/_generated/functions/types/functions_list_response.py +0 -21
- mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +0 -41
- mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +0 -20
- mirascope/api/_generated/health/__init__.py +0 -7
- mirascope/api/_generated/health/client.py +0 -92
- mirascope/api/_generated/health/raw_client.py +0 -175
- mirascope/api/_generated/health/types/__init__.py +0 -8
- mirascope/api/_generated/health/types/health_check_response.py +0 -22
- mirascope/api/_generated/health/types/health_check_response_status.py +0 -5
- mirascope/api/_generated/organization_invitations/__init__.py +0 -33
- mirascope/api/_generated/organization_invitations/client.py +0 -546
- mirascope/api/_generated/organization_invitations/raw_client.py +0 -1519
- mirascope/api/_generated/organization_invitations/types/__init__.py +0 -53
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +0 -34
- mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +0 -48
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +0 -7
- mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +0 -7
- mirascope/api/_generated/organization_memberships/__init__.py +0 -19
- mirascope/api/_generated/organization_memberships/client.py +0 -302
- mirascope/api/_generated/organization_memberships/raw_client.py +0 -736
- mirascope/api/_generated/organization_memberships/types/__init__.py +0 -27
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +0 -33
- mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +0 -7
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +0 -7
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +0 -31
- mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +0 -7
- mirascope/api/_generated/organizations/__init__.py +0 -51
- mirascope/api/_generated/organizations/client.py +0 -869
- mirascope/api/_generated/organizations/raw_client.py +0 -2593
- mirascope/api/_generated/organizations/types/__init__.py +0 -71
- mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +0 -24
- mirascope/api/_generated/organizations/types/organizations_create_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_create_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_get_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_get_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_list_response_item.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +0 -47
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +0 -33
- mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +0 -24
- mirascope/api/_generated/organizations/types/organizations_subscription_response.py +0 -53
- mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +0 -34
- mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_update_response.py +0 -26
- mirascope/api/_generated/organizations/types/organizations_update_response_role.py +0 -5
- mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +0 -7
- mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +0 -35
- mirascope/api/_generated/project_memberships/__init__.py +0 -25
- mirascope/api/_generated/project_memberships/client.py +0 -437
- mirascope/api/_generated/project_memberships/raw_client.py +0 -1039
- mirascope/api/_generated/project_memberships/types/__init__.py +0 -29
- mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +0 -35
- mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +0 -33
- mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +0 -7
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +0 -35
- mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +0 -7
- mirascope/api/_generated/projects/__init__.py +0 -7
- mirascope/api/_generated/projects/client.py +0 -428
- mirascope/api/_generated/projects/raw_client.py +0 -1302
- mirascope/api/_generated/projects/types/__init__.py +0 -10
- mirascope/api/_generated/projects/types/projects_create_response.py +0 -25
- mirascope/api/_generated/projects/types/projects_get_response.py +0 -25
- mirascope/api/_generated/projects/types/projects_list_response_item.py +0 -25
- mirascope/api/_generated/projects/types/projects_update_response.py +0 -25
- mirascope/api/_generated/reference.md +0 -4915
- mirascope/api/_generated/tags/__init__.py +0 -19
- mirascope/api/_generated/tags/client.py +0 -504
- mirascope/api/_generated/tags/raw_client.py +0 -1288
- mirascope/api/_generated/tags/types/__init__.py +0 -17
- mirascope/api/_generated/tags/types/tags_create_response.py +0 -41
- mirascope/api/_generated/tags/types/tags_get_response.py +0 -41
- mirascope/api/_generated/tags/types/tags_list_response.py +0 -23
- mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +0 -41
- mirascope/api/_generated/tags/types/tags_update_response.py +0 -41
- mirascope/api/_generated/token_cost/__init__.py +0 -7
- mirascope/api/_generated/token_cost/client.py +0 -160
- mirascope/api/_generated/token_cost/raw_client.py +0 -264
- mirascope/api/_generated/token_cost/types/__init__.py +0 -8
- mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +0 -54
- mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +0 -52
- mirascope/api/_generated/traces/__init__.py +0 -97
- mirascope/api/_generated/traces/client.py +0 -1103
- mirascope/api/_generated/traces/raw_client.py +0 -2322
- mirascope/api/_generated/traces/types/__init__.py +0 -155
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +0 -29
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +0 -27
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +0 -20
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +0 -29
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +0 -31
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +0 -48
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +0 -23
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +0 -38
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +0 -19
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +0 -24
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +0 -20
- mirascope/api/_generated/traces/types/traces_create_response.py +0 -24
- mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +0 -22
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +0 -60
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +0 -24
- mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +0 -22
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +0 -33
- mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +0 -88
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +0 -33
- mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +0 -88
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +0 -25
- mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +0 -44
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_by_env_response.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +0 -50
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +0 -7
- mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +0 -5
- mirascope/api/_generated/traces/types/traces_search_response.py +0 -26
- mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +0 -50
- mirascope/api/_generated/types/__init__.py +0 -85
- mirascope/api/_generated/types/already_exists_error.py +0 -22
- mirascope/api/_generated/types/already_exists_error_tag.py +0 -5
- mirascope/api/_generated/types/bad_request_error_body.py +0 -50
- mirascope/api/_generated/types/click_house_error.py +0 -22
- mirascope/api/_generated/types/database_error.py +0 -22
- mirascope/api/_generated/types/database_error_tag.py +0 -5
- mirascope/api/_generated/types/date.py +0 -3
- mirascope/api/_generated/types/http_api_decode_error.py +0 -27
- mirascope/api/_generated/types/http_api_decode_error_tag.py +0 -5
- mirascope/api/_generated/types/immutable_resource_error.py +0 -22
- mirascope/api/_generated/types/internal_server_error_body.py +0 -49
- mirascope/api/_generated/types/issue.py +0 -38
- mirascope/api/_generated/types/issue_tag.py +0 -10
- mirascope/api/_generated/types/not_found_error_body.py +0 -22
- mirascope/api/_generated/types/not_found_error_tag.py +0 -5
- mirascope/api/_generated/types/number_from_string.py +0 -3
- mirascope/api/_generated/types/permission_denied_error.py +0 -22
- mirascope/api/_generated/types/permission_denied_error_tag.py +0 -5
- mirascope/api/_generated/types/plan_limit_exceeded_error.py +0 -32
- mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +0 -7
- mirascope/api/_generated/types/pricing_unavailable_error.py +0 -23
- mirascope/api/_generated/types/property_key.py +0 -7
- mirascope/api/_generated/types/property_key_key.py +0 -25
- mirascope/api/_generated/types/property_key_key_tag.py +0 -5
- mirascope/api/_generated/types/rate_limit_error.py +0 -31
- mirascope/api/_generated/types/rate_limit_error_tag.py +0 -5
- mirascope/api/_generated/types/service_unavailable_error_body.py +0 -24
- mirascope/api/_generated/types/service_unavailable_error_tag.py +0 -7
- mirascope/api/_generated/types/stripe_error.py +0 -20
- mirascope/api/_generated/types/subscription_past_due_error.py +0 -31
- mirascope/api/_generated/types/subscription_past_due_error_tag.py +0 -7
- mirascope/api/_generated/types/unauthorized_error_body.py +0 -21
- mirascope/api/_generated/types/unauthorized_error_tag.py +0 -5
- mirascope/api/client.py +0 -255
- mirascope/api/settings.py +0 -99
- mirascope/llm/formatting/output_parser.py +0 -178
- mirascope/llm/formatting/primitives.py +0 -192
- mirascope/llm/mcp/mcp_client.py +0 -130
- mirascope/llm/messages/_utils.py +0 -34
- mirascope/llm/models/thinking_config.py +0 -61
- mirascope/llm/prompts/prompts.py +0 -487
- mirascope/llm/providers/__init__.py +0 -62
- mirascope/llm/providers/anthropic/__init__.py +0 -11
- mirascope/llm/providers/anthropic/_utils/__init__.py +0 -27
- mirascope/llm/providers/anthropic/_utils/beta_decode.py +0 -282
- mirascope/llm/providers/anthropic/_utils/beta_encode.py +0 -266
- mirascope/llm/providers/anthropic/_utils/encode.py +0 -418
- mirascope/llm/providers/anthropic/_utils/errors.py +0 -46
- mirascope/llm/providers/anthropic/beta_provider.py +0 -374
- mirascope/llm/providers/anthropic/model_id.py +0 -23
- mirascope/llm/providers/anthropic/model_info.py +0 -87
- mirascope/llm/providers/anthropic/provider.py +0 -479
- mirascope/llm/providers/google/__init__.py +0 -6
- mirascope/llm/providers/google/_utils/errors.py +0 -50
- mirascope/llm/providers/google/model_id.py +0 -22
- mirascope/llm/providers/google/model_info.py +0 -63
- mirascope/llm/providers/google/provider.py +0 -492
- mirascope/llm/providers/mirascope/__init__.py +0 -5
- mirascope/llm/providers/mirascope/_utils.py +0 -73
- mirascope/llm/providers/mirascope/provider.py +0 -349
- mirascope/llm/providers/mlx/__init__.py +0 -9
- mirascope/llm/providers/mlx/_utils.py +0 -141
- mirascope/llm/providers/mlx/encoding/__init__.py +0 -8
- mirascope/llm/providers/mlx/encoding/base.py +0 -72
- mirascope/llm/providers/mlx/encoding/transformers.py +0 -150
- mirascope/llm/providers/mlx/mlx.py +0 -254
- mirascope/llm/providers/mlx/model_id.py +0 -17
- mirascope/llm/providers/mlx/provider.py +0 -452
- mirascope/llm/providers/model_id.py +0 -16
- mirascope/llm/providers/ollama/__init__.py +0 -7
- mirascope/llm/providers/ollama/provider.py +0 -71
- mirascope/llm/providers/openai/__init__.py +0 -15
- mirascope/llm/providers/openai/_utils/__init__.py +0 -5
- mirascope/llm/providers/openai/_utils/errors.py +0 -46
- mirascope/llm/providers/openai/completions/__init__.py +0 -7
- mirascope/llm/providers/openai/completions/base_provider.py +0 -542
- mirascope/llm/providers/openai/completions/provider.py +0 -22
- mirascope/llm/providers/openai/model_id.py +0 -31
- mirascope/llm/providers/openai/model_info.py +0 -303
- mirascope/llm/providers/openai/provider.py +0 -441
- mirascope/llm/providers/openai/responses/__init__.py +0 -5
- mirascope/llm/providers/openai/responses/provider.py +0 -513
- mirascope/llm/providers/provider_id.py +0 -24
- mirascope/llm/providers/provider_registry.py +0 -299
- mirascope/llm/providers/together/__init__.py +0 -7
- mirascope/llm/providers/together/provider.py +0 -40
- mirascope/llm/responses/usage.py +0 -95
- mirascope/ops/__init__.py +0 -111
- mirascope/ops/_internal/__init__.py +0 -5
- mirascope/ops/_internal/closure.py +0 -1169
- mirascope/ops/_internal/configuration.py +0 -177
- mirascope/ops/_internal/context.py +0 -76
- mirascope/ops/_internal/exporters/__init__.py +0 -26
- mirascope/ops/_internal/exporters/exporters.py +0 -395
- mirascope/ops/_internal/exporters/processors.py +0 -104
- mirascope/ops/_internal/exporters/types.py +0 -165
- mirascope/ops/_internal/exporters/utils.py +0 -29
- mirascope/ops/_internal/instrumentation/__init__.py +0 -8
- mirascope/ops/_internal/instrumentation/llm/__init__.py +0 -8
- mirascope/ops/_internal/instrumentation/llm/common.py +0 -530
- mirascope/ops/_internal/instrumentation/llm/cost.py +0 -190
- mirascope/ops/_internal/instrumentation/llm/encode.py +0 -238
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/__init__.py +0 -38
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_input_messages.py +0 -31
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_output_messages.py +0 -38
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/gen_ai_system_instructions.py +0 -18
- mirascope/ops/_internal/instrumentation/llm/gen_ai_types/shared.py +0 -100
- mirascope/ops/_internal/instrumentation/llm/llm.py +0 -161
- mirascope/ops/_internal/instrumentation/llm/model.py +0 -1798
- mirascope/ops/_internal/instrumentation/llm/response.py +0 -521
- mirascope/ops/_internal/instrumentation/llm/serialize.py +0 -300
- mirascope/ops/_internal/propagation.py +0 -198
- mirascope/ops/_internal/protocols.py +0 -133
- mirascope/ops/_internal/session.py +0 -139
- mirascope/ops/_internal/spans.py +0 -232
- mirascope/ops/_internal/traced_calls.py +0 -375
- mirascope/ops/_internal/traced_functions.py +0 -523
- mirascope/ops/_internal/tracing.py +0 -353
- mirascope/ops/_internal/types.py +0 -13
- mirascope/ops/_internal/utils.py +0 -123
- mirascope/ops/_internal/versioned_calls.py +0 -512
- mirascope/ops/_internal/versioned_functions.py +0 -357
- mirascope/ops/_internal/versioning.py +0 -303
- mirascope/ops/exceptions.py +0 -21
- mirascope-2.0.0.dist-info/RECORD +0 -423
- /mirascope/llm/{providers → clients}/base/kwargs.py +0 -0
- /mirascope/llm/{providers → clients}/google/message.py +0 -0
mirascope/llm/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""The `llm` module for writing provider-agnostic LLM Generations.
|
|
2
2
|
|
|
3
3
|
This module provides a unified interface for interacting with different LLM providers,
|
|
4
4
|
including messages, tools, response formatting, and streaming. It allows you to write
|
|
@@ -8,25 +8,22 @@ code that works with multiple LLM providers without changing your application lo
|
|
|
8
8
|
# TODO: Across the API, audit docstrings to ensure they are compliant Google-style docstrings
|
|
9
9
|
# (Write some tooling to ensure this happens consistently + in CI)
|
|
10
10
|
|
|
11
|
-
from contextlib import suppress
|
|
12
|
-
|
|
13
11
|
from . import (
|
|
14
12
|
calls,
|
|
13
|
+
clients,
|
|
15
14
|
content,
|
|
16
15
|
exceptions,
|
|
17
16
|
formatting,
|
|
17
|
+
mcp,
|
|
18
18
|
messages,
|
|
19
19
|
models,
|
|
20
20
|
prompts,
|
|
21
|
-
providers,
|
|
22
21
|
responses,
|
|
23
22
|
tools,
|
|
24
23
|
types,
|
|
25
24
|
)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
from . import mcp
|
|
29
|
-
from .calls import AsyncCall, AsyncContextCall, Call, CallDecorator, ContextCall, call
|
|
25
|
+
from .calls import call
|
|
26
|
+
from .clients import ModelId, Params, Provider, client, get_client
|
|
30
27
|
from .content import (
|
|
31
28
|
AssistantContentChunk,
|
|
32
29
|
AssistantContentPart,
|
|
@@ -51,37 +48,23 @@ from .content import (
|
|
|
51
48
|
URLImageSource,
|
|
52
49
|
UserContentPart,
|
|
53
50
|
)
|
|
54
|
-
from .context import Context
|
|
51
|
+
from .context import Context
|
|
55
52
|
from .exceptions import (
|
|
56
53
|
APIError,
|
|
57
54
|
AuthenticationError,
|
|
58
55
|
BadRequestError,
|
|
59
56
|
ConnectionError,
|
|
60
|
-
Error,
|
|
61
57
|
FeatureNotSupportedError,
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
FormattingModeNotSupportedError,
|
|
59
|
+
MirascopeError,
|
|
64
60
|
NotFoundError,
|
|
65
|
-
ParseError,
|
|
66
61
|
PermissionError,
|
|
67
|
-
ProviderError,
|
|
68
62
|
RateLimitError,
|
|
69
|
-
ResponseValidationError,
|
|
70
63
|
ServerError,
|
|
71
64
|
TimeoutError,
|
|
72
|
-
ToolError,
|
|
73
|
-
ToolExecutionError,
|
|
74
65
|
ToolNotFoundError,
|
|
75
66
|
)
|
|
76
|
-
from .formatting import
|
|
77
|
-
Format,
|
|
78
|
-
FormattableT,
|
|
79
|
-
FormattingMode,
|
|
80
|
-
OutputParser,
|
|
81
|
-
Partial,
|
|
82
|
-
format,
|
|
83
|
-
output_parser,
|
|
84
|
-
)
|
|
67
|
+
from .formatting import Format, FormattingMode, Partial, format
|
|
85
68
|
from .messages import (
|
|
86
69
|
AssistantContent,
|
|
87
70
|
AssistantMessage,
|
|
@@ -91,32 +74,9 @@ from .messages import (
|
|
|
91
74
|
UserContent,
|
|
92
75
|
UserMessage,
|
|
93
76
|
)
|
|
94
|
-
from .models import
|
|
95
|
-
|
|
96
|
-
Params,
|
|
97
|
-
ThinkingConfig,
|
|
98
|
-
ThinkingLevel,
|
|
99
|
-
model,
|
|
100
|
-
model_from_context,
|
|
101
|
-
use_model,
|
|
102
|
-
)
|
|
103
|
-
from .prompts import (
|
|
104
|
-
AsyncContextPrompt,
|
|
105
|
-
AsyncPrompt,
|
|
106
|
-
ContextPrompt,
|
|
107
|
-
Prompt,
|
|
108
|
-
PromptDecorator,
|
|
109
|
-
prompt,
|
|
110
|
-
)
|
|
111
|
-
from .providers import (
|
|
112
|
-
ModelId,
|
|
113
|
-
Provider,
|
|
114
|
-
ProviderId,
|
|
115
|
-
register_provider,
|
|
116
|
-
reset_provider_registry,
|
|
117
|
-
)
|
|
77
|
+
from .models import Model, model, use_model
|
|
78
|
+
from .prompts import prompt
|
|
118
79
|
from .responses import (
|
|
119
|
-
AnyResponse,
|
|
120
80
|
AsyncChunkIterator,
|
|
121
81
|
AsyncContextResponse,
|
|
122
82
|
AsyncContextStreamResponse,
|
|
@@ -132,52 +92,36 @@ from .responses import (
|
|
|
132
92
|
FinishReason,
|
|
133
93
|
RawMessageChunk,
|
|
134
94
|
Response,
|
|
135
|
-
RootResponse,
|
|
136
95
|
Stream,
|
|
137
96
|
StreamResponse,
|
|
138
97
|
StreamResponseChunk,
|
|
139
98
|
TextStream,
|
|
140
99
|
ThoughtStream,
|
|
141
100
|
ToolCallStream,
|
|
142
|
-
Usage,
|
|
143
|
-
UsageDeltaChunk,
|
|
144
101
|
)
|
|
145
102
|
from .tools import (
|
|
146
|
-
AnyToolFn,
|
|
147
|
-
AnyToolSchema,
|
|
148
103
|
AsyncContextTool,
|
|
149
104
|
AsyncContextToolkit,
|
|
150
105
|
AsyncTool,
|
|
151
106
|
AsyncToolkit,
|
|
152
|
-
BaseToolkit,
|
|
153
107
|
ContextTool,
|
|
154
108
|
ContextToolkit,
|
|
155
109
|
Tool,
|
|
156
110
|
Toolkit,
|
|
157
|
-
ToolkitT,
|
|
158
|
-
ToolSchema,
|
|
159
111
|
tool,
|
|
160
112
|
)
|
|
161
|
-
from .types import Jsonable
|
|
162
113
|
|
|
163
114
|
__all__ = [
|
|
164
115
|
"APIError",
|
|
165
|
-
"AnyResponse",
|
|
166
|
-
"AnyToolFn",
|
|
167
|
-
"AnyToolSchema",
|
|
168
116
|
"AssistantContent",
|
|
169
117
|
"AssistantContentChunk",
|
|
170
118
|
"AssistantContentPart",
|
|
171
119
|
"AssistantMessage",
|
|
172
|
-
"AsyncCall",
|
|
173
120
|
"AsyncChunkIterator",
|
|
174
|
-
"AsyncContextCall",
|
|
175
|
-
"AsyncContextPrompt",
|
|
176
121
|
"AsyncContextResponse",
|
|
177
122
|
"AsyncContextStreamResponse",
|
|
178
123
|
"AsyncContextTool",
|
|
179
124
|
"AsyncContextToolkit",
|
|
180
|
-
"AsyncPrompt",
|
|
181
125
|
"AsyncResponse",
|
|
182
126
|
"AsyncStream",
|
|
183
127
|
"AsyncStreamResponse",
|
|
@@ -191,49 +135,30 @@ __all__ = [
|
|
|
191
135
|
"BadRequestError",
|
|
192
136
|
"Base64AudioSource",
|
|
193
137
|
"Base64ImageSource",
|
|
194
|
-
"BaseToolkit",
|
|
195
|
-
"Call",
|
|
196
|
-
"CallDecorator",
|
|
197
138
|
"ChunkIterator",
|
|
198
139
|
"ConnectionError",
|
|
199
140
|
"Context",
|
|
200
|
-
"ContextCall",
|
|
201
|
-
"ContextPrompt",
|
|
202
141
|
"ContextResponse",
|
|
203
142
|
"ContextStreamResponse",
|
|
204
143
|
"ContextTool",
|
|
205
144
|
"ContextToolkit",
|
|
206
|
-
"DepsT",
|
|
207
145
|
"Document",
|
|
208
|
-
"Error",
|
|
209
146
|
"FeatureNotSupportedError",
|
|
210
147
|
"FinishReason",
|
|
211
148
|
"Format",
|
|
212
|
-
"FormattableT",
|
|
213
149
|
"FormattingMode",
|
|
150
|
+
"FormattingModeNotSupportedError",
|
|
214
151
|
"Image",
|
|
215
|
-
"Jsonable",
|
|
216
152
|
"Message",
|
|
217
|
-
"
|
|
153
|
+
"MirascopeError",
|
|
218
154
|
"Model",
|
|
219
|
-
"ModelId",
|
|
220
|
-
"NoRegisteredProviderError",
|
|
221
155
|
"NotFoundError",
|
|
222
|
-
"OutputParser",
|
|
223
156
|
"Params",
|
|
224
|
-
"ParseError",
|
|
225
157
|
"Partial",
|
|
226
158
|
"PermissionError",
|
|
227
|
-
"Prompt",
|
|
228
|
-
"PromptDecorator",
|
|
229
|
-
"Provider",
|
|
230
|
-
"ProviderError",
|
|
231
|
-
"ProviderId",
|
|
232
159
|
"RateLimitError",
|
|
233
160
|
"RawMessageChunk",
|
|
234
161
|
"Response",
|
|
235
|
-
"ResponseValidationError",
|
|
236
|
-
"RootResponse",
|
|
237
162
|
"ServerError",
|
|
238
163
|
"Stream",
|
|
239
164
|
"StreamResponse",
|
|
@@ -245,8 +170,6 @@ __all__ = [
|
|
|
245
170
|
"TextEndChunk",
|
|
246
171
|
"TextStartChunk",
|
|
247
172
|
"TextStream",
|
|
248
|
-
"ThinkingConfig",
|
|
249
|
-
"ThinkingLevel",
|
|
250
173
|
"Thought",
|
|
251
174
|
"ThoughtChunk",
|
|
252
175
|
"ThoughtEndChunk",
|
|
@@ -259,36 +182,28 @@ __all__ = [
|
|
|
259
182
|
"ToolCallEndChunk",
|
|
260
183
|
"ToolCallStartChunk",
|
|
261
184
|
"ToolCallStream",
|
|
262
|
-
"ToolError",
|
|
263
|
-
"ToolExecutionError",
|
|
264
185
|
"ToolNotFoundError",
|
|
265
186
|
"ToolOutput",
|
|
266
|
-
"ToolSchema",
|
|
267
187
|
"Toolkit",
|
|
268
|
-
"ToolkitT",
|
|
269
188
|
"URLImageSource",
|
|
270
|
-
"Usage",
|
|
271
|
-
"UsageDeltaChunk",
|
|
272
189
|
"UserContent",
|
|
273
190
|
"UserContentPart",
|
|
274
191
|
"UserMessage",
|
|
275
192
|
"call",
|
|
276
193
|
"calls",
|
|
194
|
+
"client",
|
|
195
|
+
"clients",
|
|
277
196
|
"content",
|
|
278
197
|
"exceptions",
|
|
279
198
|
"format",
|
|
280
199
|
"formatting",
|
|
200
|
+
"get_client",
|
|
281
201
|
"mcp",
|
|
282
202
|
"messages",
|
|
283
203
|
"model",
|
|
284
|
-
"model_from_context",
|
|
285
204
|
"models",
|
|
286
|
-
"output_parser",
|
|
287
205
|
"prompt",
|
|
288
206
|
"prompts",
|
|
289
|
-
"providers",
|
|
290
|
-
"register_provider",
|
|
291
|
-
"reset_provider_registry",
|
|
292
207
|
"responses",
|
|
293
208
|
"tool",
|
|
294
209
|
"tools",
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""The Agents module for creating and managing LLM agents."""
|
|
2
|
+
|
|
3
|
+
from .agent import Agent, AsyncAgent, BaseAgent
|
|
4
|
+
from .agent_template import AgentTemplate, AsyncAgentTemplate
|
|
5
|
+
from .decorator import AgentDecorator, agent
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"Agent",
|
|
9
|
+
"AgentDecorator",
|
|
10
|
+
"AgentTemplate",
|
|
11
|
+
"AsyncAgent",
|
|
12
|
+
"AsyncAgentTemplate",
|
|
13
|
+
"BaseAgent",
|
|
14
|
+
"agent",
|
|
15
|
+
]
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""The `Agent` class for LLM agents."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from collections.abc import Sequence
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Generic
|
|
7
|
+
|
|
8
|
+
from ..context import Context, DepsT
|
|
9
|
+
from ..formatting import FormattableT
|
|
10
|
+
from ..messages import UserContent
|
|
11
|
+
from ..models import Model
|
|
12
|
+
from ..responses import AsyncResponse, AsyncStreamResponse, Response, StreamResponse
|
|
13
|
+
from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class BaseAgent(Generic[DepsT, FormattableT], ABC):
|
|
18
|
+
"""Agent class for generating responses using LLMs with tools."""
|
|
19
|
+
|
|
20
|
+
ctx: Context[DepsT]
|
|
21
|
+
"""The context for the agent, such as the history of messages."""
|
|
22
|
+
|
|
23
|
+
format: type[FormattableT] | None
|
|
24
|
+
"""The response format for the generated response."""
|
|
25
|
+
|
|
26
|
+
model: Model
|
|
27
|
+
"""The default model the agent will use if not specified through context."""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class Agent(BaseAgent[DepsT, FormattableT]):
|
|
32
|
+
"""Agent class for generating responses using LLMs with tools."""
|
|
33
|
+
|
|
34
|
+
tools: Sequence[Tool | ContextTool[DepsT]] | None
|
|
35
|
+
"""The tools available to the agent, if any."""
|
|
36
|
+
|
|
37
|
+
def __call__(
|
|
38
|
+
self,
|
|
39
|
+
content: UserContent,
|
|
40
|
+
*,
|
|
41
|
+
ctx: Context[DepsT] | None = None,
|
|
42
|
+
) -> Response[FormattableT]:
|
|
43
|
+
"""Generates a response by running the agent loop."""
|
|
44
|
+
raise NotImplementedError()
|
|
45
|
+
|
|
46
|
+
def call(
|
|
47
|
+
self,
|
|
48
|
+
content: UserContent,
|
|
49
|
+
*,
|
|
50
|
+
ctx: Context[DepsT] | None = None,
|
|
51
|
+
) -> Response[FormattableT]:
|
|
52
|
+
"""Generates a response by running the agent loop."""
|
|
53
|
+
raise NotImplementedError()
|
|
54
|
+
|
|
55
|
+
def stream(
|
|
56
|
+
self,
|
|
57
|
+
content: UserContent,
|
|
58
|
+
*,
|
|
59
|
+
ctx: Context[DepsT] | None = None,
|
|
60
|
+
) -> StreamResponse[FormattableT]:
|
|
61
|
+
"""Streams the response generated by running the agent loop."""
|
|
62
|
+
raise NotImplementedError()
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@dataclass
|
|
66
|
+
class AsyncAgent(BaseAgent[DepsT, FormattableT]):
|
|
67
|
+
"""Asynchronous agent class for generating responses using LLMs with tools."""
|
|
68
|
+
|
|
69
|
+
tools: Sequence[AsyncTool | AsyncContextTool[DepsT]] | None
|
|
70
|
+
"""The tools available to the agent, if any."""
|
|
71
|
+
|
|
72
|
+
async def __call__(
|
|
73
|
+
self,
|
|
74
|
+
content: UserContent,
|
|
75
|
+
*,
|
|
76
|
+
ctx: Context[DepsT] | None = None,
|
|
77
|
+
) -> AsyncResponse[FormattableT]:
|
|
78
|
+
"""Generates a response by running the agent loop asynchronously."""
|
|
79
|
+
raise NotImplementedError()
|
|
80
|
+
|
|
81
|
+
async def call(
|
|
82
|
+
self,
|
|
83
|
+
content: UserContent,
|
|
84
|
+
*,
|
|
85
|
+
ctx: Context[DepsT] | None = None,
|
|
86
|
+
) -> AsyncResponse[FormattableT]:
|
|
87
|
+
"""Generates a response by running the agent loop asynchronously."""
|
|
88
|
+
raise NotImplementedError()
|
|
89
|
+
|
|
90
|
+
async def stream(
|
|
91
|
+
self,
|
|
92
|
+
content: UserContent,
|
|
93
|
+
*,
|
|
94
|
+
ctx: Context[DepsT] | None = None,
|
|
95
|
+
) -> AsyncStreamResponse[FormattableT]:
|
|
96
|
+
"""Streams the response generated by running the agent loop asynchronously."""
|
|
97
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from typing import Generic, overload
|
|
2
|
+
|
|
3
|
+
from ..context import DepsT
|
|
4
|
+
from ..formatting import FormattableT
|
|
5
|
+
from .agent import Agent, AsyncAgent
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AgentTemplate(Generic[DepsT, FormattableT]):
|
|
9
|
+
@overload
|
|
10
|
+
def __call__(
|
|
11
|
+
self: "AgentTemplate[None, FormattableT]",
|
|
12
|
+
) -> Agent[None, FormattableT]:
|
|
13
|
+
"""Create an Agent with no deps"""
|
|
14
|
+
|
|
15
|
+
@overload
|
|
16
|
+
def __call__(
|
|
17
|
+
self: "AgentTemplate[DepsT, FormattableT]", deps: DepsT
|
|
18
|
+
) -> Agent[DepsT, FormattableT]:
|
|
19
|
+
"""Create an Agent with deps"""
|
|
20
|
+
|
|
21
|
+
def __call__(
|
|
22
|
+
self: "AgentTemplate[None, FormattableT] | AgentTemplate[DepsT, FormattableT]",
|
|
23
|
+
deps: DepsT | None = None,
|
|
24
|
+
) -> Agent[None, FormattableT] | Agent[DepsT, FormattableT]:
|
|
25
|
+
raise NotImplementedError()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AsyncAgentTemplate(Generic[DepsT, FormattableT]):
|
|
29
|
+
@overload
|
|
30
|
+
async def __call__(
|
|
31
|
+
self: "AsyncAgentTemplate[None, FormattableT]",
|
|
32
|
+
) -> AsyncAgent[None, FormattableT]:
|
|
33
|
+
"""Create an AsyncAgent with no deps"""
|
|
34
|
+
|
|
35
|
+
@overload
|
|
36
|
+
async def __call__(
|
|
37
|
+
self: "AsyncAgentTemplate[DepsT, FormattableT]", deps: DepsT
|
|
38
|
+
) -> AsyncAgent[DepsT, FormattableT]:
|
|
39
|
+
"""Create an AsyncAgent with deps"""
|
|
40
|
+
|
|
41
|
+
async def __call__(
|
|
42
|
+
self: "AsyncAgentTemplate[None, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]",
|
|
43
|
+
deps: DepsT | None = None,
|
|
44
|
+
) -> AsyncAgent[None, FormattableT] | AsyncAgent[DepsT, FormattableT]:
|
|
45
|
+
raise NotImplementedError()
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"""The `llm.agent` decorator for turning a function into an agent."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Literal, Protocol, overload
|
|
6
|
+
from typing_extensions import TypeVar, Unpack
|
|
7
|
+
|
|
8
|
+
from ..tools import AsyncContextTool, AsyncTool, ContextTool, Tool
|
|
9
|
+
from .agent_template import AgentTemplate, AsyncAgentTemplate
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from ..clients import (
|
|
13
|
+
AnthropicClient,
|
|
14
|
+
AnthropicModelId,
|
|
15
|
+
BaseClient,
|
|
16
|
+
GoogleClient,
|
|
17
|
+
GoogleModelId,
|
|
18
|
+
ModelId,
|
|
19
|
+
OpenAICompletionsClient,
|
|
20
|
+
OpenAICompletionsModelId,
|
|
21
|
+
Params,
|
|
22
|
+
Provider,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from ..context import Context, DepsT
|
|
26
|
+
from ..formatting import FormattableT
|
|
27
|
+
from ..types import P
|
|
28
|
+
|
|
29
|
+
AgentToolT = TypeVar(
|
|
30
|
+
"AgentToolT",
|
|
31
|
+
bound="Tool | AsyncTool | ContextTool[Any] | AsyncContextTool[Any] | None",
|
|
32
|
+
covariant=True,
|
|
33
|
+
default=None,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SystemPrompt(Protocol[P]):
|
|
38
|
+
"""Protocol for a prompt template function that returns a system prompt as a string (no context)."""
|
|
39
|
+
|
|
40
|
+
def __call__(self) -> str: ...
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ContextSystemPrompt(Protocol[P, DepsT]):
|
|
44
|
+
"""Protocol for a prompt template function that returns a system prompt as a string (with context)."""
|
|
45
|
+
|
|
46
|
+
def __call__(self, ctx: Context[DepsT]) -> str: ...
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class AsyncSystemPrompt(Protocol[P]):
|
|
50
|
+
"""Protocol for an async prompt template function that returns a system prompt as a string (no context)."""
|
|
51
|
+
|
|
52
|
+
async def __call__(self) -> str: ...
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class AsyncContextSystemPrompt(Protocol[P, DepsT]):
|
|
56
|
+
"""Protocol for an async prompt template function that returns a system prompt as a string (with context)."""
|
|
57
|
+
|
|
58
|
+
async def __call__(self, ctx: Context[DepsT]) -> str: ...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class AgentDecorator(Protocol[P, AgentToolT, FormattableT]):
|
|
62
|
+
"""Protocol for the `agent` decorator."""
|
|
63
|
+
|
|
64
|
+
@overload
|
|
65
|
+
def __call__(
|
|
66
|
+
self: AgentDecorator[
|
|
67
|
+
P,
|
|
68
|
+
None | Tool | ContextTool[DepsT],
|
|
69
|
+
FormattableT,
|
|
70
|
+
],
|
|
71
|
+
fn: SystemPrompt[P] | ContextSystemPrompt[P, DepsT],
|
|
72
|
+
) -> AgentTemplate[DepsT, FormattableT]:
|
|
73
|
+
"""Decorator for creating a sync agent."""
|
|
74
|
+
...
|
|
75
|
+
|
|
76
|
+
@overload
|
|
77
|
+
def __call__(
|
|
78
|
+
self: AgentDecorator[
|
|
79
|
+
P,
|
|
80
|
+
None | AsyncTool | AsyncContextTool[DepsT],
|
|
81
|
+
FormattableT,
|
|
82
|
+
],
|
|
83
|
+
fn: AsyncSystemPrompt[P] | AsyncContextSystemPrompt[P, DepsT],
|
|
84
|
+
) -> AsyncAgentTemplate[DepsT, FormattableT]:
|
|
85
|
+
"""Decorator for creating an async agent."""
|
|
86
|
+
...
|
|
87
|
+
|
|
88
|
+
def __call__(
|
|
89
|
+
self,
|
|
90
|
+
fn: SystemPrompt[P]
|
|
91
|
+
| ContextSystemPrompt[P, DepsT]
|
|
92
|
+
| AsyncSystemPrompt[P]
|
|
93
|
+
| AsyncContextSystemPrompt[P, DepsT],
|
|
94
|
+
) -> AgentTemplate[DepsT, FormattableT] | AsyncAgentTemplate[DepsT, FormattableT]:
|
|
95
|
+
"""Decorator for creating an agent."""
|
|
96
|
+
raise NotImplementedError()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@overload
|
|
100
|
+
def agent(
|
|
101
|
+
*,
|
|
102
|
+
provider: Literal["anthropic"],
|
|
103
|
+
model_id: AnthropicModelId,
|
|
104
|
+
tools: list[AgentToolT] | None = None,
|
|
105
|
+
format: type[FormattableT] | None = None,
|
|
106
|
+
client: AnthropicClient | None = None,
|
|
107
|
+
**params: Unpack[Params],
|
|
108
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
109
|
+
"""Decorator for creating an Anthropic agent."""
|
|
110
|
+
...
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@overload
|
|
114
|
+
def agent(
|
|
115
|
+
*,
|
|
116
|
+
provider: Literal["google"],
|
|
117
|
+
model_id: GoogleModelId,
|
|
118
|
+
tools: list[AgentToolT] | None = None,
|
|
119
|
+
format: type[FormattableT] | None = None,
|
|
120
|
+
client: GoogleClient | None = None,
|
|
121
|
+
**params: Unpack[Params],
|
|
122
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
123
|
+
"""Decorator for creating a Google agent."""
|
|
124
|
+
...
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@overload
|
|
128
|
+
def agent(
|
|
129
|
+
*,
|
|
130
|
+
provider: Literal["openai:completions"],
|
|
131
|
+
model_id: OpenAICompletionsModelId,
|
|
132
|
+
tools: list[AgentToolT] | None = None,
|
|
133
|
+
format: type[FormattableT] | None = None,
|
|
134
|
+
client: OpenAICompletionsClient | None = None,
|
|
135
|
+
**params: Unpack[Params],
|
|
136
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
137
|
+
"""Decorator for creating an OpenAI agent."""
|
|
138
|
+
...
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@overload
|
|
142
|
+
def agent(
|
|
143
|
+
*,
|
|
144
|
+
provider: Provider,
|
|
145
|
+
model_id: ModelId,
|
|
146
|
+
tools: list[AgentToolT] | None = None,
|
|
147
|
+
format: type[FormattableT] | None = None,
|
|
148
|
+
client: None = None,
|
|
149
|
+
**params: Unpack[Params],
|
|
150
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
151
|
+
"""Decorator for creating an agent using any registered model."""
|
|
152
|
+
...
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def agent(
|
|
156
|
+
*,
|
|
157
|
+
provider: Provider,
|
|
158
|
+
model_id: ModelId,
|
|
159
|
+
tools: list[AgentToolT] | None = None,
|
|
160
|
+
format: type[FormattableT] | None = None,
|
|
161
|
+
client: BaseClient | None = None,
|
|
162
|
+
**params: Unpack[Params],
|
|
163
|
+
) -> AgentDecorator[..., AgentToolT, FormattableT]:
|
|
164
|
+
"""Decorator for creating an agent or structured agent.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
model_id: The model to use for the agent.
|
|
168
|
+
tools: The tools available to the agent.
|
|
169
|
+
format: The response format type for the agent.
|
|
170
|
+
client: The client to use for the agent.
|
|
171
|
+
**params: Additional parameters for the model.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
An of `AgentDecorator`.
|
|
175
|
+
"""
|
|
176
|
+
raise NotImplementedError()
|
mirascope/llm/calls/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""The `llm.calls` module."""
|
|
2
2
|
|
|
3
|
-
from .calls import AsyncCall, AsyncContextCall, Call,
|
|
3
|
+
from .calls import AsyncCall, AsyncContextCall, Call, ContextCall
|
|
4
4
|
from .decorator import (
|
|
5
5
|
CallDecorator,
|
|
6
6
|
call,
|
|
@@ -11,7 +11,6 @@ __all__ = [
|
|
|
11
11
|
"AsyncContextCall",
|
|
12
12
|
"Call",
|
|
13
13
|
"CallDecorator",
|
|
14
|
-
"CallT",
|
|
15
14
|
"ContextCall",
|
|
16
15
|
"call",
|
|
17
16
|
]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""The `BaseCall` class for LLM calls."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Generic
|
|
6
|
+
|
|
7
|
+
from ..formatting import Format, FormattableT
|
|
8
|
+
from ..models import Model, get_model_from_context
|
|
9
|
+
from ..prompts import PromptT
|
|
10
|
+
from ..tools import ToolkitT
|
|
11
|
+
from ..types import P
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class BaseCall(Generic[P, PromptT, ToolkitT, FormattableT], ABC):
|
|
16
|
+
"""A base class for generating responses using LLMs."""
|
|
17
|
+
|
|
18
|
+
default_model: Model
|
|
19
|
+
"""The default model that will be used if no model is set in context."""
|
|
20
|
+
|
|
21
|
+
toolkit: ToolkitT
|
|
22
|
+
"""The toolkit containing this call's tools."""
|
|
23
|
+
|
|
24
|
+
format: type[FormattableT] | Format[FormattableT] | None
|
|
25
|
+
"""The response format for the generated response."""
|
|
26
|
+
|
|
27
|
+
fn: PromptT
|
|
28
|
+
"""The Prompt function that generates the Prompt."""
|
|
29
|
+
|
|
30
|
+
@property
|
|
31
|
+
def model(self) -> Model:
|
|
32
|
+
"""The model used for generating responses. May be overwritten via `with llm.model(...)."""
|
|
33
|
+
return get_model_from_context() or self.default_model
|