Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions catalog/components.yml
Original file line number Diff line number Diff line change
Expand Up @@ -262,27 +262,27 @@ components:

# Data engines. A project may select at most one provider for each role.
- {id: sqlite, name: SQLite, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15"}
- {id: postgresql, name: PostgreSQL, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15"}
- {id: mysql, name: MySQL, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15"}
- {id: duckdb, name: DuckDB, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15"}
- {id: supabase, name: Supabase, layer: data, tier: platform, roles: [sql, document], python: ">=3.11,<3.15"}
- {id: mongodb, name: MongoDB, layer: data, tier: stable, roles: [document], python: ">=3.11,<3.15"}
- {id: beaver, name: Beaver, layer: data, tier: stable, roles: [document, vector, graph, cache], python: ">=3.12,<3.15"}
- {id: pgvector, name: pgvector, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15"}
- {id: qdrant, name: Qdrant, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15"}
- {id: chroma, name: Chroma, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15"}
- {id: lancedb, name: LanceDB, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15"}
- {id: weaviate, name: Weaviate, layer: data, tier: platform, roles: [vector], python: ">=3.11,<3.15"}
- {id: pinecone, name: Pinecone, layer: data, tier: platform, roles: [vector], python: ">=3.11,<3.15"}
- {id: milvus, name: Milvus, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15"}
- {id: neo4j, name: Neo4j, layer: data, tier: stable, roles: [graph], python: ">=3.11,<3.15"}
- {id: redis, name: Redis, layer: data, tier: stable, roles: [cache], python: ">=3.11,<3.15"}
- {id: postgresql, name: PostgreSQL, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15", packages: ["psycopg[binary]>=3.3.4,<4"]}
- {id: mysql, name: MySQL, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15", packages: ["pymysql>=1.2.0,<2"]}
- {id: duckdb, name: DuckDB, layer: data, tier: stable, roles: [sql], python: ">=3.11,<3.15", packages: ["duckdb>=1.5.5,<2", "duckdb-engine>=0.17.0,<1"]}
- {id: supabase, name: Supabase, layer: data, tier: platform, roles: [sql, document], python: ">=3.11,<3.15", packages: ["supabase>=2.31.0,<3"]}
- {id: mongodb, name: MongoDB, layer: data, tier: stable, roles: [document], python: ">=3.11,<3.15", packages: ["pymongo>=4.17.0,<5"]}
- {id: beaver, name: Beaver, layer: data, tier: stable, roles: [document, vector, graph, cache], python: ">=3.12,<3.15", packages: ["beaver-db>=2.3.0,<3"]}
- {id: pgvector, name: pgvector, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15", packages: ["pgvector>=0.5.0,<1"]}
- {id: qdrant, name: Qdrant, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15", packages: ["qdrant-client>=1.19.0,<2"]}
- {id: chroma, name: Chroma, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15", packages: ["chromadb>=1.5.9,<2"]}
- {id: lancedb, name: LanceDB, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15", packages: ["lancedb>=0.36.0,<1"]}
- {id: weaviate, name: Weaviate, layer: data, tier: platform, roles: [vector], python: ">=3.11,<3.15", packages: ["weaviate-client>=4.22.0,<5"]}
- {id: pinecone, name: Pinecone, layer: data, tier: platform, roles: [vector], python: ">=3.11,<3.15", packages: ["pinecone>=9.1.0,<10"]}
- {id: milvus, name: Milvus, layer: data, tier: stable, roles: [vector], python: ">=3.11,<3.15", packages: ["pymilvus>=3.0.1,<4"]}
- {id: neo4j, name: Neo4j, layer: data, tier: stable, roles: [graph], python: ">=3.11,<3.15", packages: ["neo4j>=6.2.0,<7"]}
- {id: redis, name: Redis, layer: data, tier: stable, roles: [cache], python: ">=3.11,<3.15", packages: ["redis>=8.1.0,<9"]}

- {id: sqlmodel, name: SQLModel, layer: sql_abstraction, tier: stable, python: ">=3.11,<3.15"}
- {id: sqlalchemy, name: SQLAlchemy, layer: sql_abstraction, tier: stable, python: ">=3.11,<3.15"}
- {id: sqlmodel, name: SQLModel, layer: sql_abstraction, tier: stable, python: ">=3.11,<3.15", packages: ["sqlmodel>=0.0.39,<0.1", "sqlalchemy>=2.0.51,<3", "alembic>=1.19.1,<2"]}
- {id: sqlalchemy, name: SQLAlchemy, layer: sql_abstraction, tier: stable, python: ">=3.11,<3.15", packages: ["sqlalchemy>=2.0.51,<3", "alembic>=1.19.1,<2"]}
- {id: api-key, name: API key, layer: auth, tier: stable, python: ">=3.11,<3.15"}
- {id: oidc, name: OAuth / OIDC, layer: auth, tier: platform, python: ">=3.11,<3.15"}
- {id: supabase-auth, name: Supabase Auth, layer: auth, tier: platform, python: ">=3.11,<3.15"}
- {id: oidc, name: OAuth / OIDC, layer: auth, tier: platform, python: ">=3.11,<3.15", packages: ["authlib>=1.7.2,<2"]}
- {id: supabase-auth, name: Supabase Auth, layer: auth, tier: platform, python: ">=3.11,<3.15", packages: ["supabase>=2.31.0,<3"]}

- {id: bentoml, name: BentoML, layer: serving, tier: stable, python: ">=3.11,<3.15"}
- {id: litellm, name: LiteLLM, layer: serving, tier: stable, python: ">=3.11,<3.15"}
Expand Down
80 changes: 61 additions & 19 deletions catalog/generated/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,9 @@
"roles": [
"sql"
],
"packages": []
"packages": [
"psycopg[binary]>=3.3.4,<4"
]
},
{
"id": "mysql",
Expand All @@ -793,7 +795,9 @@
"roles": [
"sql"
],
"packages": []
"packages": [
"pymysql>=1.2.0,<2"
]
},
{
"id": "duckdb",
Expand All @@ -805,7 +809,10 @@
"roles": [
"sql"
],
"packages": []
"packages": [
"duckdb>=1.5.5,<2",
"duckdb-engine>=0.17.0,<1"
]
},
{
"id": "supabase",
Expand All @@ -818,7 +825,9 @@
"sql",
"document"
],
"packages": []
"packages": [
"supabase>=2.31.0,<3"
]
},
{
"id": "mongodb",
Expand All @@ -830,7 +839,9 @@
"roles": [
"document"
],
"packages": []
"packages": [
"pymongo>=4.17.0,<5"
]
},
{
"id": "beaver",
Expand All @@ -845,7 +856,9 @@
"graph",
"cache"
],
"packages": []
"packages": [
"beaver-db>=2.3.0,<3"
]
},
{
"id": "pgvector",
Expand All @@ -857,7 +870,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"pgvector>=0.5.0,<1"
]
},
{
"id": "qdrant",
Expand All @@ -869,7 +884,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"qdrant-client>=1.19.0,<2"
]
},
{
"id": "chroma",
Expand All @@ -881,7 +898,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"chromadb>=1.5.9,<2"
]
},
{
"id": "lancedb",
Expand All @@ -893,7 +912,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"lancedb>=0.36.0,<1"
]
},
{
"id": "weaviate",
Expand All @@ -905,7 +926,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"weaviate-client>=4.22.0,<5"
]
},
{
"id": "pinecone",
Expand All @@ -917,7 +940,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"pinecone>=9.1.0,<10"
]
},
{
"id": "milvus",
Expand All @@ -929,7 +954,9 @@
"roles": [
"vector"
],
"packages": []
"packages": [
"pymilvus>=3.0.1,<4"
]
},
{
"id": "neo4j",
Expand All @@ -941,7 +968,9 @@
"roles": [
"graph"
],
"packages": []
"packages": [
"neo4j>=6.2.0,<7"
]
},
{
"id": "redis",
Expand All @@ -953,7 +982,9 @@
"roles": [
"cache"
],
"packages": []
"packages": [
"redis>=8.1.0,<9"
]
},
{
"id": "sqlmodel",
Expand All @@ -963,7 +994,11 @@
"python": ">=3.11,<3.15",
"workloads": [],
"roles": [],
"packages": []
"packages": [
"sqlmodel>=0.0.39,<0.1",
"sqlalchemy>=2.0.51,<3",
"alembic>=1.19.1,<2"
]
},
{
"id": "sqlalchemy",
Expand All @@ -973,7 +1008,10 @@
"python": ">=3.11,<3.15",
"workloads": [],
"roles": [],
"packages": []
"packages": [
"sqlalchemy>=2.0.51,<3",
"alembic>=1.19.1,<2"
]
},
{
"id": "api-key",
Expand All @@ -993,7 +1031,9 @@
"python": ">=3.11,<3.15",
"workloads": [],
"roles": [],
"packages": []
"packages": [
"authlib>=1.7.2,<2"
]
},
{
"id": "supabase-auth",
Expand All @@ -1003,7 +1043,9 @@
"python": ">=3.11,<3.15",
"workloads": [],
"roles": [],
"packages": []
"packages": [
"supabase>=2.31.0,<3"
]
},
{
"id": "bentoml",
Expand Down
16 changes: 15 additions & 1 deletion copier.yml
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ sql_abstraction:
choices:
SQLModel + Alembic: sqlmodel
SQLAlchemy + Alembic: sqlalchemy
when: "{{ sql_store != 'none' }}"
when: "{{ sql_store not in ['none', 'supabase'] }}"

document_store:
type: str
Expand Down Expand Up @@ -381,6 +381,12 @@ cache_store:
Beaver local bundle: beaver
Redis: redis

data_config:
type: bool
default: >-
{{ sql_store != 'none' or document_store != 'none' or vector_store != 'none' or graph_store != 'none' or cache_store != 'none' }}
when: false

auth:
type: str
help: Authentication strategy
Expand All @@ -392,6 +398,14 @@ auth:
Supabase Auth: supabase-auth
when: "{{ workload in ['api', 'web', 'mcp', 'agent', 'rag', 'inference', 'hybrid'] }}"

# Internal derived switch used in template paths. Keeping this expression out
# of filenames avoids the Windows 260-character checkout limit.
runtime_config:
type: bool
default: >-
{{ ai_capabilities != 'none' or sql_store != 'none' or document_store != 'none' or vector_store != 'none' or graph_store != 'none' or cache_store != 'none' or auth != 'none' }}
when: false

serving:
type: str
help: Model serving engine
Expand Down
5 changes: 3 additions & 2 deletions scripts/compile_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ def build_artifacts(
" + ([model_provider] if ai_capabilities in ['agents', 'rag', 'inference'] else [])",
" + ([embedding_provider] if ai_capabilities == 'rag' else [])",
" + [sql_store, document_store, vector_store, graph_store, cache_store]",
" + [sql_abstraction | default('none', true), auth | default('none', true)]",
" + ([sql_abstraction | default('none', true)] if sql_store not in ['none', 'supabase'] else [])",
" + [auth | default('none', true)]",
" + [serving | default('none', true)]",
" + (training_extensions | default([]))",
" + (mlops_tools | default([]))",
Expand All @@ -177,7 +178,7 @@ def build_artifacts(
"{%- endif -%}",
"{%- endfor -%}",
"{%- endfor %}",
"{%- if ai_capabilities != 'none' or sql_store != 'none' or document_store != 'none' or auth | default('none', true) != 'none' %}",
"{%- if ai_capabilities != 'none' or sql_store != 'none' or document_store != 'none' or vector_store != 'none' or graph_store != 'none' or cache_store != 'none' or auth | default('none', true) != 'none' %}",
' "pydantic>=2.13.4,<3",',
' "pydantic-settings>=2.15.0,<3",',
"{%- endif %}",
Expand Down
7 changes: 4 additions & 3 deletions template/_catalog_dependencies.jinja
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{# Generated by scripts/compile_catalog.py. Do not edit. #}
{%- set component_packages = {"ag2": ["ag2>=1.0.1,<2"], "agno": ["agno>=2.8.7,<3"], "anthropic": ["anthropic>=0.121.0,<1"], "autogen": ["autogen-agentchat>=0.7.5,<1"], "azure-openai": ["openai>=2.53.0,<3"], "bedrock": ["boto3>=1.43.67,<2"], "chainlit": ["chainlit>=2.11.1,<3"], "cohere": ["cohere>=7.0.8,<8"], "crewai": ["crewai>=1.15.13,<2"], "deepseek": ["openai>=2.53.0,<3"], "dspy": ["dspy>=3.3.0,<4"], "fastapi": ["fastapi[standard]>=0.141.1,<1", "pydantic>=2.13.4,<3", "uvicorn>=0.52.1,<1"], "fasthtml": ["python-fasthtml>=0.14.11,<0.15"], "fastmcp": ["fastmcp>=3.4.6,<4"], "fireworks": ["fireworks-ai>=1.2.6,<2"], "flask": ["flask>=3.1.2,<4"], "gemini": ["google-genai>=2.17.0,<3"], "google-adk": ["google-adk>=2.6.3,<3"], "gradio": ["gradio>=6.22.0,<7"], "groq": ["groq>=1.6.0,<2"], "haystack": ["haystack-ai>=3.0.0,<4"], "huggingface": ["huggingface-hub>=1.27.0,<2"], "jupyterlab": ["jupyterlab>=4.6.2,<5"], "langchain": ["langchain>=1.3.14,<2"], "langgraph": ["langgraph>=1.2.10,<2"], "lingo": ["lingo-ai>=2.1.0,<3"], "llamaindex": ["llama-index>=0.14.23,<0.15"], "mistral": ["mistralai>=2.9.1,<3"], "nicegui": ["nicegui>=3.15.0,<4"], "ollama": ["ollama>=0.6.2,<1"], "openai": ["openai>=2.53.0,<3"], "openai-agents": ["openai-agents>=0.19.4,<1"], "openai-compatible": ["openai>=2.53.0,<3"], "openrouter": ["openrouter>=1.1.37,<2"], "pydantic-ai": ["pydantic-ai>=2.27.0,<3"], "sentence-transformers": ["sentence-transformers>=5.7.0,<6"], "smolagents": ["smolagents>=1.26.0,<2"], "strands-agents": ["strands-agents>=1.51.0,<2"], "streamlit": ["streamlit>=1.61.1,<2"], "textual": ["textual>=8.2.8,<9"], "together": ["together>=2.30.0,<3"], "typer": ["typer>=0.27.1,<1"], "violetear": ["violetear[server]>=1.4.1,<2"], "xai": ["xai-sdk>=1.17.0,<2"]} -%}
{%- set component_packages = {"ag2": ["ag2>=1.0.1,<2"], "agno": ["agno>=2.8.7,<3"], "anthropic": ["anthropic>=0.121.0,<1"], "autogen": ["autogen-agentchat>=0.7.5,<1"], "azure-openai": ["openai>=2.53.0,<3"], "beaver": ["beaver-db>=2.3.0,<3"], "bedrock": ["boto3>=1.43.67,<2"], "chainlit": ["chainlit>=2.11.1,<3"], "chroma": ["chromadb>=1.5.9,<2"], "cohere": ["cohere>=7.0.8,<8"], "crewai": ["crewai>=1.15.13,<2"], "deepseek": ["openai>=2.53.0,<3"], "dspy": ["dspy>=3.3.0,<4"], "duckdb": ["duckdb>=1.5.5,<2", "duckdb-engine>=0.17.0,<1"], "fastapi": ["fastapi[standard]>=0.141.1,<1", "pydantic>=2.13.4,<3", "uvicorn>=0.52.1,<1"], "fasthtml": ["python-fasthtml>=0.14.11,<0.15"], "fastmcp": ["fastmcp>=3.4.6,<4"], "fireworks": ["fireworks-ai>=1.2.6,<2"], "flask": ["flask>=3.1.2,<4"], "gemini": ["google-genai>=2.17.0,<3"], "google-adk": ["google-adk>=2.6.3,<3"], "gradio": ["gradio>=6.22.0,<7"], "groq": ["groq>=1.6.0,<2"], "haystack": ["haystack-ai>=3.0.0,<4"], "huggingface": ["huggingface-hub>=1.27.0,<2"], "jupyterlab": ["jupyterlab>=4.6.2,<5"], "lancedb": ["lancedb>=0.36.0,<1"], "langchain": ["langchain>=1.3.14,<2"], "langgraph": ["langgraph>=1.2.10,<2"], "lingo": ["lingo-ai>=2.1.0,<3"], "llamaindex": ["llama-index>=0.14.23,<0.15"], "milvus": ["pymilvus>=3.0.1,<4"], "mistral": ["mistralai>=2.9.1,<3"], "mongodb": ["pymongo>=4.17.0,<5"], "mysql": ["pymysql>=1.2.0,<2"], "neo4j": ["neo4j>=6.2.0,<7"], "nicegui": ["nicegui>=3.15.0,<4"], "oidc": ["authlib>=1.7.2,<2"], "ollama": ["ollama>=0.6.2,<1"], "openai": ["openai>=2.53.0,<3"], "openai-agents": ["openai-agents>=0.19.4,<1"], "openai-compatible": ["openai>=2.53.0,<3"], "openrouter": ["openrouter>=1.1.37,<2"], "pgvector": ["pgvector>=0.5.0,<1"], "pinecone": ["pinecone>=9.1.0,<10"], "postgresql": ["psycopg[binary]>=3.3.4,<4"], "pydantic-ai": ["pydantic-ai>=2.27.0,<3"], "qdrant": ["qdrant-client>=1.19.0,<2"], "redis": ["redis>=8.1.0,<9"], "sentence-transformers": ["sentence-transformers>=5.7.0,<6"], "smolagents": ["smolagents>=1.26.0,<2"], "sqlalchemy": ["sqlalchemy>=2.0.51,<3", "alembic>=1.19.1,<2"], "sqlmodel": ["sqlmodel>=0.0.39,<0.1", "sqlalchemy>=2.0.51,<3", "alembic>=1.19.1,<2"], "strands-agents": ["strands-agents>=1.51.0,<2"], "streamlit": ["streamlit>=1.61.1,<2"], "supabase": ["supabase>=2.31.0,<3"], "supabase-auth": ["supabase>=2.31.0,<3"], "textual": ["textual>=8.2.8,<9"], "together": ["together>=2.30.0,<3"], "typer": ["typer>=0.27.1,<1"], "violetear": ["violetear[server]>=1.4.1,<2"], "weaviate": ["weaviate-client>=4.22.0,<5"], "xai": ["xai-sdk>=1.17.0,<2"]} -%}
{%- set selected_components = [framework]
+ (interfaces | default([]))
+ ([model_provider] if ai_capabilities in ['agents', 'rag', 'inference'] else [])
+ ([embedding_provider] if ai_capabilities == 'rag' else [])
+ [sql_store, document_store, vector_store, graph_store, cache_store]
+ [sql_abstraction | default('none', true), auth | default('none', true)]
+ ([sql_abstraction | default('none', true)] if sql_store not in ['none', 'supabase'] else [])
+ [auth | default('none', true)]
+ [serving | default('none', true)]
+ (training_extensions | default([]))
+ (mlops_tools | default([]))
Expand All @@ -19,7 +20,7 @@
{%- endif -%}
{%- endfor -%}
{%- endfor %}
{%- if ai_capabilities != 'none' or sql_store != 'none' or document_store != 'none' or auth | default('none', true) != 'none' %}
{%- if ai_capabilities != 'none' or sql_store != 'none' or document_store != 'none' or vector_store != 'none' or graph_store != 'none' or cache_store != 'none' or auth | default('none', true) != 'none' %}
"pydantic>=2.13.4,<3",
"pydantic-settings>=2.15.0,<3",
{%- endif %}
Expand Down
Loading