Week 1 additions - #24
Conversation
…ion, Fine-Tuning, and Local Dev sections
|
Too much diff to scan? Review this PR in Change Stack to start with the highest-impact changes. 📝 WalkthroughWalkthroughThe PR expands the AI toolkit catalog by updating the table of contents, adding new tool entries to nine existing category tables, and introducing two new documentation sections for MCP Tools & Servers and Voice AI & Speech Tools. ChangesDocumentation Expansion
Estimated Code Review Effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly Related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (1)
README.md (1)
153-155: ⚡ Quick winRemove extra blank line for consistency.
There are two consecutive blank lines (154-155) before the new "MCP Tools & Servers" section. For consistency with the rest of the document, use a single blank line between sections.
📝 Proposed fix
| [Scrapling](https://github.com/D4Vinci/Scrapling) | Adaptive web scraping framework with stealth mode, anti-bot bypass, and built-in MCP server support | Python | BSD-3 | - ### MCP Tools & Servers🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@README.md` around lines 153 - 155, Remove the extra blank line between the Scrapling table row and the "MCP Tools & Servers" section in README.md so there is only a single blank line separating sections; locate the table row containing "[Scrapling](https://github.com/D4Vinci/Scrapling)" and the following "MCP Tools & Servers" header and delete the extra empty line to match the document's section spacing conventions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@README.md`:
- Line 66: The README contains a duplicate listing for "Outlines" (the markdown
row with the link https://github.com/dottxt-ai/outlines) in both the
"Orchestration & Workflows" section and the "Structured Generation" section;
remove the duplicate by keeping the entry in the most appropriate section
(suggest keeping the table row in "Structured Generation") and delete the other
row, or alternatively replace the removed row with a one-line cross-reference
note pointing readers to the "Structured Generation" section and the same
repository link to avoid confusion and reduce maintenance.
- Line 65: The README contains duplicate/incorrect GitHub links for "Instructor"
(the markdown link [Instructor](https://github.com/jxnl/instructor) in the
table) that both resolve to the same repository; replace the non-canonical
URL(s) with the canonical org URL (e.g., https://github.com/567-labs/instructor)
so the README uses a single canonical link for Instructor, and optionally add a
short parenthetical note like "(moved from jxnl)" next to the link to indicate
the org transfer; update all occurrences of the markdown link text "Instructor"
in the README to the canonical URL to remove confusion.
- Line 254: Update the Gemma entry in the README table row (the line containing
"Gemma" and its description) to scope audio support to specific variants;
replace the current "text, images, video, and audio" phrasing with something
like "text, images, video; audio (E2B/E4B variants only)" or "text, images,
video; audio supported only in E2B/E4B variants" so it accurately reflects that
audio is not supported across all Gemma 4 models.
- Around line 24-25: The URL-check script currently only hits a subset of new
tools (examples: n8n, Instructor, Outlines, Pathway, MarkItDown, LightRAG,
RAGatouille, Cognita, Kotaemon, Memvid, Promptfoo, Braintrust, AgentBench, MCP
Python/TypeScript SDKs, Context7, Pipecat, Whisper, Kokoro); update it to
iterate over all 46 newly added tool links present in the README and validate
each URL. Locate the curl script (the URL-check loop) and replace the current
hard-coded subset with a single source-of-truth list that includes every new
link from the README, ensure the script treats non-200 responses as failures
(exit non-zero) and log the URL plus HTTP status for any failures so CI will
catch broken links.
- Line 178: Update the Coqui TTS row in the README table (the table cell
containing "Coqui TTS" / "1000+ pre-trained models") to match Coqui's cited
wording: replace the fixed "1000+ pre-trained models" claim with a sourced
phrase such as "pretrained models in 1,100+ languages" or "pretrained models
across 1,100+ languages", or alternatively compute and display the exact count
by calling Coqui's catalog listing (e.g., TTS().list_models() / --list_models)
and using that number; keep the existing Whisper ("680k hours") and Kokoro ("82M
parameters") entries unchanged.
- Line 64: Update the README table entries for the projects: replace the license
label for the n8n row (the table cell containing "n8n" and "Sustainable Use")
with "Sustainable Use License v1.0 (SPDX: SUL-1.0)" and replace the license
label for the Pathway row (the table cell containing "Pathway" and "BSL") with
"BSL 1.1 (Business Source License 1.1)"; ensure you only change the license text
for the rows containing the project names n8n and Pathway so formatting of the
table remains intact.
---
Nitpick comments:
In `@README.md`:
- Around line 153-155: Remove the extra blank line between the Scrapling table
row and the "MCP Tools & Servers" section in README.md so there is only a single
blank line separating sections; locate the table row containing
"[Scrapling](https://github.com/D4Vinci/Scrapling)" and the following "MCP Tools
& Servers" header and delete the extra empty line to match the document's
section spacing conventions.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| - [MCP Tools & Servers](#mcp-tools--servers) | ||
| - [Voice AI & Speech Tools](#voice-ai--speech-tools) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Validate URLs from newly added tools
# Checking HTTP status codes for accessibility
echo "Checking Orchestration & Workflows additions..."
curl -s -o /dev/null -w "%{http_code} - n8n\n" -L https://github.com/n8n-io/n8n
curl -s -o /dev/null -w "%{http_code} - Instructor\n" -L https://github.com/jxnl/instructor
curl -s -o /dev/null -w "%{http_code} - Outlines\n" -L https://github.com/dottxt-ai/outlines
curl -s -o /dev/null -w "%{http_code} - Pathway\n" -L https://github.com/pathwaycom/pathway
echo -e "\nChecking PDF Extraction additions..."
curl -s -o /dev/null -w "%{http_code} - MarkItDown\n" -L https://github.com/microsoft/markitdown
echo -e "\nChecking RAG additions..."
curl -s -o /dev/null -w "%{http_code} - LightRAG\n" -L https://github.com/HKUDS/LightRAG
curl -s -o /dev/null -w "%{http_code} - RAGatouille\n" -L https://github.com/AnswerDotAI/RAGatouille
curl -s -o /dev/null -w "%{http_code} - Cognita\n" -L https://github.com/truefoundry/cognita
curl -s -o /dev/null -w "%{http_code} - Kotaemon\n" -L https://github.com/Cinnamon/kotaemon
curl -s -o /dev/null -w "%{http_code} - Memvid\n" -L https://github.com/memvid/memvid
echo -e "\nChecking Evaluation & Testing additions..."
curl -s -o /dev/null -w "%{http_code} - Promptfoo\n" -L https://github.com/promptfoo/promptfoo
curl -s -o /dev/null -w "%{http_code} - Braintrust\n" -L https://github.com/braintrustdata/braintrust-sdk-javascript
curl -s -o /dev/null -w "%{http_code} - AgentBench\n" -L https://github.com/THUDM/AgentBench
echo -e "\nChecking MCP Tools (sample)..."
curl -s -o /dev/null -w "%{http_code} - MCP Python SDK\n" -L https://github.com/modelcontextprotocol/python-sdk
curl -s -o /dev/null -w "%{http_code} - MCP TypeScript SDK\n" -L https://github.com/modelcontextprotocol/typescript-sdk
curl -s -o /dev/null -w "%{http_code} - Context7\n" -L https://github.com/upstash/context7
echo -e "\nChecking Voice AI additions (sample)..."
curl -s -o /dev/null -w "%{http_code} - Pipecat\n" -L https://github.com/pipecat-ai/pipecat
curl -s -o /dev/null -w "%{http_code} - Whisper\n" -L https://github.com/openai/whisper
curl -s -o /dev/null -w "%{http_code} - Kokoro\n" -L https://github.com/hexgrad/kokoro
echo -e "\n=== Expecting 200 or 3xx status codes ==="Repository: Sumanth077/ai-engineering-toolkit
Length of output: 650
Extend URL accessibility checks to cover all 46 newly added tool links (not just the sample).
The current curl script covers a subset of tools (n8n, Instructor, Outlines, Pathway, MarkItDown, LightRAG, RAGatouille, Cognita, Kotaemon, Memvid, Promptfoo, Braintrust, AgentBench, MCP Python/TypeScript SDKs, Context7, Pipecat, Whisper, Kokoro) and all of those return HTTP 200. The PR request is still incomplete because the script does not validate the remaining newly added tool URLs—extend it to include every new entry.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` around lines 24 - 25, The URL-check script currently only hits a
subset of new tools (examples: n8n, Instructor, Outlines, Pathway, MarkItDown,
LightRAG, RAGatouille, Cognita, Kotaemon, Memvid, Promptfoo, Braintrust,
AgentBench, MCP Python/TypeScript SDKs, Context7, Pipecat, Whisper, Kokoro);
update it to iterate over all 46 newly added tool links present in the README
and validate each URL. Locate the curl script (the URL-check loop) and replace
the current hard-coded subset with a single source-of-truth list that includes
every new link from the README, ensure the script treats non-200 responses as
failures (exit non-zero) and log the URL plus HTTP status for any failures so CI
will catch broken links.
| | [Flowise](https://github.com/FlowiseAI/Flowise) | Drag-and-drop UI for creating LLM chains and agents | TypeScript | MIT | | ||
| | [Promptflow](https://github.com/microsoft/promptflow) | Workflow orchestration for LLM pipelines, evaluation, and deployment | Python | MIT | | ||
| | [Dify](https://github.com/langgenius/dify) | Production-ready open source platform combining RAG pipelines, agent capabilities, model management, and observability in one UI | TypeScript/Python | Apache-2.0 | | ||
| | [n8n](https://github.com/n8n-io/n8n) | Workflow automation platform with native LLM and AI agent node support for building agentic pipelines | TypeScript | Sustainable Use | |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify licenses for n8n and Pathway
echo "=== Checking n8n license ==="
gh repo view n8n-io/n8n --json licenseInfo
echo -e "\n=== Checking Pathway license ==="
gh repo view pathwaycom/pathway --json licenseInfo
echo -e "\n=== Fetching license file content for n8n ==="
gh api repos/n8n-io/n8n/license --jq '.license.name, .license.spdx_id'
echo -e "\n=== Fetching license file content for Pathway ==="
gh api repos/pathwaycom/pathway/license --jq '.license.name, .license.spdx_id'Repository: Sumanth077/ai-engineering-toolkit
Length of output: 396
🏁 Script executed:
#!/bin/bash
set -euo pipefail
decode_b64() {
python3 - <<'PY'
import sys, base64
data=sys.stdin.read().strip()
if data:
print(base64.b64decode(data).decode('utf-8', errors='replace'))
PY
}
try_repo_license() {
local owner="$1" repo="$2" label="$3"
echo "=== $label ($owner/$repo) ==="
candidates=(
"LICENSE"
"LICENSE.txt"
"LICENSE.md"
"COPYING"
"COPYING.txt"
"COPYRIGHT"
"COPYRIGHT.txt"
"NOTICE"
"COPYRIGHT.md"
"SUSTAINABLE_USE_LICENSE"
"SUSTAINABLE_USE_LICENSE.txt"
"BUSINESS_SOURCE_LICENSE"
"BSL"
"LICENSE-LONG"
)
found=0
for p in "${candidates[@]}"; do
# If the endpoint 404s, gh exits non-zero; capture and continue.
content="$(gh api "repos/${owner}/${repo}/contents/${p}" --jq '.content' 2>/dev/null || true)"
if [[ -n "${content}" && "${content}" != "null" ]]; then
name="$(gh api "repos/${owner}/${repo}/contents/${p}" --jq '.name' 2>/dev/null || true)"
path="$(gh api "repos/${owner}/${repo}/contents/${p}" --jq '.path' 2>/dev/null || true)"
echo "--- Found candidate: ${name:-$p} (${path:-$p}) ---"
echo "${content}" | decode_b64 > /tmp/license_${owner}_${repo}.txt
echo "--- License header keywords ---"
# Show a small snippet around common markers.
python3 - <<'PY'
import re
text=open('/tmp/license_' + '${owner}' + '_' + '${repo}' + '.txt','r',errors='replace').read()
patterns=[
r'Sustainable Use',
r'Business Source License',
r'BSL(\s*1\.1)?',
r'BSL\s*1\.1',
r'Version\s*1\.1',
r'License.*(Agreement|Agreement:|Terms)',
r'Copyright',
]
for pat in patterns:
m=re.search(pat, text, flags=re.IGNORECASE)
if m:
start=max(0,m.start()-120); end=min(len(text), m.end()+180)
snippet=text[start:end].replace('\n',' ')
print(f'[{pat}] {snippet[:500]}')
break
else:
print("No common markers found in extracted text snippet.")
PY
found=1
break
fi
done
if [[ $found -eq 0 ]]; then
echo "No known LICENSE candidate file found via tried paths."
fi
echo
}
# n8n
try_repo_license "n8n-io" "n8n" "n8n license file"
# Pathway
try_repo_license "pathwaycom" "pathway" "Pathway license file"Repository: Sumanth077/ai-engineering-toolkit
Length of output: 613
🏁 Script executed:
#!/bin/bash
set -euo pipefail
decode_b64_to_text() {
python3 - <<'PY'
import sys, base64
b64=sys.stdin.read().strip()
if not b64:
sys.exit(0)
data=base64.b64decode(b64)
print(data.decode('utf-8', errors='replace'))
PY
}
extract_license_snippet() {
# Reads base64 from stdin
python3 - <<'PY'
import sys, base64, re
b64=sys.stdin.read().strip()
if not b64:
sys.exit(0)
text=base64.b64decode(b64).decode('utf-8', errors='replace')
patterns=[
r'Sustainable Use',
r'Business Source License',
r'\bBSL\b',
r'BSL\s*1\.1',
r'License\s*Agreement',
r'OPEN SOURCE LICENSE',
r'Server Side Public License',
r'SSPL',
r'Mozilla Public License',
r'AGPL',
r'Affero',
]
for pat in patterns:
m=re.search(pat, text, flags=re.IGNORECASE)
if m:
start=max(0, m.start()-200)
end=min(len(text), m.end()+400)
snippet=text[start:end].replace('\n',' ')
print(snippet[:1200])
sys.exit(0)
print(text[:1200].replace('\n',' '))
PY
}
show_repo_root_license_candidates() {
local owner="$1" repo="$2"
gh api "repos/${owner}/${repo}/contents" --paginate --jq '
map(select(.type=="file"))
| map({name:.name, path:.path})
| map(select((.name|ascii_downcase|test("license|copying|sustainable|bsl|sspl|copyright"))))
| .'
}
try_fetch_paths_and_snip() {
local owner="$1" repo="$2" label="$3"
echo "=== ${label} (${owner}/${repo}) ==="
candidates_json="$(show_repo_root_license_candidates "$owner" "$repo" || true)"
# Print candidates (if any) as lines "path"
echo "$candidates_json" | python3 - <<'PY'
import sys, json
s=sys.stdin.read().strip()
if not s:
print("No root candidates output.")
sys.exit(0)
try:
arr=json.loads(s)
except Exception as e:
print("Failed to parse candidates JSON:", e)
sys.exit(0)
if not arr:
print("No matching license-like files found in repo root.")
else:
print("Root license-like candidates:")
for x in arr:
print(" -", x.get("path"))
PY
# Iterate candidates
paths="$(echo "$candidates_json" | python3 - <<'PY'
import sys, json
s=sys.stdin.read().strip()
if not s:
sys.exit(0)
arr=json.loads(s)
for x in arr:
print(x.get("path",""))
PY
)"
if [[ -n "${paths}" ]]; then
while IFS= read -r p; do
[[ -z "$p" ]] && continue
echo
echo "--- Fetching license content: ${p} ---"
b64="$(gh api "repos/${owner}/${repo}/contents/${p}" --jq '.content' 2>/dev/null || true)"
if [[ -z "$b64" || "$b64" == "null" ]]; then
echo "Could not fetch base64 content for ${p}"
continue
fi
echo "$b64" | extract_license_snippet
done <<< "$paths"
return 0
fi
echo
echo "--- Fallback: GitHub /license endpoint raw JSON (may be 'Other/NOASSERTION') ---"
gh api "repos/${owner}/${repo}/license" --jq '.'
}
try_fetch_paths_and_snip "n8n license file" "n8n-io" "n8n"
try_fetch_paths_and_snip "Pathway license file" "pathwaycom" "pathway"Repository: Sumanth077/ai-engineering-toolkit
Length of output: 432
🌐 Web query:
n8n Sustainable Use license official repository license name
💡 Result:
n8n’s “Sustainable Use License” official repository license name is “Sustainable Use License” (Version 1.0), with the license file using the heading “Sustainable Use License” and “Version 1.0” [1][2]. Additionally, the license has an SPDX identifier published as “SUL-1.0” / “Sustainable Use License v1.0” [3].
Citations:
- 1: https://github.com/n8n-io/n8n/blob/07b53430f9e9efefaa78d90d3a613d5518ede4e5/LICENSE.md
- 2: https://docs.n8n.io/sustainable-use-license/
- 3: https://spdx.org/licenses/SUL-1.0.html
🌐 Web query:
pathwaycom pathway license Business Source License version 1.1
💡 Result:
Pathway utilizes the Business Source License (BSL) version 1.1 for its software, as specified in its official licensing terms [1][2][3]. The BSL 1.1 is not an open-source license but is a parameterized license often used by companies to manage commercialization before eventually transitioning software to an open-source license [4][5]. Key details regarding Pathway's implementation of the BSL 1.1 include: - Licensor: The license identifies NavAlgo SAS as the licensor and owner of the copyrighted work [1][2]. - Nature of License: The software is provided under the BSL 1.1, which includes an Additional Use Grant [1][2]. This grant allows for production use at no cost, subject to specific conditions such as restrictions on the number of machines, worker threads, and processes, as well as exclusions for certain types of services (e.g., Stream Data Processing Services) [1][2]. - Conversion to Open Source: According to Pathway's licensing documentation, the software is intended to eventually transition to an open-source license (specifically citing Apache 2.0) after a period of four years from the date of publication [4][3]. - Compliance: Users are required to adhere to the restrictions defined in the LICENSE.txt file included with the software distributions [1][2]. Modifying or circumventing license keys or resource-limiting functionality is prohibited [1]. For authoritative information, you can review the full license text and specific usage guidelines directly on the official Pathway website [2][3].
Citations:
- 1: https://github.com/pathwaycom/pathway/blob/main/LICENSE.txt
- 2: https://pathway.com/license
- 3: https://pathway.com/developers/templates/licensing-guide
- 4: https://spdx.github.io/license-list-data/BUSL-1.1.html
- 5: https://mariadb.com/bsl11/
🌐 Web query:
site:github.com/pathwaycom/pathway BSL 1.1 LICENSE
💡 Result:
BSL 1.1 (Business Source License 1.1) is a “source-available” license that, unlike standard OSI open-source licenses, grants you additional rights to use the licensed work (including in production) only under specific conditions, and then transitions to an open-source license after a stated change/transition point. In the Pathway project, the repository states that Pathway is distributed on a BSL 1.1 License and that the license “allows for unlimited non-commercial use, as well as use … for most commercial purposes” free of charge, and that the code automatically converts to an open-source (Apache 2.0) license after 4 years [1]. The BSL 1.1 license text in Pathway’s LICENSE.txt describes the structure of the grant. In particular, it contains an “Additional Use Grant” allowing the licensee to run the software “in production use, at no cost” subject to conditions such as: - one-machine limitation per single installation (physical or virtual) [2] - limits related to “Stream Data Processing Service” and use of “modified or derivative” licensed work, including restrictions around license-key protection/resource limiting features [2] If you mean “BSL 1.1 license” for some specific software other than Pathway, tell me the product/repo name and I’ll locate and summarize that project’s exact BSL 1.1 license terms from its LICENSE file.
Citations:
- 1: https://github.com/pathwaycom/pathway/blob/510c6daf92bd76e21b7279cee5f588b1b64e7b0f/README.md
- 2: https://github.com/pathwaycom/pathway/blob/main/LICENSE.txt
🌐 Web query:
site:github.com/n8n-io/n8n Sustainable Use License
💡 Result:
The Sustainable Use License is a source-available software license used primarily by projects that adopt a "fair-code" distribution model, such as the workflow automation platform n8n [1][2]. It is not an Open Source Initiative (OSI) approved open source license [1]. Key characteristics of the Sustainable Use License include: Permissions: It grants users a non-exclusive, royalty-free, worldwide, non-sublicensable, and non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software [3][4]. Restrictions and Purpose: The license is designed to allow internal commercial use while restricting certain forms of external commercialization [1]. For example, in the context of n8n, it allows for internal business use but prohibits offering the software as a service to third parties to generate revenue [1]. Patent Rights: The license includes provisions regarding patent claims, stating that the license does not cover patent claims infringed by modifications or additions made by the user [3][4]. Additionally, the patent license terminates immediately if the user or their company initiates a patent infringement claim against the licensor regarding the software [3][4]. Termination: Use in violation of the license terms results in automatic termination [3][4]. If a user receives notice of a violation and corrects it within 30 days, the license can be reinstated; however, subsequent violations after such reinstatement lead to permanent termination [3][4]. The license is often used in conjunction with separate enterprise licenses for proprietary features or additional support, as seen with n8n, where specific files (e.g., those marked with.ee) are excluded from the Sustainable Use License and require a valid Enterprise License [3][2].
Citations:
- 1: [Announcement] A new license for n8n n8n-io/n8n#2932
- 2: https://github.com/n8n-io/n8n
- 3: https://github.com/n8n-io/n8n/blob/master/LICENSE.md
- 4: https://github.com/n8n-io/n8n/blob/%C2%A0n8n%400.189.1/LICENSE.md
Update README license labels for n8n and Pathway.
- Line 64 (n8n): use Sustainable Use License v1.0 (SPDX: SUL-1.0) instead of just “Sustainable Use”.
- Line 67 (Pathway): use BSL 1.1 (Business Source License 1.1) instead of just “BSL”.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 64, Update the README table entries for the projects:
replace the license label for the n8n row (the table cell containing "n8n" and
"Sustainable Use") with "Sustainable Use License v1.0 (SPDX: SUL-1.0)" and
replace the license label for the Pathway row (the table cell containing
"Pathway" and "BSL") with "BSL 1.1 (Business Source License 1.1)"; ensure you
only change the license text for the rows containing the project names n8n and
Pathway so formatting of the table remains intact.
| | [Promptflow](https://github.com/microsoft/promptflow) | Workflow orchestration for LLM pipelines, evaluation, and deployment | Python | MIT | | ||
| | [Dify](https://github.com/langgenius/dify) | Production-ready open source platform combining RAG pipelines, agent capabilities, model management, and observability in one UI | TypeScript/Python | Apache-2.0 | | ||
| | [n8n](https://github.com/n8n-io/n8n) | Workflow automation platform with native LLM and AI agent node support for building agentic pipelines | TypeScript | Sustainable Use | | ||
| | [Instructor](https://github.com/jxnl/instructor) | Structured outputs from LLMs using Pydantic — reliable JSON extraction with validation and retries | Python | MIT | |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check both Instructor repositories for metadata and relationship
echo "=== Checking jxnl/instructor ==="
gh repo view jxnl/instructor --json name,description,url,isFork,parent
echo -e "\n=== Checking 567-labs/instructor ==="
gh repo view 567-labs/instructor --json name,description,url,isFork,parent
echo -e "\n=== Comparing repository stars and activity ==="
gh repo view jxnl/instructor --json stargazerCount,updatedAt
gh repo view 567-labs/instructor --json stargazerCount,updatedAtRepository: Sumanth077/ai-engineering-toolkit
Length of output: 603
Fix duplicated/incorrect-looking “Instructor” GitHub URLs (they resolve to the same repo)
github.com/jxnl/instructor now resolves to https://github.com/567-labs/instructor (same repo identity/metadata, including stars/activity), so the entries at lines 65 and 298 point to the same project. Use a single canonical URL in the README (and optionally note the org move) to avoid confusion.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 65, The README contains duplicate/incorrect GitHub links
for "Instructor" (the markdown link
[Instructor](https://github.com/jxnl/instructor) in the table) that both resolve
to the same repository; replace the non-canonical URL(s) with the canonical org
URL (e.g., https://github.com/567-labs/instructor) so the README uses a single
canonical link for Instructor, and optionally add a short parenthetical note
like "(moved from jxnl)" next to the link to indicate the org transfer; update
all occurrences of the markdown link text "Instructor" in the README to the
canonical URL to remove confusion.
| | [Dify](https://github.com/langgenius/dify) | Production-ready open source platform combining RAG pipelines, agent capabilities, model management, and observability in one UI | TypeScript/Python | Apache-2.0 | | ||
| | [n8n](https://github.com/n8n-io/n8n) | Workflow automation platform with native LLM and AI agent node support for building agentic pipelines | TypeScript | Sustainable Use | | ||
| | [Instructor](https://github.com/jxnl/instructor) | Structured outputs from LLMs using Pydantic — reliable JSON extraction with validation and retries | Python | MIT | | ||
| | [Outlines](https://github.com/dottxt-ai/outlines) | Structured text generation with guaranteed JSON schema compliance and regex-guided sampling | Python | Apache-2.0 | |
There was a problem hiding this comment.
Duplicate entry: Outlines appears in two sections.
The tool "Outlines" is listed in both:
- Line 66: Orchestration & Workflows
- Line 299: Structured Generation
Both entries link to the same repository (github.com/dottxt-ai/outlines). While cross-categorization might be intentional, having identical entries in multiple sections can confuse readers and increases maintenance burden.
Consider either:
- Keeping it in the most appropriate section (likely "Structured Generation" based on the tool's primary purpose)
- Adding a cross-reference note in one section pointing to the other
Also applies to: 299-299
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 66, The README contains a duplicate listing for "Outlines"
(the markdown row with the link https://github.com/dottxt-ai/outlines) in both
the "Orchestration & Workflows" section and the "Structured Generation" section;
remove the duplicate by keeping the entry in the most appropriate section
(suggest keeping the table row in "Structured Generation") and delete the other
row, or alternatively replace the removed row with a one-line cross-reference
note pointing readers to the "Structured Generation" section and the same
repository link to avoid confusion and reduce maintenance.
| |------|-------------|----------|---------| | ||
| | [Pipecat](https://github.com/pipecat-ai/pipecat) | Open-source Python framework for building real-time voice and multimodal AI agents with STT, LLM, and TTS pipeline orchestration | Python | BSD-2-Clause | | ||
| | [LiveKit Agents](https://github.com/livekit/agents) | Production-grade framework for building real-time voice AI agents with WebRTC transport, telephony support, and native MCP integration | Python | Apache-2.0 | | ||
| | [Whisper](https://github.com/openai/whisper) | OpenAI's general-purpose speech recognition model trained on 680k hours of multilingual audio | Python | MIT | |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
OpenAI Whisper model training data size and specifications
💡 Result:
OpenAI Whisper training data size and related specifications (as described in the official model card, Whisper release post, and the paper): 1) Total training data size (audio hours) Whisper models were trained on 680,000 hours of audio with corresponding transcripts collected from the internet [1][2]. 2) Language/task breakdown of that 680,000 hours Of the 680,000 hours: - 65% (438,000 hours) is English-language audio with matched English transcripts [1]. - ~18% (126,000 hours) is non-English audio with English transcripts (i.e., English as the text target) [1]. - ~17% (117,000 hours) is non-English audio with the corresponding transcript in the original language [1]. The non-English portion covers 98 different languages [1]. 3) Data collection type (supervision) The Whisper release states the training uses “multilingual and multitask supervised data collected from the web” [2]. The paper describes scaling to 680,000 hours of multilingual and multitask supervision [3]. 4) Audio unit / preprocessing used for training (specifications) From the official release post: - Input audio is split into 30-second chunks [2]. - Audio is converted into a log-Mel spectrogram before being fed to the model [2]. 5) Availability of the training dataset OpenAI has indicated (in a GitHub discussion) that the training datasets are not publicly available [4]. Notes / interpretation - “Training data size” here refers to the hours of weakly supervised/collected web audio used for pretraining; Whisper’s open repository and documentation provide the dataset composition at the level above, but not the underlying dataset itself for public download [1][4].
Citations:
- 1: https://github.com/openai/whisper/blob/main/model-card.md
- 2: https://openai.com/index/whisper/
- 3: https://cdn.openai.com/papers/whisper.pdf
- 4: Are the training datasets publicly available? openai/whisper#430
🌐 Web query:
Kokoro TTS model parameter count specifications
💡 Result:
Kokoro TTS (Kokoro-82M) is specified as an 82 million parameter model. [1][2] The Hugging Face ONNX model listing and Kokoro’s model cards both describe Kokoro as “82 million parameters,” consistently referring to the Kokoro-82M text-in/audio-out model. [3][2] Note: some third-party articles discuss the Kokoro “v0.19” and “v1.0” variants, but the parameter-count figure given for Kokoro-82M remains 82M in the official/linked model documentation and associated ONNX artifact descriptions. [2][1][3]
Citations:
- 1: https://huggingface.co/hexgrad/Kokoro-82M/raw/43bec554f389e5af6ea04d590aee3f4edf84c85d/README.md
- 2: https://huggingface.co/hexgrad/Kokoro-82M
- 3: https://huggingface.co/onnx-community/Kokoro-82M-v1.0-ONNX
🌐 Web query:
Coqui TTS number of pre-trained models available
💡 Result:
Coqui TTS does not appear to publish a single, authoritative fixed number of “pre-trained models” in the way your question implies. Instead, the project states it provides pretrained models “in +1100 languages” and that you can query the exact installed catalog at runtime (e.g., via TTS().list_models() or --list_models).[1][2] What you can say with cited evidence (and how to get the exact count for 2026-05-29) 1) Language/model coverage is stated, not an exact total model count - The Coqui TTS GitHub README states: “Pretrained models in +1100 languages.”[1] - The ReadTheDocs landing page similarly describes “pretrained models in +1100 languages.”[2] 2) The authoritative “number of pre-trained models” depends on which model packs are available/installed - The GitHub README documents that you can list available models using python3 TTS/server/server.py --list_models and/or print(TTS().list_models()).[1] So the “number of pre-trained models” is best answered as: “whatever your current Coqui TTS environment reports via list_models.” The repo docs do not give a fixed integer count in the sources I found; they provide a programmatic way to list them.[1][2] How to get the exact number on your machine (recommended) - Run: - python3 TTS/server/server.py --list_models - or in Python: print(TTS().list_models()) These are the documented mechanisms to retrieve the available model list; counting that list gives the exact number of pre-trained models for your installed version.[1] Note: The Coqui company announced shutdown of hosted services, but the open-source code/model ecosystem remains accessible; the model list mechanism is still the practical way to determine the count.[3][4]
Citations:
- 1: https://github.com/coqui-ai/tts
- 2: https://coqui-tts.readthedocs.io/en/latest/index.html
- 3: "Coqui is shutting down." coqui-ai/TTS#3489
- 4: next steps after shutdown coqui-ai/TTS#3488
Fix Coqui TTS “1000+ pre-trained models” claim; keep Whisper/Kokoro numbers.
- README.md line 178 (“680k hours of multilingual audio”, Whisper) matches OpenAI’s published training-data hours.
- README.md line 180 (“82M parameters”, Kokoro-82M) matches Kokoro’s documented parameter count.
- README.md line 181 (“1000+ pre-trained models”, Coqui TTS) isn’t backed as a fixed model-count; Coqui’s docs describe coverage as “pretrained models in +1100 languages” and suggest listing the available catalog (e.g., via
--list_models/TTS().list_models()). Update the wording to match the cited source (languages) or compute the count from the catalog.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 178, Update the Coqui TTS row in the README table (the
table cell containing "Coqui TTS" / "1000+ pre-trained models") to match Coqui's
cited wording: replace the fixed "1000+ pre-trained models" claim with a sourced
phrase such as "pretrained models in 1,100+ languages" or "pretrained models
across 1,100+ languages", or alternatively compute and display the exact count
by calling Coqui's catalog listing (e.g., TTS().list_models() / --list_models)
and using that number; keep the existing Whisper ("680k hours") and Kokoro ("82M
parameters") entries unchanged.
| | [TensorRT-LLM](https://github.com/NVIDIA/TensorRT-LLM) | NVIDIA library for optimizing LLM inference with TensorRT | C++/Python | Apache-2.0 | | ||
| | [WebLLM](https://github.com/mlc-ai/web-llm) | High-performance in-browser LLM inference engine | TypeScript/Python | Apache-2.0 | | ||
| | [SkyPilot](https://github.com/skypilot-org/skypilot) | Unified framework to run ML workloads and LLMs on any cloud (AWS, GCP, Azure, Lambda, etc.) with auto-spot, data syncing, and cost optimization. | Python | Apache-2.0 | | ||
| | [Gemma](https://github.com/google-deepmind/gemma) | Google DeepMind's open-weight LLM library — supports Gemma 4 with multimodal input including text, images, video, and audio | Python | Apache-2.0 | |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
Google Gemma latest version and multimodal capabilities 2026
💡 Result:
As of May 2026, the latest version of Google's open model family is Gemma 4, which was released on April 2, 2026 [1][2][3]. This release represents a significant advancement in Google’s open-weight model strategy, featuring four variants released under a commercially permissive Apache 2.0 license [1][4][3]. The Gemma 4 family includes: - E2B (Effective 2B): Optimized for edge devices and lightweight tasks [5][6][7]. - E4B (Effective 4B): Designed for stronger on-device assistants [5][6][7]. - 26B (Mixture of Experts - MoE): Balances high-quality reasoning with efficiency [1][6][7]. - 31B (Dense): The most capable model in the family, providing frontier-level performance for local deployment [1][6][7]. Multimodal Capabilities Gemma 4 models are natively multimodal, capable of processing various input types beyond standard text [5][8][3]. All models in the family support image and video inputs, while the smaller variants (E2B and E4B) feature native audio input support [8][9][10]. Key features of their multimodal stack include: - Native Processing: The models natively integrate image, video, and audio modalities, allowing for complex, interleaved inputs [8][9][11]. - Advanced Reasoning: Gemma 4 supports sophisticated agentic workflows, including native function calling and a Reasoning Mode that enables the model to self-correct and structure its logic before generating a response [1][5][6]. - Performance Features: These models support variable aspect ratios for images and configurable image token counts, allowing developers to balance speed, memory usage, and input quality [9]. They also support extended context windows, reaching 128,000 tokens for smaller variants and up to 256,000 tokens for the 26B and 31B models [12][3][7]. These capabilities enable diverse local applications, such as real-time spatial awareness for assistive technology, on-device robot control, and complex, multimodal agentic assistants that operate entirely offline [4][11].
Citations:
- 1: https://blog.google/innovation-and-ai/technology/developers-tools/gemma-4/
- 2: https://deepmind.google/models/gemma/
- 3: https://cloud.google.com/blog/products/ai-machine-learning/gemma-4-available-on-google-cloud
- 4: https://cryptobriefing.com/google-gemma-4-open-duck-robot/
- 5: https://dev.to/parulmalhotraiitk/gemma-4-is-here-the-dawn-of-local-multimodal-reasoning-6a7
- 6: https://deepmind.google/models/gemma/gemma-4/
- 7: https://dev.to/harshabm_e558522b28f940/which-gemma-4-model-should-you-actually-use-a-developers-honest-guide-339m
- 8: https://ai.google.dev/gemma/docs/core
- 9: https://huggingface.co/blog/gemma4
- 10: https://dev.to/samarth28/gemma-4-is-not-just-another-open-model-it-changes-what-developers-can-build-locally-1el5
- 11: https://dev.to/danparii/gemma-guide-real-time-spatial-awareness-for-blind-users-2449
- 12: https://www.youtube.com/watch?v=oUtiZbrehrw
🏁 Script executed:
#!/bin/bash
# Check the Gemma repository README for current version and capabilities
gh repo view google-deepmind/gemma --json description,readme | jq -r '.readme' | head -100Repository: Sumanth077/ai-engineering-toolkit
Length of output: 1214
Fix Gemma multimodal wording to scope audio support.
“Gemma 4” matches the current family name, and text + images/video are supported; however, native audio support is limited to the E2B and E4B variants, so the README should not claim “audio” support for Gemma 4 in general.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 254, Update the Gemma entry in the README table row (the
line containing "Gemma" and its description) to scope audio support to specific
variants; replace the current "text, images, video, and audio" phrasing with
something like "text, images, video; audio (E2B/E4B variants only)" or "text,
images, video; audio supported only in E2B/E4B variants" so it accurately
reflects that audio is not supported across all Gemma 4 models.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@README.md`:
- Line 143: Remove the duplicate Langfuse table row
("[Langfuse](https://github.com/langfuse/langfuse) | Open-source LLM engineering
platform for tracing, evaluation, prompt management, and observability |
TypeScript/Python | MIT") from one of the sections and keep it only in the most
appropriate section (preferably "Evaluation & Testing"); alternatively, if you
want to keep it in both, replace the duplicate row in "Model Management" with a
brief cross-reference sentence pointing to the "Evaluation & Testing" entry
instead of repeating the full table row.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| | [ClearML](https://github.com/allegroai/clearml) | End-to-end MLOps platform with LLM support | Python | Apache-2.0 | | ||
| | [ZenML](https://github.com/zenml-io/zenml) | MLOps framework for building pipelines and managing models across any cloud infrastructure | Python | Apache-2.0 | | ||
| | [BentoML](https://github.com/bentoml/BentoML) | Unified model serving framework for building and deploying AI model inference APIs | Python | Apache-2.0 | | ||
| | [Langfuse](https://github.com/langfuse/langfuse) | Open-source LLM engineering platform for tracing, evaluation, prompt management, and observability | TypeScript/Python | MIT | |
There was a problem hiding this comment.
Duplicate entry: Langfuse appears in two sections.
Langfuse is listed in both:
- Line 125: Evaluation & Testing
- Line 143: Model Management
Both entries link to the same repository (github.com/langfuse/langfuse). While the tool may serve both purposes, having identical entries in multiple sections can confuse readers and increases maintenance burden.
Consider either:
- Keeping it in the most appropriate section (likely "Evaluation & Testing" based on the tool's primary use case)
- Adding a cross-reference note in one section pointing to the other
Also applies to: 125-125
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 143, Remove the duplicate Langfuse table row
("[Langfuse](https://github.com/langfuse/langfuse) | Open-source LLM engineering
platform for tracing, evaluation, prompt management, and observability |
TypeScript/Python | MIT") from one of the sections and keep it only in the most
appropriate section (preferably "Evaluation & Testing"); alternatively, if you
want to keep it in both, replace the duplicate row in "Model Management" with a
brief cross-reference sentence pointing to the "Evaluation & Testing" entry
instead of repeating the full table row.
Week 1 Additions — 46 tools added
New Sections
Tools Added to Existing Sections
Summary by CodeRabbit