Add Ollama backend + Qwen3 local inference support
- Extractor now supports two backends: ollama (local) and anthropic (cloud) - Default is ollama with qwen3:14b (fits 16GB VRAM) - Set num_ctx to 32768 for full-script processing - Added --backend and --ollama-url CLI flags - Added The Last Backup test script - Tested: 12/12 scenes valid on dialogue_heavy, 12/13 on the_last_backup Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,7 +14,9 @@ def main():
|
||||
parser = argparse.ArgumentParser(description="AI Movie Production Pipeline — Phase 1")
|
||||
parser.add_argument("--script", type=str, help="Path to .fountain script file")
|
||||
parser.add_argument("--project", type=str, help="Project name (determines output directory)")
|
||||
parser.add_argument("--model", type=str, default="claude-sonnet-4-20250514", help="Model ID")
|
||||
parser.add_argument("--model", type=str, default="qwen3:14b", help="Model ID (default: qwen3:14b)")
|
||||
parser.add_argument("--backend", type=str, default="ollama", choices=["ollama", "anthropic"], help="AI backend (default: ollama)")
|
||||
parser.add_argument("--ollama-url", type=str, default="http://localhost:11434", help="Ollama server URL")
|
||||
parser.add_argument("--scene", type=int, default=None, help="Process only this scene number")
|
||||
parser.add_argument("--dry-run", action="store_true", help="Validate inputs only, no AI calls")
|
||||
parser.add_argument("--force", action="store_true", help="Ignore cache, re-run even if unchanged")
|
||||
@@ -24,14 +26,14 @@ def main():
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.test:
|
||||
run_tests(args.model, args.output_dir)
|
||||
run_tests(args.model, args.backend, args.ollama_url, args.output_dir)
|
||||
return
|
||||
|
||||
if not args.script or not args.project:
|
||||
parser.error("--script and --project are required (unless using --test)")
|
||||
|
||||
api_key = os.environ.get("ANTHROPIC_API_KEY")
|
||||
if not api_key and not args.dry_run:
|
||||
api_key = os.environ.get("ANTHROPIC_API_KEY", "")
|
||||
if args.backend == "anthropic" and not api_key and not args.dry_run:
|
||||
print("ERROR: ANTHROPIC_API_KEY not set. Set it in .env or environment.")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -44,8 +46,10 @@ def main():
|
||||
result = run_phase1(
|
||||
script_path=args.script,
|
||||
project_name=args.project,
|
||||
api_key=api_key or "",
|
||||
api_key=api_key,
|
||||
model=args.model,
|
||||
backend=args.backend,
|
||||
ollama_url=args.ollama_url,
|
||||
output_dir=args.output_dir,
|
||||
scene_filter=args.scene,
|
||||
dry_run=args.dry_run,
|
||||
@@ -60,11 +64,11 @@ def main():
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def run_tests(model: str, output_dir: str):
|
||||
def run_tests(model: str, backend: str, ollama_url: str, output_dir: str):
|
||||
"""Run test suite against all scripts in test_scripts/."""
|
||||
api_key = os.environ.get("ANTHROPIC_API_KEY")
|
||||
if not api_key:
|
||||
print("ERROR: ANTHROPIC_API_KEY required for tests")
|
||||
api_key = os.environ.get("ANTHROPIC_API_KEY", "")
|
||||
if backend == "anthropic" and not api_key:
|
||||
print("ERROR: ANTHROPIC_API_KEY required for anthropic backend tests")
|
||||
sys.exit(1)
|
||||
|
||||
test_dir = os.path.join(os.path.dirname(__file__), "test_scripts")
|
||||
@@ -93,6 +97,8 @@ def run_tests(model: str, output_dir: str):
|
||||
project_name=project_name,
|
||||
api_key=api_key,
|
||||
model=model,
|
||||
backend=backend,
|
||||
ollama_url=ollama_url,
|
||||
output_dir=output_dir,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user