-
[OPIK-4697] Project create permission (#5552)
发布于
2026-03-11 09:52:09 +00:00 -
[OPIK-4697] Add new permission
-
[OPIK-4697] Guard project creation triggers
-
[OPIK-4697] Handle playground
-
[OPIK-4697] Do not allow running in playground if project not exist
-
[OPIK-4697] Do not allow editing projects
-
[OPIK-4197] [E2E] test: validate Python SDK terminal link navigates to project traces page (#5573)
-
add method for logging traces and extracting url from terminal
-
add fixture for creating traces with getting url
-
add test for validating url from terminal
-
[OPIK-4870] [SDK] Fix prompt commit not injected into trace metadata (#5585)
-
[OPIK-4870] [SDK] Fix prompt commit not injected into trace metadata
When a Prompt or PromptVersionDetail field is accessed on an agent config
instance inside an active trace, the metadata injection was recording the
raw Python object instead of the commit hash string.Added python_value_to_metadata_value helper in type_helpers that converts
prompt/prompt_version values to their commit string, leaving all other
types unchanged. Updated _inject_trace_metadata in the decorator to use it.
Added unit test to cover the regression.-
extend tests to all types
-
[OPIK-4801] [SDK] Add migration manifest for resumable opik import (#5528)
-
[SDK] Add migration manifest for resumable opik import
Adds a migration_manifest.json to the import directory so that
interrupted imports can be resumed without creating duplicates.- New MigrationManifest class: atomic JSON state file tracking
completed files, failed files, and src→dest trace ID mappings - Auto-detected on import startup: resumes if in_progress, blocks
re-import if completed (unless --force is given) - Added --force flag to all four import subcommands
- Trace ID map is persisted to disk after each file so experiment
cross-references survive a resume across separate invocations - 20 new unit tests covering lifecycle, file tracking, ID persistence,
atomic writes, and interrupted+resumed migration scenarios
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- [DOCS] Update import/export CLI docs for migration manifest and --force
- Documents the new --force flag on all opik import subcommands
- Explains the migration_manifest.json and automatic resume behaviour
- Adds the migration_manifest.json to the file structure diagram
- Replaces the "Project Migration" use case with a proper two-installation
migration section that shows how to use different API keys for source
and destination - Adds three new troubleshooting entries for interrupted imports,
"already completed" message, and missing experiment items
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- [SDK] Address PR review comments on migration manifest
- Remove redundant
if debug:guard arounddebug_printin experiment.py - Replace direct
console.printwithdebug_printin project.py for consistency - Restore removed explanatory comments in project.py span processing logic
- Restore removed examples in import_group docstring (dataset import, custom path)
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Address PR review comments from petrotiurin
- Restore missing project import examples (name pattern and --debug) in __init__.py
- Restore removed "# Create span with parent_span_id if available" comment in project.py
- Replace redundant
if debug: console.print(...)blocks withdebug_print()in project.py - Remove redundant
if debug:guards wrapping singledebug_print()calls in experiment.py
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Batch manifest writes to reduce disk I/O during large imports
Instead of rewriting migration_manifest.json on every file completion,
accumulate changes and flush every 10 files (DEFAULT_BATCH_SIZE).
State-transition calls (start, complete, reset, save) always flush
immediately to keep lifecycle semantics correct.Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Replace JSON migration manifest with SQLite database
- Use migration_manifest.db (SQLite) instead of migration_manifest.json
- WAL mode + synchronous=NORMAL: crash-safe, fast appends, no full-file rewrites
- Batched writes: buffer up to 50 ops in memory, commit in one transaction
- INSERT OR IGNORE / INSERT OR REPLACE: idempotent — no duplicate rows possible
- In-memory buffers use set/dict: deduplication before hitting SQLite, O(1) lookup
- is_file_completed checks buffer first then keyed DB lookup (O(log n) vs O(n) list scan)
- del provides best-effort flush on GC for clean process exits
- Public API unchanged: all callers require no modification
- Update docs and __init__.py docstring to reference .db filename
- Rewrite tests: replace JSON-parsing assertions with SQLite queries and API calls;
add TestDatabaseIntegrity suite covering idempotency and last-write-wins semantics
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Update import docs: SQLite manifest, remove JSON corruption note
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
- Address baz review comments on migration manifest
High: document and test the batching crash trade-off
- Add TestBatchingBehavior suite with 4 tests: buffered writes visible via API,
crash simulation (unflushed data lost), batch_size=1 per-file durability,
auto-flush at batch threshold - Expand module docstring with explicit crash trade-off section
Medium: do not create manifest DB during --dry-run
- MigrationManifest is now constructed only inside
if not dry_run:in
_import_by_type; --dry-run passes manifest=None to all import functions
(they already guard withif manifest:) - Add assert to satisfy mypy at the manifest.complete() call site
Low: make DEFAULT_BATCH_SIZE env-configurable
- Read OPIK_MIGRATION_BATCH_SIZE env var at import time; validate range 1-10000;
log a warning and fall back to 50 on invalid input
Low: rename tests to follow test_WHAT__CASE__EXPECTED_RESULT convention
- All 26 test methods now follow the pattern required by design/TESTING.md
Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com
Co-authored-by: Douglas Blank doug@comet.com-
[OPIK-3519] [INFRA] add automated provider model sync script (#5506)
-
[OPIK-3519] [BE][FE] feat: add automated provider model sync script
Add a Python script and GitHub Actions workflow to automatically sync
LLM provider model lists across 5 Java enums and 2 TypeScript files.- Supports OpenAI, Anthropic, Gemini, VertexAI, and OpenRouter providers
- Fetches models from provider APIs (with fallback to LiteLLM prices JSON)
- Add-only mode: never removes models automatically, reports stale models
- Curated dropdown filtering with smart sorting per provider
- Detects deprecated models via deprecation_date and excludes from dropdown
- Excludes Responses-API-only models (e.g. gpt-5.2-pro) from dropdown
- Generates PRs with detailed summary of changes
- Scheduled daily via GitHub Actions cron
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- fix(ci): align workflow PR template with Opik conventions
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- fix: address PR review comments
- Add permissions block (contents: write, pull-requests: write) to workflow
- Surface sync summary in GitHub Step Summary even when no models are added
- Fix _deduplicate_by_base to pick newest dated variant instead of oldest
- Report enum name collisions in sync summary instead of silently skipping
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- fix: pipefail for workflow exit code + openrouter deprecated prefix
- Use PIPESTATUS[0] with pipefail so Python exit code is captured
instead of tee's (always-zero) exit - Add openrouter/ to build_deprecated_set prefix list so deprecated
OpenRouter models are filtered from dropdown
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Co-authored-by: Andrei Căutișanu andreicautisanu@Andreis-MacBook-Pro.local
Co-authored-by: Claude Opus 4.6 noreply@anthropic.com-
[OPIK-4865] [BE] Add NONE value type to AgentConfigValue (#5584)
-
[OPIK-4865] [BE] Add NONE value type to AgentConfigValue
Adds a new
noneValueType to represent the absence of a value on the
caller side. Thevaluefield is now validated with@NotNullinstead
of@NotBlank, allowing an empty string as a placeholder when type is
none. Updates the validation test to assert the correct error message.Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com
-
Allow null in values instead of having a separate type
-
update rollback comment
-
expand tests
-
using assertion util
Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com
-
[OPIK-4871] [BE] Update feedback scores filter to support plural exclude categories (#5588)
-
[OPIK-4871] [BE] Update feedback scores filter to support plural exclude categories
Switch exclude_category_name (singular) to exclude_category_names (plural, JSON
array query param parsed to Set). Default to excluding "suite_assertion"
when no param is provided.Affected endpoints:
- GET /experiments/feedback-scores/names
- GET /traces/feedback-scores/names
- GET /spans/feedback-scores/names
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- [OPIK-4871] [DOCS] Add API Design guidance for plural query parameter names
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Co-authored-by: Claude Opus 4.6 noreply@anthropic.com
-
[OPIK-4699] [FE] Write comments permission (#5587)
-
[OPIK-4699] Add new permission
-
[OPIK-4699] Hide comment forms
-
[OPIK-4699] Refactor
-
[OPIK-4699] Hide Reply CTA
-
[OPIK-4699] Hide comment menu
-
[OPIK-4699] Address review comments
-
[OPIK-4710] [FE] Create annotation queue permission (#5590)
-
[OPIK-4710] Add new permission
-
[OPIK-4710] Hide create CTAs
-
[DND-518][HELM] Add support for topologySpreadConstraints in Opik chart (#5580)
Co-authored-by: Natalia 35889405+NatZol@users.noreply.github.com
Co-authored-by: Petro Tiurin 2856640+petrotiurin@users.noreply.github.com
Co-authored-by: Douglas Blank doug.blank@gmail.com
Co-authored-by: Claude Sonnet 4.6 noreply@anthropic.com
Co-authored-by: Douglas Blank doug@comet.com
Co-authored-by: Andrei Cautisanu 30831438+AndreiCautisanu@users.noreply.github.com
Co-authored-by: Andrei Căutișanu andreicautisanu@Andreis-MacBook-Pro.local
Co-authored-by: Daniel Dimenshtein danield@comet.com
Co-authored-by: Liya Katz liyak@comet.com下载附件
-