diff --git a/pyproject.toml b/pyproject.toml index 48fc992..92f5851 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,21 @@ build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/av"] +[tool.hatch.build.targets.wheel.force-include] +"prompts/dense_caption.md" = "av/prompts/dense_caption.md" + +[tool.hatch.build.targets.sdist] +include = [ + "/src", + "/tests", + "/cookbook", + "/prompts", + "/skills", + "/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..55ad171 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[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]) + + 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" },