Current collected state Current
Observed since 21 Oct, 10:25 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ai-decision-council
Multi-model council orchestration with CLI and integration bridge
ai-decision-council is a plug-and-play Python SDK for multi-model council workflows:
Default behavior uses a curated set of 5 models (configurable from 2 to 20).
pip install ai-decision-council
# Use your OpenRouter API key here.
export LLM_COUNCIL_API_KEY="..."
ai-decision-council doctor
ai-decision-council run --prompt "Explain CAP theorem in simple terms"
pip install "ai-decision-council[api]"
export LLM_COUNCIL_API_KEY="..."
export LLM_COUNCIL_REFERENCE_API_TOKEN="replace-with-long-random-token"
ai-decision-council api serve
Then call POST /v1/conversations on http://localhost:8001.
from ai_decision_council import Council
council = Council.from_env()
result = council.run_sync("Summarize vector databases in 5 bullets")
print(result.final_response)
ai-decision-council doctor
ai-decision-council models --defaults
ai-decision-council models --defaults --count 7
ai-decision-council init
ai-decision-council init --api fastapi
ai-decision-council api bootstrap --path .
ai-decision-council api openapi --output ./openapi.json
ai-decision-council api sdk --output-dir ./sdk
ai-decision-council run --prompt "Your prompt" --json
Legacy alias remains supported:
llm-council ...
LLM_COUNCIL_API_KEY (preferred; your OpenRouter API key)LLM_COUNCIL_MODELS (explicit model list)LLM_COUNCIL_MODEL_COUNT (default 5)LLM_COUNCIL_CHAIRMAN_MODELLLM_COUNCIL_TITLE_MODELLLM_COUNCIL_API_URLLLM_COUNCIL_REFERENCE_API_TOKEN (required for packaged API auth)Current provider scope is OpenRouter-first. Fallback key support: OPENROUTER_API_KEY.
docs/quickstart.mddocs/python-integration.mddocs/cli-usage.mddocs/framework-snippets.mddocs/troubleshooting.mddocs/migration.mddocs/openapi.jsonDownload counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0.0 | runtime |
tomliEnvironment{
"extras": "",
"marker": "python_version < \"3.11\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | tomli>=2.0.0; python_version < "3.11" | runtime |
fastapiEnvironment{
"extras": "",
"marker": "extra == \"api\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | fastapi>=0.115.0; extra == "api" | runtime |
pydanticEnvironment{
"extras": "",
"marker": "extra == \"api\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.9.0; extra == "api" | runtime |
uvicornEnvironment{
"extras": "standard",
"marker": "extra == \"api\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | uvicorn[standard]>=0.32.0; extra == "api" | runtime |
fastapiEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | fastapi>=0.115.0; extra == "dev" | runtime |
httpxEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0; extra == "dev" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | mypy>=1.0.0; extra == "dev" | runtime |
pydanticEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.9.0; extra == "dev" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.24.0; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=5.0.0; extra == "dev" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "dev" | runtime |
pyyamlEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pyyaml>=6.0; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.1.0; extra == "dev" | runtime |
tomliEnvironment{
"extras": "",
"marker": "python_version < \"3.11\" and extra == \"dev\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | tomli>=2.0.0; python_version < "3.11" and extra == "dev" | runtime |
sphinxEnvironment{
"extras": "",
"marker": "extra == \"docs\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | sphinx>=7.0.0; extra == "docs" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.24.0; extra == "test" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=5.0.0; extra == "test" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": "<4.0,>=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "test" | runtime |
bdist_wheel · 55.88 KB · Python py3
sdist · 76.14 KB · Python source
Shared repository data · GitHub
Observed since 21 Oct, 10:25 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:f591c6aaefcb03f47323880d5eabc3558692df24b7bfe0cf5c2ea72e02fb4e56