azathoth-ai 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- azathoth_ai-1.0.0/LICENSE +21 -0
- azathoth_ai-1.0.0/PKG-INFO +195 -0
- azathoth_ai-1.0.0/README.md +160 -0
- azathoth_ai-1.0.0/pyproject.toml +94 -0
- azathoth_ai-1.0.0/setup.cfg +4 -0
- azathoth_ai-1.0.0/src/azathoth/__init__.py +3 -0
- azathoth_ai-1.0.0/src/azathoth/cli/__init__.py +217 -0
- azathoth_ai-1.0.0/src/azathoth/cli/__main__.py +5 -0
- azathoth_ai-1.0.0/src/azathoth/cli/application.py +249 -0
- azathoth_ai-1.0.0/src/azathoth/cli/benchmark_cases.py +148 -0
- azathoth_ai-1.0.0/src/azathoth/cli/benchmark_checks.py +134 -0
- azathoth_ai-1.0.0/src/azathoth/cli/benchmark_execution.py +195 -0
- azathoth_ai-1.0.0/src/azathoth/cli/benchmarks.py +705 -0
- azathoth_ai-1.0.0/src/azathoth/cli/bootstrap.py +110 -0
- azathoth_ai-1.0.0/src/azathoth/cli/configuration.py +47 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/__init__.py +25 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/benchmarks.py +327 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/experiments.py +44 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/goals.py +66 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/invocations.py +44 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/judges.py +62 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/models.py +105 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/runs.py +89 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/tools.py +243 -0
- azathoth_ai-1.0.0/src/azathoth/cli/dispatching/workflows.py +373 -0
- azathoth_ai-1.0.0/src/azathoth/cli/execution.py +80 -0
- azathoth_ai-1.0.0/src/azathoth/cli/experiments.py +88 -0
- azathoth_ai-1.0.0/src/azathoth/cli/goals.py +142 -0
- azathoth_ai-1.0.0/src/azathoth/cli/judges.py +120 -0
- azathoth_ai-1.0.0/src/azathoth/cli/models.py +262 -0
- azathoth_ai-1.0.0/src/azathoth/cli/optimization.py +103 -0
- azathoth_ai-1.0.0/src/azathoth/cli/output_format.py +21 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/__init__.py +315 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/benchmarks.py +317 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/common.py +48 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/experiments.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/goals.py +63 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/invocations.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/judges.py +57 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/models.py +95 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/runs.py +99 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/tools.py +245 -0
- azathoth_ai-1.0.0/src/azathoth/cli/parsing/workflows.py +366 -0
- azathoth_ai-1.0.0/src/azathoth/cli/production.py +47 -0
- azathoth_ai-1.0.0/src/azathoth/cli/production_inspection.py +250 -0
- azathoth_ai-1.0.0/src/azathoth/cli/promotion.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/__init__.py +91 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/_json.py +17 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/benchmark_executions.py +249 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/benchmarks.py +54 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/evaluations.py +46 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/experiments.py +165 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/feedback.py +44 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/invocation_history.py +158 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/invocations.py +49 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/optimization.py +180 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/output_records.py +190 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/production.py +134 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/promotions.py +65 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/run_summaries.py +61 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/runs.py +166 -0
- azathoth_ai-1.0.0/src/azathoth/cli/rendering/usage.py +152 -0
- azathoth_ai-1.0.0/src/azathoth/cli/runs.py +267 -0
- azathoth_ai-1.0.0/src/azathoth/cli/step_output.py +88 -0
- azathoth_ai-1.0.0/src/azathoth/cli/streams.py +35 -0
- azathoth_ai-1.0.0/src/azathoth/cli/tool_verification.py +152 -0
- azathoth_ai-1.0.0/src/azathoth/cli/tools.py +523 -0
- azathoth_ai-1.0.0/src/azathoth/cli/usage.py +89 -0
- azathoth_ai-1.0.0/src/azathoth/cli/workflow_configuration.py +340 -0
- azathoth_ai-1.0.0/src/azathoth/cli/workflows.py +415 -0
- azathoth_ai-1.0.0/src/azathoth/context/__init__.py +5 -0
- azathoth_ai-1.0.0/src/azathoth/context/models.py +53 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/__init__.py +136 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark.py +104 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark_catalog.py +39 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark_catalog_loader.py +21 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark_document.py +32 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark_repository.py +64 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/benchmark_revision.py +103 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/exact.py +97 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/json_equality.py +113 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/json_schema.py +81 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/judge_repository.py +51 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/judges.py +135 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/memory_benchmark_repository.py +98 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/memory_judge_repository.py +74 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/models.py +92 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/normalized.py +153 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/outcome.py +123 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/protocols.py +36 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/schema.py +104 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/semantic.py +409 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/sqlite_benchmark_repository.py +314 -0
- azathoth_ai-1.0.0/src/azathoth/evaluation/sqlite_judge_repository.py +173 -0
- azathoth_ai-1.0.0/src/azathoth/execution/__init__.py +9 -0
- azathoth_ai-1.0.0/src/azathoth/execution/executor.py +79 -0
- azathoth_ai-1.0.0/src/azathoth/execution/models.py +29 -0
- azathoth_ai-1.0.0/src/azathoth/goals/__init__.py +29 -0
- azathoth_ai-1.0.0/src/azathoth/goals/catalog.py +39 -0
- azathoth_ai-1.0.0/src/azathoth/goals/catalog_loader.py +21 -0
- azathoth_ai-1.0.0/src/azathoth/goals/document.py +32 -0
- azathoth_ai-1.0.0/src/azathoth/goals/memory_repository.py +52 -0
- azathoth_ai-1.0.0/src/azathoth/goals/models.py +17 -0
- azathoth_ai-1.0.0/src/azathoth/goals/repository.py +33 -0
- azathoth_ai-1.0.0/src/azathoth/goals/sqlite_repository.py +143 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/__init__.py +51 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/candidate_resolution.py +58 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/experiment.py +70 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/model_substitution.py +208 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/model_substitution_optimizer.py +85 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/models.py +150 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/ranking.py +43 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/replay.py +30 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/runner.py +79 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/session.py +46 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/session_runner.py +79 -0
- azathoth_ai-1.0.0/src/azathoth/optimization/workflow.py +52 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/__init__.py +69 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/candidates.py +102 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/context_candidates.py +114 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/context_strategy.py +75 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/exceptions.py +29 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/execution.py +75 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/model_selection.py +33 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/models.py +170 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/output_format.py +52 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/specifications.py +75 -0
- azathoth_ai-1.0.0/src/azathoth/prompting/strategy.py +74 -0
- azathoth_ai-1.0.0/src/azathoth/providers/__init__.py +133 -0
- azathoth_ai-1.0.0/src/azathoth/providers/catalog.py +61 -0
- azathoth_ai-1.0.0/src/azathoth/providers/catalog_loader.py +21 -0
- azathoth_ai-1.0.0/src/azathoth/providers/deterministic.py +38 -0
- azathoth_ai-1.0.0/src/azathoth/providers/exceptions.py +13 -0
- azathoth_ai-1.0.0/src/azathoth/providers/execution.py +40 -0
- azathoth_ai-1.0.0/src/azathoth/providers/memory_portfolio_repository.py +68 -0
- azathoth_ai-1.0.0/src/azathoth/providers/memory_provider_observation_repository.py +87 -0
- azathoth_ai-1.0.0/src/azathoth/providers/memory_repository.py +60 -0
- azathoth_ai-1.0.0/src/azathoth/providers/models.py +98 -0
- azathoth_ai-1.0.0/src/azathoth/providers/openrouter.py +131 -0
- azathoth_ai-1.0.0/src/azathoth/providers/openrouter_directory.py +337 -0
- azathoth_ai-1.0.0/src/azathoth/providers/openrouter_models.py +19 -0
- azathoth_ai-1.0.0/src/azathoth/providers/openrouter_registry.py +38 -0
- azathoth_ai-1.0.0/src/azathoth/providers/portfolio.py +72 -0
- azathoth_ai-1.0.0/src/azathoth/providers/portfolio_catalog.py +22 -0
- azathoth_ai-1.0.0/src/azathoth/providers/portfolio_loader.py +25 -0
- azathoth_ai-1.0.0/src/azathoth/providers/portfolio_repository.py +45 -0
- azathoth_ai-1.0.0/src/azathoth/providers/protocol.py +17 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_catalog_synchronizer.py +49 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_directory.py +32 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_metadata.py +22 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_models.py +113 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_observation_repository.py +51 -0
- azathoth_ai-1.0.0/src/azathoth/providers/provider_observer.py +122 -0
- azathoth_ai-1.0.0/src/azathoth/providers/query.py +123 -0
- azathoth_ai-1.0.0/src/azathoth/providers/registry.py +65 -0
- azathoth_ai-1.0.0/src/azathoth/providers/repository.py +40 -0
- azathoth_ai-1.0.0/src/azathoth/providers/requirements.py +38 -0
- azathoth_ai-1.0.0/src/azathoth/providers/sqlite_portfolio_repository.py +184 -0
- azathoth_ai-1.0.0/src/azathoth/providers/sqlite_provider_observation_repository.py +235 -0
- azathoth_ai-1.0.0/src/azathoth/providers/sqlite_repository.py +165 -0
- azathoth_ai-1.0.0/src/azathoth/py.typed +0 -0
- azathoth_ai-1.0.0/src/azathoth/revisions/__init__.py +11 -0
- azathoth_ai-1.0.0/src/azathoth/revisions/digest.py +38 -0
- azathoth_ai-1.0.0/src/azathoth/runtime/__init__.py +17 -0
- azathoth_ai-1.0.0/src/azathoth/runtime/exceptions.py +13 -0
- azathoth_ai-1.0.0/src/azathoth/runtime/protocols.py +105 -0
- azathoth_ai-1.0.0/src/azathoth/runtime/runtime.py +232 -0
- azathoth_ai-1.0.0/src/azathoth/strategies/__init__.py +27 -0
- azathoth_ai-1.0.0/src/azathoth/strategies/event_field.py +59 -0
- azathoth_ai-1.0.0/src/azathoth/strategies/exceptions.py +13 -0
- azathoth_ai-1.0.0/src/azathoth/strategies/models.py +75 -0
- azathoth_ai-1.0.0/src/azathoth/strategies/protocols.py +21 -0
- azathoth_ai-1.0.0/src/azathoth/tools/__init__.py +108 -0
- azathoth_ai-1.0.0/src/azathoth/tools/catalog.py +72 -0
- azathoth_ai-1.0.0/src/azathoth/tools/catalog_loader.py +51 -0
- azathoth_ai-1.0.0/src/azathoth/tools/definition.py +34 -0
- azathoth_ai-1.0.0/src/azathoth/tools/dispatch.py +100 -0
- azathoth_ai-1.0.0/src/azathoth/tools/document.py +81 -0
- azathoth_ai-1.0.0/src/azathoth/tools/exceptions.py +13 -0
- azathoth_ai-1.0.0/src/azathoth/tools/execution.py +170 -0
- azathoth_ai-1.0.0/src/azathoth/tools/implementation.py +86 -0
- azathoth_ai-1.0.0/src/azathoth/tools/implementation_catalog.py +72 -0
- azathoth_ai-1.0.0/src/azathoth/tools/implementation_resolution.py +68 -0
- azathoth_ai-1.0.0/src/azathoth/tools/matching.py +45 -0
- azathoth_ai-1.0.0/src/azathoth/tools/memory_repository.py +310 -0
- azathoth_ai-1.0.0/src/azathoth/tools/process.py +179 -0
- azathoth_ai-1.0.0/src/azathoth/tools/protocols.py +20 -0
- azathoth_ai-1.0.0/src/azathoth/tools/repository.py +125 -0
- azathoth_ai-1.0.0/src/azathoth/tools/requirements.py +30 -0
- azathoth_ai-1.0.0/src/azathoth/tools/resolution.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/tools/revision.py +226 -0
- azathoth_ai-1.0.0/src/azathoth/tools/sqlite_repository.py +830 -0
- azathoth_ai-1.0.0/src/azathoth/tools/strategy.py +106 -0
- azathoth_ai-1.0.0/src/azathoth/tools/testing.py +18 -0
- azathoth_ai-1.0.0/src/azathoth/tools/verification.py +55 -0
- azathoth_ai-1.0.0/src/azathoth/tools/verifier.py +61 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/__init__.py +497 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/attempt.py +59 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/benchmark.py +593 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/benchmark_case_source.py +143 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/benchmark_execution_repository.py +63 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/benchmark_record.py +433 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/benchmark_recorder.py +198 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/candidate.py +198 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/catalog.py +89 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/catalog_loader.py +38 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/condition.py +86 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/document.py +30 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/evaluation.py +29 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/execution.py +330 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/experiment.py +145 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/experiment_record.py +313 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/experiment_recorder.py +26 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/experiment_repository.py +43 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/experiment_runner.py +269 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/failure.py +11 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/feedback.py +52 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/feedback_repository.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/generation.py +187 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/input.py +39 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_benchmark_execution_repository.py +99 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_experiment_repository.py +70 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_feedback_repository.py +57 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_production_invocation_repository.py +91 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_production_invocation_run_repository.py +56 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_production_repository.py +53 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_production_revision_repository.py +64 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_repository.py +96 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_run_evaluation_repository.py +61 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/memory_run_repository.py +55 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/models.py +282 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/observation.py +57 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production.py +197 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_execution.py +257 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_generation.py +124 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_inspection.py +39 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_invocation.py +119 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_invocation_repository.py +60 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_invocation_run.py +22 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_invocation_run_repository.py +35 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_invocation_service.py +100 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_model_resolution.py +110 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_repository.py +33 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/production_revision_repository.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/promotion.py +208 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/ranker.py +48 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/ranking.py +48 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/references.py +114 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/reliability.py +26 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/repository.py +64 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/result.py +102 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/retry.py +48 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/revision.py +111 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/run_evaluation.py +30 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/run_evaluation_repository.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/run_failure.py +75 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/run_repository.py +41 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/runner.py +862 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/scorecard.py +33 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/scoring.py +163 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_benchmark_execution_repository.py +299 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_experiment_repository.py +228 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_feedback_repository.py +177 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_production_invocation_repository.py +358 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_production_invocation_run_repository.py +111 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_production_repository.py +153 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_production_revision_repository.py +193 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_repository.py +314 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_run_evaluation_repository.py +179 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/sqlite_run_repository.py +175 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/statistics.py +50 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/steps.py +133 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/usage.py +321 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/usage_report.py +382 -0
- azathoth_ai-1.0.0/src/azathoth/workflows/value.py +118 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/PKG-INFO +195 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/SOURCES.txt +286 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/dependency_links.txt +1 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/entry_points.txt +2 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/requires.txt +13 -0
- azathoth_ai-1.0.0/src/azathoth_ai.egg-info/top_level.txt +1 -0
- azathoth_ai-1.0.0/tests/test_adr_records.py +88 -0
- azathoth_ai-1.0.0/tests/test_distribution_artifact.py +389 -0
- azathoth_ai-1.0.0/tests/test_docs.py +485 -0
- azathoth_ai-1.0.0/tests/test_oss_v1_release_lifecycle.py +681 -0
- azathoth_ai-1.0.0/tests/test_package.py +177 -0
- azathoth_ai-1.0.0/tests/test_portable_paths.py +99 -0
- azathoth_ai-1.0.0/tests/test_public_packages.py +43 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Eldritch, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: azathoth-ai
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: An empirical optimization engine for context-aware AI workflows.
|
|
5
|
+
Author: Eris Discordia Montano
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/EldritchInc/azathoth
|
|
8
|
+
Project-URL: Repository, https://github.com/EldritchInc/azathoth
|
|
9
|
+
Project-URL: Issues, https://github.com/EldritchInc/azathoth/issues
|
|
10
|
+
Project-URL: Funding, https://patreon.com/ErisDiscordiaM
|
|
11
|
+
Keywords: artificial-intelligence,llm,prompt-optimization,model-routing,evaluation,workflow-optimization
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Typing :: Typed
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Requires-Dist: httpx<1,>=0.28
|
|
23
|
+
Requires-Dist: jsonschema<5,>=4.18
|
|
24
|
+
Requires-Dist: pydantic>=2
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: build; extra == "dev"
|
|
27
|
+
Requires-Dist: mypy; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
30
|
+
Requires-Dist: ruff; extra == "dev"
|
|
31
|
+
Requires-Dist: setuptools>=68; extra == "dev"
|
|
32
|
+
Requires-Dist: types-jsonschema; extra == "dev"
|
|
33
|
+
Requires-Dist: wheel; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Azathoth
|
|
37
|
+
|
|
38
|
+
> Empirical optimization for context-aware AI workflows.
|
|
39
|
+
|
|
40
|
+
Azathoth is an open-source engine for building LLM workflows by composing
|
|
41
|
+
them rather than coding them, and then improving them with measured
|
|
42
|
+
evidence rather than intuition.
|
|
43
|
+
|
|
44
|
+
You describe a workflow as a JSON document:
|
|
45
|
+
|
|
46
|
+
- prompt steps that state model requirements instead of naming models;
|
|
47
|
+
- tool steps;
|
|
48
|
+
- child workflows and loops;
|
|
49
|
+
- the dependencies, conditions and failure policies between them.
|
|
50
|
+
|
|
51
|
+
Azathoth runs it and benchmarks it. It searches for the models that pass your
|
|
52
|
+
benchmark at the latency and cost you target. It deploys only what you
|
|
53
|
+
deliberately promote.
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
define ──► run ──► benchmark ──► optimize ──► promote ──► invoke production
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Workflows Are Composed, Not Coded
|
|
60
|
+
|
|
61
|
+
Most LLM workflows are programs: prompts in source files, models as
|
|
62
|
+
constants, control flow as code. Every change, whether a new model, a
|
|
63
|
+
reworded prompt or an extra review step, goes through engineering.
|
|
64
|
+
|
|
65
|
+
Azathoth makes building a workflow a composition activity. That moves LLM
|
|
66
|
+
workflows out of engineering and into the hands of the teams who run and own
|
|
67
|
+
them:
|
|
68
|
+
|
|
69
|
+
- **platform and DevOps teams** operate workflows like infrastructure: versioned
|
|
70
|
+
revisions, explicit promotion, production state and an audit trail of
|
|
71
|
+
every invocation;
|
|
72
|
+
- **domain experts** define what a good answer is, as benchmark cases, exact
|
|
73
|
+
or judged by a model, and Azathoth measures every candidate against them;
|
|
74
|
+
- **engineers** write **tools**: small, versioned, tested units of
|
|
75
|
+
deterministic work that workflows compose.
|
|
76
|
+
|
|
77
|
+
Writing code should be for tools, not for LLM workflows.
|
|
78
|
+
|
|
79
|
+
## Quick Look
|
|
80
|
+
|
|
81
|
+
Install it in a virtual environment. The [install guide](https://github.com/EldritchInc/azathoth/blob/main/docs/install.md)
|
|
82
|
+
explains why a venv, and gives the Windows commands:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
python3 -m venv .venv
|
|
86
|
+
source .venv/bin/activate
|
|
87
|
+
python -m pip install azathoth-ai
|
|
88
|
+
azathoth --version
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
From a clone of this repository, run a workflow built from two tools. It
|
|
92
|
+
needs no model and no API key:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
azathoth tool import examples/tools/word-count.json
|
|
96
|
+
azathoth tool import examples/tools/word-count-process.json
|
|
97
|
+
azathoth workflow import examples/workflows/redundant-word-count.json
|
|
98
|
+
azathoth workflow run a1000000-0000-4000-8000-000000000001 --input '"that is not dead which can eternal lie"' --output result
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
It prints `8`. To go from there to a model-backed workflow that is
|
|
102
|
+
benchmarked, optimized, promoted and invoked in production, follow
|
|
103
|
+
[Getting Started](https://github.com/EldritchInc/azathoth/blob/main/docs/getting-started.md).
|
|
104
|
+
|
|
105
|
+
## Documentation
|
|
106
|
+
|
|
107
|
+
| Guide | What it covers |
|
|
108
|
+
| --- | --- |
|
|
109
|
+
| [Installing Azathoth](https://github.com/EldritchInc/azathoth/blob/main/docs/install.md) | Python, a venv, `pip install`, checking it works, on macOS and Windows |
|
|
110
|
+
| [Connecting OpenRouter](https://github.com/EldritchInc/azathoth/blob/main/docs/openrouter.md) | An API key, finding and authorizing models, adding judges |
|
|
111
|
+
| [Getting Started](https://github.com/EldritchInc/azathoth/blob/main/docs/getting-started.md) | One workflow from import to production |
|
|
112
|
+
| [Examples Tour](https://github.com/EldritchInc/azathoth/blob/main/docs/examples.md) | Every example, from a word count to a novel |
|
|
113
|
+
| [Concepts](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md) | How Azathoth is put together, and why |
|
|
114
|
+
| [CLI Reference](https://github.com/EldritchInc/azathoth/blob/main/src/azathoth/cli/README.md) | Every command, its options and its output |
|
|
115
|
+
| [Architecture Decisions](https://github.com/EldritchInc/azathoth/blob/main/docs/adrs/README.md) | The ADRs behind each boundary |
|
|
116
|
+
| [Contributing](https://github.com/EldritchInc/azathoth/blob/main/CONTRIBUTING.md) | Working on Azathoth itself |
|
|
117
|
+
| [Releasing](https://github.com/EldritchInc/azathoth/blob/main/RELEASING.md) | How a release is validated and published |
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
The [examples](https://github.com/EldritchInc/azathoth/tree/main/examples)
|
|
122
|
+
are complete, importable workflows, each with its benchmarks and end-to-end
|
|
123
|
+
tests:
|
|
124
|
+
|
|
125
|
+
- **word count**: tools, redundancy, and benchmark cases made from corrected
|
|
126
|
+
runs;
|
|
127
|
+
- **classify sentiment**: the whole lifecycle in one step;
|
|
128
|
+
- **child workflow** and **countdown loop**: composing workflows;
|
|
129
|
+
- **ticket triage**: conditional routing to specialists, and a cheaper
|
|
130
|
+
classifier found by the optimizer;
|
|
131
|
+
- **workflow writer**: a workflow that writes workflows and validates them;
|
|
132
|
+
- **code review**: three concurrent reviewers, merged by code rather than a
|
|
133
|
+
model;
|
|
134
|
+
- **novel**: nested loops that plan, draft, edit and revise a book.
|
|
135
|
+
|
|
136
|
+
## What Azathoth Does
|
|
137
|
+
|
|
138
|
+
- **Composes workflows** from prompt, tool and child-workflow steps. Steps can
|
|
139
|
+
depend on each other, pass values by name, run conditionally, retry, and
|
|
140
|
+
fail in a controlled way.
|
|
141
|
+
- **Separates intent from models.** Steps state requirements, and Azathoth
|
|
142
|
+
chooses from the models you have authorized among those OpenRouter
|
|
143
|
+
currently offers.
|
|
144
|
+
- **Records everything**: every run, step, attempt, prompt, reply, token and
|
|
145
|
+
cost, as durable evidence.
|
|
146
|
+
- **Benchmarks** workflows with exact, normalized, schema and model-judged
|
|
147
|
+
semantic cases.
|
|
148
|
+
- **Optimizes** by trying strictly cheaper authorized models, step by step,
|
|
149
|
+
and ranking candidates on quality, reliability, latency and cost. The
|
|
150
|
+
report shows which model each step of the winner used.
|
|
151
|
+
- **Promotes deliberately.** Production runs only what was explicitly
|
|
152
|
+
promoted, on exact models, with a revision history and an invocation log.
|
|
153
|
+
Optimizing never deploys anything by itself.
|
|
154
|
+
|
|
155
|
+
Azathoth is also a typed Python library. The
|
|
156
|
+
[package READMEs](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md#package-guide)
|
|
157
|
+
document each subsystem.
|
|
158
|
+
|
|
159
|
+
## Design Principles
|
|
160
|
+
|
|
161
|
+
> **Persist what should happen. Compose what can execute. Record what
|
|
162
|
+
> actually happened. Change production deliberately.**
|
|
163
|
+
|
|
164
|
+
- **Evidence over intuition.** A candidate is better only once it has been
|
|
165
|
+
measured as better.
|
|
166
|
+
- **Composition over code.** Workflows are documents; code lives in tools.
|
|
167
|
+
- **Provider independence.** Workflows describe model requirements; providers
|
|
168
|
+
are attached at run time.
|
|
169
|
+
- **Explicit production authority.** Production is what you promoted, not the
|
|
170
|
+
latest optimizer winner or the cheapest model.
|
|
171
|
+
- **Immutable records.** Configuration, runs, evaluations and deployments are
|
|
172
|
+
never rewritten.
|
|
173
|
+
|
|
174
|
+
[Concepts](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md)
|
|
175
|
+
explains each of these in depth.
|
|
176
|
+
|
|
177
|
+
## Project Status
|
|
178
|
+
|
|
179
|
+
Azathoth 1.0 supports Python 3.11, 3.12 and 3.13 on Linux, macOS and Windows,
|
|
180
|
+
all tested in CI, with OpenRouter as its model provider.
|
|
181
|
+
|
|
182
|
+
## Support the Project
|
|
183
|
+
|
|
184
|
+
If you find Azathoth useful and would like to support its continued
|
|
185
|
+
development, you can become a patron:
|
|
186
|
+
|
|
187
|
+
**❤️ Patreon:** https://patreon.com/ErisDiscordiaM
|
|
188
|
+
|
|
189
|
+
Your support funds ongoing development, experiments, documentation, testing
|
|
190
|
+
and long-term maintenance.
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
Azathoth is licensed under the
|
|
195
|
+
[MIT License](https://github.com/EldritchInc/azathoth/blob/main/LICENSE).
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Azathoth
|
|
2
|
+
|
|
3
|
+
> Empirical optimization for context-aware AI workflows.
|
|
4
|
+
|
|
5
|
+
Azathoth is an open-source engine for building LLM workflows by composing
|
|
6
|
+
them rather than coding them, and then improving them with measured
|
|
7
|
+
evidence rather than intuition.
|
|
8
|
+
|
|
9
|
+
You describe a workflow as a JSON document:
|
|
10
|
+
|
|
11
|
+
- prompt steps that state model requirements instead of naming models;
|
|
12
|
+
- tool steps;
|
|
13
|
+
- child workflows and loops;
|
|
14
|
+
- the dependencies, conditions and failure policies between them.
|
|
15
|
+
|
|
16
|
+
Azathoth runs it and benchmarks it. It searches for the models that pass your
|
|
17
|
+
benchmark at the latency and cost you target. It deploys only what you
|
|
18
|
+
deliberately promote.
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
define ──► run ──► benchmark ──► optimize ──► promote ──► invoke production
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Workflows Are Composed, Not Coded
|
|
25
|
+
|
|
26
|
+
Most LLM workflows are programs: prompts in source files, models as
|
|
27
|
+
constants, control flow as code. Every change, whether a new model, a
|
|
28
|
+
reworded prompt or an extra review step, goes through engineering.
|
|
29
|
+
|
|
30
|
+
Azathoth makes building a workflow a composition activity. That moves LLM
|
|
31
|
+
workflows out of engineering and into the hands of the teams who run and own
|
|
32
|
+
them:
|
|
33
|
+
|
|
34
|
+
- **platform and DevOps teams** operate workflows like infrastructure: versioned
|
|
35
|
+
revisions, explicit promotion, production state and an audit trail of
|
|
36
|
+
every invocation;
|
|
37
|
+
- **domain experts** define what a good answer is, as benchmark cases, exact
|
|
38
|
+
or judged by a model, and Azathoth measures every candidate against them;
|
|
39
|
+
- **engineers** write **tools**: small, versioned, tested units of
|
|
40
|
+
deterministic work that workflows compose.
|
|
41
|
+
|
|
42
|
+
Writing code should be for tools, not for LLM workflows.
|
|
43
|
+
|
|
44
|
+
## Quick Look
|
|
45
|
+
|
|
46
|
+
Install it in a virtual environment. The [install guide](https://github.com/EldritchInc/azathoth/blob/main/docs/install.md)
|
|
47
|
+
explains why a venv, and gives the Windows commands:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python3 -m venv .venv
|
|
51
|
+
source .venv/bin/activate
|
|
52
|
+
python -m pip install azathoth-ai
|
|
53
|
+
azathoth --version
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
From a clone of this repository, run a workflow built from two tools. It
|
|
57
|
+
needs no model and no API key:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
azathoth tool import examples/tools/word-count.json
|
|
61
|
+
azathoth tool import examples/tools/word-count-process.json
|
|
62
|
+
azathoth workflow import examples/workflows/redundant-word-count.json
|
|
63
|
+
azathoth workflow run a1000000-0000-4000-8000-000000000001 --input '"that is not dead which can eternal lie"' --output result
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
It prints `8`. To go from there to a model-backed workflow that is
|
|
67
|
+
benchmarked, optimized, promoted and invoked in production, follow
|
|
68
|
+
[Getting Started](https://github.com/EldritchInc/azathoth/blob/main/docs/getting-started.md).
|
|
69
|
+
|
|
70
|
+
## Documentation
|
|
71
|
+
|
|
72
|
+
| Guide | What it covers |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| [Installing Azathoth](https://github.com/EldritchInc/azathoth/blob/main/docs/install.md) | Python, a venv, `pip install`, checking it works, on macOS and Windows |
|
|
75
|
+
| [Connecting OpenRouter](https://github.com/EldritchInc/azathoth/blob/main/docs/openrouter.md) | An API key, finding and authorizing models, adding judges |
|
|
76
|
+
| [Getting Started](https://github.com/EldritchInc/azathoth/blob/main/docs/getting-started.md) | One workflow from import to production |
|
|
77
|
+
| [Examples Tour](https://github.com/EldritchInc/azathoth/blob/main/docs/examples.md) | Every example, from a word count to a novel |
|
|
78
|
+
| [Concepts](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md) | How Azathoth is put together, and why |
|
|
79
|
+
| [CLI Reference](https://github.com/EldritchInc/azathoth/blob/main/src/azathoth/cli/README.md) | Every command, its options and its output |
|
|
80
|
+
| [Architecture Decisions](https://github.com/EldritchInc/azathoth/blob/main/docs/adrs/README.md) | The ADRs behind each boundary |
|
|
81
|
+
| [Contributing](https://github.com/EldritchInc/azathoth/blob/main/CONTRIBUTING.md) | Working on Azathoth itself |
|
|
82
|
+
| [Releasing](https://github.com/EldritchInc/azathoth/blob/main/RELEASING.md) | How a release is validated and published |
|
|
83
|
+
|
|
84
|
+
## Examples
|
|
85
|
+
|
|
86
|
+
The [examples](https://github.com/EldritchInc/azathoth/tree/main/examples)
|
|
87
|
+
are complete, importable workflows, each with its benchmarks and end-to-end
|
|
88
|
+
tests:
|
|
89
|
+
|
|
90
|
+
- **word count**: tools, redundancy, and benchmark cases made from corrected
|
|
91
|
+
runs;
|
|
92
|
+
- **classify sentiment**: the whole lifecycle in one step;
|
|
93
|
+
- **child workflow** and **countdown loop**: composing workflows;
|
|
94
|
+
- **ticket triage**: conditional routing to specialists, and a cheaper
|
|
95
|
+
classifier found by the optimizer;
|
|
96
|
+
- **workflow writer**: a workflow that writes workflows and validates them;
|
|
97
|
+
- **code review**: three concurrent reviewers, merged by code rather than a
|
|
98
|
+
model;
|
|
99
|
+
- **novel**: nested loops that plan, draft, edit and revise a book.
|
|
100
|
+
|
|
101
|
+
## What Azathoth Does
|
|
102
|
+
|
|
103
|
+
- **Composes workflows** from prompt, tool and child-workflow steps. Steps can
|
|
104
|
+
depend on each other, pass values by name, run conditionally, retry, and
|
|
105
|
+
fail in a controlled way.
|
|
106
|
+
- **Separates intent from models.** Steps state requirements, and Azathoth
|
|
107
|
+
chooses from the models you have authorized among those OpenRouter
|
|
108
|
+
currently offers.
|
|
109
|
+
- **Records everything**: every run, step, attempt, prompt, reply, token and
|
|
110
|
+
cost, as durable evidence.
|
|
111
|
+
- **Benchmarks** workflows with exact, normalized, schema and model-judged
|
|
112
|
+
semantic cases.
|
|
113
|
+
- **Optimizes** by trying strictly cheaper authorized models, step by step,
|
|
114
|
+
and ranking candidates on quality, reliability, latency and cost. The
|
|
115
|
+
report shows which model each step of the winner used.
|
|
116
|
+
- **Promotes deliberately.** Production runs only what was explicitly
|
|
117
|
+
promoted, on exact models, with a revision history and an invocation log.
|
|
118
|
+
Optimizing never deploys anything by itself.
|
|
119
|
+
|
|
120
|
+
Azathoth is also a typed Python library. The
|
|
121
|
+
[package READMEs](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md#package-guide)
|
|
122
|
+
document each subsystem.
|
|
123
|
+
|
|
124
|
+
## Design Principles
|
|
125
|
+
|
|
126
|
+
> **Persist what should happen. Compose what can execute. Record what
|
|
127
|
+
> actually happened. Change production deliberately.**
|
|
128
|
+
|
|
129
|
+
- **Evidence over intuition.** A candidate is better only once it has been
|
|
130
|
+
measured as better.
|
|
131
|
+
- **Composition over code.** Workflows are documents; code lives in tools.
|
|
132
|
+
- **Provider independence.** Workflows describe model requirements; providers
|
|
133
|
+
are attached at run time.
|
|
134
|
+
- **Explicit production authority.** Production is what you promoted, not the
|
|
135
|
+
latest optimizer winner or the cheapest model.
|
|
136
|
+
- **Immutable records.** Configuration, runs, evaluations and deployments are
|
|
137
|
+
never rewritten.
|
|
138
|
+
|
|
139
|
+
[Concepts](https://github.com/EldritchInc/azathoth/blob/main/docs/concepts.md)
|
|
140
|
+
explains each of these in depth.
|
|
141
|
+
|
|
142
|
+
## Project Status
|
|
143
|
+
|
|
144
|
+
Azathoth 1.0 supports Python 3.11, 3.12 and 3.13 on Linux, macOS and Windows,
|
|
145
|
+
all tested in CI, with OpenRouter as its model provider.
|
|
146
|
+
|
|
147
|
+
## Support the Project
|
|
148
|
+
|
|
149
|
+
If you find Azathoth useful and would like to support its continued
|
|
150
|
+
development, you can become a patron:
|
|
151
|
+
|
|
152
|
+
**❤️ Patreon:** https://patreon.com/ErisDiscordiaM
|
|
153
|
+
|
|
154
|
+
Your support funds ongoing development, experiments, documentation, testing
|
|
155
|
+
and long-term maintenance.
|
|
156
|
+
|
|
157
|
+
## License
|
|
158
|
+
|
|
159
|
+
Azathoth is licensed under the
|
|
160
|
+
[MIT License](https://github.com/EldritchInc/azathoth/blob/main/LICENSE).
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "azathoth-ai"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "An empirical optimization engine for context-aware AI workflows."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Eris Discordia Montano" }
|
|
14
|
+
]
|
|
15
|
+
keywords = [
|
|
16
|
+
"artificial-intelligence",
|
|
17
|
+
"llm",
|
|
18
|
+
"prompt-optimization",
|
|
19
|
+
"model-routing",
|
|
20
|
+
"evaluation",
|
|
21
|
+
"workflow-optimization"
|
|
22
|
+
]
|
|
23
|
+
classifiers = [
|
|
24
|
+
"Development Status :: 5 - Production/Stable",
|
|
25
|
+
"License :: OSI Approved :: MIT License",
|
|
26
|
+
"Programming Language :: Python :: 3",
|
|
27
|
+
"Programming Language :: Python :: 3.11",
|
|
28
|
+
"Programming Language :: Python :: 3.12",
|
|
29
|
+
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Typing :: Typed"
|
|
31
|
+
]
|
|
32
|
+
dependencies = [
|
|
33
|
+
"httpx>=0.28,<1",
|
|
34
|
+
"jsonschema>=4.18,<5",
|
|
35
|
+
"pydantic>=2",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.urls]
|
|
39
|
+
Homepage = "https://github.com/EldritchInc/azathoth"
|
|
40
|
+
Repository = "https://github.com/EldritchInc/azathoth"
|
|
41
|
+
Issues = "https://github.com/EldritchInc/azathoth/issues"
|
|
42
|
+
Funding = "https://patreon.com/ErisDiscordiaM"
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
azathoth = "azathoth.cli:main"
|
|
46
|
+
|
|
47
|
+
[tool.setuptools]
|
|
48
|
+
package-dir = {"" = "src"}
|
|
49
|
+
|
|
50
|
+
[tool.setuptools.packages.find]
|
|
51
|
+
where = ["src"]
|
|
52
|
+
|
|
53
|
+
[tool.setuptools.package-data]
|
|
54
|
+
azathoth = ["py.typed"]
|
|
55
|
+
|
|
56
|
+
[project.optional-dependencies]
|
|
57
|
+
dev = [
|
|
58
|
+
"build",
|
|
59
|
+
"mypy",
|
|
60
|
+
"pytest",
|
|
61
|
+
"pytest-cov",
|
|
62
|
+
"ruff",
|
|
63
|
+
"setuptools>=68",
|
|
64
|
+
"types-jsonschema",
|
|
65
|
+
"wheel",
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
[tool.pytest.ini_options]
|
|
69
|
+
testpaths = ["tests"]
|
|
70
|
+
addopts = [
|
|
71
|
+
"--strict-markers",
|
|
72
|
+
"--strict-config",
|
|
73
|
+
"-ra",
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
[tool.ruff]
|
|
77
|
+
line-length = 100
|
|
78
|
+
target-version = "py311"
|
|
79
|
+
|
|
80
|
+
[tool.ruff.lint]
|
|
81
|
+
select = [
|
|
82
|
+
"E",
|
|
83
|
+
"F",
|
|
84
|
+
"I",
|
|
85
|
+
"UP",
|
|
86
|
+
"B",
|
|
87
|
+
"SIM",
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
[tool.mypy]
|
|
91
|
+
python_version = "3.11"
|
|
92
|
+
strict = true
|
|
93
|
+
warn_unreachable = true
|
|
94
|
+
pretty = true
|