Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Define the top-level public API and deprecate redundant exports

未關閉
#956 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

維護者通常 1 天內回覆

還沒有人認領這個 Issue。

評估

難度
5/5
預估耗時
一週以上
新手友好度
35/100
Issue 類型
重構
描述清晰度
描述清楚
活躍度
活躍
技術堆疊
python

研究方向

Start with py/src/braintrust/__init__.py and the existing public export coverage in type_tests/test_public_exports.py; read the export definitions in workflow_eval.py and supporting modules named in the issue. Inventory retained exports, deprecated aliases with exact replacements, and implementation spillover, then establish canonical imports and compatibility warnings. Done means the explicit root API and __all__, migration guidance, runtime and type coverage, updated imports, and optional-provider behavior meet the acceptance criteria.

由索引模型根據 Issue 內容生成。

描述

python

Problem

The top-level braintrust namespace mixes primary SDK entry points, supporting types, specialized features, and implementation details. py/src/braintrust/__init__.py uses wildcard imports and has no package-level __all__. A fresh import in the inspected checkout exposed 490 non-underscore names, including imported libraries and submodules; that count describes the observed namespace, not an intentional public contract.

Examples of spillover include DiskCache, LogQueue, ProjectIdCache, global_, construct_logs3_data, os, json, Any, cast, tee, and SSEClient.

Import order also determines the meaning of several names. Project, Dataset, Experiment, and Prompt ultimately resolve to classes from logger.py, replacing earlier exports. In particular, braintrust.Project is a different class from the project returned by braintrust.projects.create().

We should define an explicit top-level API, deprecate selected existing import paths with clear replacements, and stop exposing implementation imports as part of the intended contract.

Proposed top-level API

Keep the entry points for common workflows:

Workflow Top-level exports
Evaluations Eval, EvalAsync
Resource initialization init, init_dataset, init_logger
Authentication login
Tracing traced, start_span, current_span, flush
Instrumentation auto_instrument
Prompts and parameters load_prompt, load_prompt_async, load_parameters
Hosted function invocation invoke, invoke_async
Authoring and publishing projects
Workflow evaluations define_workflow_eval, WorkflowEval, and the existing public workflow task, scorer, submission, batching, store, and result helpers

Workflow evaluations are a first-class top-level API. Keep the existing 25 names declared in workflow_eval.__all__; they are excluded from the proposed root-import deprecations. This includes the WorkflowTask*, WorkflowScorer*, WorkflowBatch*, WorkflowSubmission*, and WorkflowEval* families.

Supporting types can be imported from stable submodules. This is a focused root API, not a rule that prohibits all classes at the top level: the workflow evaluation family is intentionally retained.

A. Deprecations

Deprecate selected top-level aliases/import paths while retaining their underlying functionality:

Candidate Replacement
init_experiment braintrust.init (it is currently an alias)
Provider-specific wrap_* and setup_* helpers braintrust.integrations.<provider>
BraintrustLogHandler braintrust.logs
Span customization APIs braintrust.span_customizer
Dataset pipeline APIs braintrust.dataset_pipeline
Sandbox registration APIs braintrust.sandbox
Evaluation support types braintrust.framework
Scoring objects and types braintrust.score
Stream/chunk classes braintrust.functions.stream
Generated schemas braintrust.generated_types
Resource classes, attachments, summaries, and other supporting types Establish and document stable submodule paths before issuing deprecations

Do not assume braintrust.types already re-exports every supporting type. Choose permanent destinations before asking users to migrate, and avoid multiple successive import migrations. Resolve the Project ambiguity explicitly in migration guidance.

Treat global log and summarize as a separate decision: replacing them with methods on experiment/logger handles changes usage beyond an import-path migration. Audit their use and decide separately whether to deprecate them. Likewise, audit advanced helpers not covered by the table before making removal decisions.

Compatibility rollout:

  1. Establish and document canonical submodule imports.
  2. Update repository examples, documentation, and internal imports to use the intended API.
  3. Preserve deprecated root imports through compatibility aliases, with DeprecationWarning messages naming the exact replacement import. A module __getattr__ compatibility layer is one option; avoid eagerly binding aliases if that prevents access warnings.
  4. Remove deprecated aliases in a future breaking release under an explicit deprecation policy.

B. Export cleanup

  • Replace wildcard imports in braintrust/__init__.py with explicit re-exports.
  • Add an explicit package-level __all__ for the supported root API, including the workflow evaluation family.
  • Preserve static type-checker visibility of intended re-exports, including the explicit as aliasing pattern already covered by type_tests/test_public_exports.py where needed.
  • Stop eagerly re-exporting third-party imports, typing utilities, internal caches/queues, serialization helpers, and mutable implementation state. Audit compatibility before removing names that downstream users may have adopted.
  • Review the three explicitly imported _internal_* hooks separately; they are private compatibility hooks, not part of the public export list.
  • Preserve optional-provider lazy loading and existing supported import-time behavior.

__all__ defines the intended public contract and wildcard-import behavior; it does not hide existing attributes or prevent Python from attaching imported submodules to the package. The goal is an explicit supported API, not a guarantee that dir(braintrust) contains only those names.

Acceptance criteria

  • Check in an explicit inventory of retained exports, deprecated root aliases with exact replacements, and implementation spillover.
  • Add explicit top-level re-exports and __all__, retaining all existing public workflow evaluation exports.
  • Document canonical submodule imports and a deprecation/removal policy.
  • Add runtime coverage for intended exports, deprecated aliases/warnings, and identity/behavior preservation.
  • Extend public-export type tests to cover the retained API and supported replacement imports.
  • Update examples and internal imports; verify optional providers remain optional.
  • Run the relevant core and type-checking sessions from py/noxfile.py.

Relevant files: py/src/braintrust/__init__.py, framework.py, framework2.py, logger.py, generated_types.py, workflow_eval.py, and type_tests/test_public_exports.py.

主要語言
Python
星號
22
分支
27
平均合併
12 小時 51 分鐘
30 天內合併 PR
133

環境準備

  • 提供 Dockerfile 或 Docker Compose 檔案
  • 沒有 Pull Request 範本
  • 閱讀貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

braintrustdata/braintrust-sdk-python 的其他 Issue

查看 braintrustdata/braintrust-sdk-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。