From 8d6d40a00c7eb322513877a476870da1fada80c5 Mon Sep 17 00:00:00 2001 From: Sean Phan Date: Sat, 19 Sep 2026 20:35:48 +0000 Subject: [PATCH 1/2] chore: prepare pixelml-av 0.2.0 release --- pyproject.toml | 17 ++++++++++++++++- skills/agentic-video-memory/SKILL.md | 4 ++-- src/av/__init__.py | 2 +- src/av/cli/ask.py | 9 ++++++++- src/av/pipeline/ingest.py | 11 ++++++++++- uv.lock | 2 +- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 48fc992..f53276b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pixelml-av" -version = "0.1.0" +version = "0.2.0" description = "Index once, search many — agentic video memory CLI by Pixel ML" readme = "README.md" requires-python = ">=3.11" @@ -37,5 +37,20 @@ build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/av"] +[tool.hatch.build.targets.wheel.force-include] +"prompts/dense_caption.md" = "prompts/dense_caption.md" + +[tool.hatch.build.targets.sdist] +include = [ + "/src", + "/tests", + "/cookbook", + "/prompts", + "/README.md", + "/LICENSE", + "/pyproject.toml", + "/uv.lock", +] + [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/skills/agentic-video-memory/SKILL.md b/skills/agentic-video-memory/SKILL.md index cb61ed9..72f21ac 100644 --- a/skills/agentic-video-memory/SKILL.md +++ b/skills/agentic-video-memory/SKILL.md @@ -1,6 +1,6 @@ --- name: agentic-video-memory -version: 0.1.0 +version: 0.2.0 description: Video memory for AI agents. Ingest, search, and ask questions over video content. homepage: https://agentic.video --- @@ -382,7 +382,7 @@ Print version info. **Output (stdout, JSON):** ```json -{"version": "0.1.0", "package": "pixelml-av"} +{"version": "0.2.0", "package": "pixelml-av"} ``` ## Agent Integration Patterns diff --git a/src/av/__init__.py b/src/av/__init__.py index 492034f..603f820 100644 --- a/src/av/__init__.py +++ b/src/av/__init__.py @@ -1,3 +1,3 @@ """av — Agentic Video CLI by Pixel ML. Index once, search many.""" -__version__ = "0.1.0" +__version__ = "0.2.0" diff --git a/src/av/cli/ask.py b/src/av/cli/ask.py index eedd678..ff21b07 100644 --- a/src/av/cli/ask.py +++ b/src/av/cli/ask.py @@ -26,7 +26,14 @@ def ask_cmd( help="Skip configured Jev relevance and scene refinement", ), ) -> None: - """Ask a question about indexed video content (RAG).""" + """Ask a question about indexed video content (RAG). + + When configured, Jev filters source relevance, bounds scene context, and + checks answer support. Optional stronger selected-frame inspection runs + only with explicit AV_STRONG_VISION_API_BASE_URL and + AV_STRONG_VISION_MODEL settings; AV_STRONG_VISION_API_KEY is used when + the endpoint requires authentication. + """ config = get_config(db_path=Path(db) if db else None) repo = Repository(config.db_path) diff --git a/src/av/pipeline/ingest.py b/src/av/pipeline/ingest.py index 2e83dc9..9fa28e2 100644 --- a/src/av/pipeline/ingest.py +++ b/src/av/pipeline/ingest.py @@ -27,6 +27,15 @@ from av.utils.principles import load_principles +def _dense_caption_template_path() -> Path: + current = Path(__file__).resolve() + candidates = ( + current.parents[2] / "prompts" / "dense_caption.md", + current.parents[3] / "prompts" / "dense_caption.md", + ) + return next((candidate for candidate in candidates if candidate.is_file()), candidates[-1]) + + def _chunk_seconds_for_audio(audio_path: Path, target_bytes: int = MAX_AUDIO_CHUNK_BYTES - (1 * 1024 * 1024)) -> int: size = audio_path.stat().st_size if size <= 0: @@ -387,7 +396,7 @@ def ingest_video( ) principles = load_principles(principles_path) - template_path = Path(__file__).resolve().parents[3] / "prompts" / "dense_caption.md" + template_path = _dense_caption_template_path() prompt = render_dense_prompt(template_path, principles) if frames: diff --git a/uv.lock b/uv.lock index 112cebd..d625e68 100644 --- a/uv.lock +++ b/uv.lock @@ -352,7 +352,7 @@ wheels = [ [[package]] name = "pixelml-av" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ { name = "openai" }, From 788be651f1b69c02f7bbde487cddef69c0c1aedb Mon Sep 17 00:00:00 2001 From: Sean Phan Date: Sat, 19 Sep 2026 20:42:17 +0000 Subject: [PATCH 2/2] fix: package dense-caption prompt --- pyproject.toml | 3 ++- src/av/pipeline/ingest.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f53276b..92f5851 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,7 @@ build-backend = "hatchling.build" packages = ["src/av"] [tool.hatch.build.targets.wheel.force-include] -"prompts/dense_caption.md" = "prompts/dense_caption.md" +"prompts/dense_caption.md" = "av/prompts/dense_caption.md" [tool.hatch.build.targets.sdist] include = [ @@ -46,6 +46,7 @@ include = [ "/tests", "/cookbook", "/prompts", + "/skills", "/README.md", "/LICENSE", "/pyproject.toml", diff --git a/src/av/pipeline/ingest.py b/src/av/pipeline/ingest.py index 9fa28e2..55ad171 100644 --- a/src/av/pipeline/ingest.py +++ b/src/av/pipeline/ingest.py @@ -30,7 +30,7 @@ def _dense_caption_template_path() -> Path: current = Path(__file__).resolve() candidates = ( - current.parents[2] / "prompts" / "dense_caption.md", + current.parents[1] / "prompts" / "dense_caption.md", current.parents[3] / "prompts" / "dense_caption.md", ) return next((candidate for candidate in candidates if candidate.is_file()), candidates[-1])