Skip to content

feat: use JSON-based euphony rules for word list joining#405

Merged
JarbasAl merged 8 commits into
devfrom
feat/word-join-euphony-json
Apr 8, 2026
Merged

feat: use JSON-based euphony rules for word list joining#405
JarbasAl merged 8 commits into
devfrom
feat/word-join-euphony-json

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Apr 8, 2026

Copy link
Copy Markdown
Member

Summary

Refactors word list joining to use JSON-based euphony rules and adds i18n support for 46 languages.

JSON-based euphony engine

  • Extracted join_word_list(), simple_trace() and helpers into ovos_workshop/skills/util.py
  • Euphony rules are now declarative JSON files (locale/{lang}/euphony.json) instead of hardcoded Python
  • Generic rule engine supports three condition types:
    • starts_with_vowel — transform connector before specific vowels
    • starts_with_letter — transform connector before specific letters
    • starts_with_any_except — transform unless word starts with excluded patterns
  • Per-language word normalization (accent stripping, leading-H removal) configured in JSON

Languages with euphony rules (5)

Language Connector Rule Example
Italian (it-IT) e → ed before vowel "e" "inverno ed estate"
Italian (it-IT) o → od before vowel "o" "mare od oceano"
Spanish (es-ES) y → e before /i/ (not ia/ie/io) "Juan e Irene"
Spanish (es-ES) o → u before /o/ "uno u otro"
Occitan (oc-FR) e → et before any vowel "pan et aiga"
Asturian (ast-ES) y → e before /i/ (Spanish-like) "Juan e Irene"
Asturian (ast-ES) o → u before /o/ "uno u otro"
Aragonese (an-ES) y → e before /i/ (Spanish-like) "Juan e Irene"
Aragonese (an-ES) o → u before /o/ "uno u otro"

These are the only 5 languages with productive conjunction euphony (confirmed by linguistic research).

Word connectors added (29 new languages)

an-ES, ar-SA, ast-ES, bg-BG, el-GR, et-EE, eu-ES, fi-FI, he-IL, hi-IN, hr-HR, hu-HU, id-ID, ja-JP, ko-KR, lt-LT, lv-LV, ms-MY, nb-NO, oc-FR, pt-BR, ro-RO, ru-RU, sk-SK, sv-SE, sw-KE, th-TH, tr-TR, vi-VN, zh-CN

Code changes

  • ovos_workshop/skills/util.py — new module with join_word_list(), simple_trace(), euphony helpers
  • ovos_workshop/skills/ovos.py — imports from util, removed inline implementations
  • Removed hardcoded _join_word_list_it() and _join_word_list_es()

Test plan

  • 61 tests passing (up from 39)
  • Euphony rule engine: all condition types, edge cases, schema validation
  • Word connectors: presence + schema check for all 46 locales
  • join_word_list: EN, IT, ES, DE, FR, RU, TR, JA, ZH, AR, SV, HU, PT-BR, OC, AST, AN
  • simple_trace, normalize_word, apply_euphony unit tests

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Expanded multilingual support: added word connectors and euphony (normalization & transformation) rules for 30+ locales, improving natural conjunctions across languages.
    • Improved phrase joining to apply locale-aware connector changes for smoother, grammatically correct output.
  • Chores

    • Consolidated internal utilities for joining and trace formatting.
    • Removed several locale noise-word lists.
  • Tests

    • Enhanced unit tests covering euphony, normalization, and many locales.

@coderabbitai

coderabbitai Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ed1fc64d-c489-45f1-bf9d-f3e0384035a3

📥 Commits

Reviewing files that changed from the base of the PR and between 2aa94af and 0ec5950.

📒 Files selected for processing (2)
  • ovos_workshop/locale/an-ES/euphony.json
  • test/unittests/test_locale_lookup.py

📝 Walkthrough

Walkthrough

Extracted skill helpers into a new util module and switched imports; added many locale word_connectors.json and euphony.json files; removed several locale noise_words.list files; and expanded unit tests to cover normalization, euphony rules, and locale connector lookups.

Changes

Cohort / File(s) Summary
Skill utilities
ovos_workshop/skills/util.py, ovos_workshop/skills/ovos.py
New util.py implements simple_trace and join_word_list (language-aware joining with euphony rules). ovos.py now imports/re-exports these functions and received a docstring update.
Unit tests
test/unittests/test_euphony.py, test/unittests/test_locale_lookup.py
Tests updated to use join_word_list from skills.util; added coverage for simple_trace, normalization, euphony rule engine, JSON schema checks, and many locale connector/euphony cases.
Euphony configs
ovos_workshop/locale/.../euphony.json
es-ES, it-IT, an-ES, ast-ES, oc-FR
Added locale euphony JSONs with normalize rules (e.g., strip leading h, accent maps) and connector transformation rules (conditions, excluded patterns, replacements).
Word connector resources (many locales)
ovos_workshop/locale/*/word_connectors.json
e.g., ar-SA, ast-ES, an-ES, bg-BG, el-GR, et-EE, eu-ES, fi-FI, he-IL, hi-IN, hr-HR, hu-HU, id-ID, it-IT, ja-JP, ko-KR, lt-LT, lv-LV, ms-MY, nb-NO, oc-FR, pt-BR, ro-RO, ru-RU, sk-SK, sv-SE, sw-KE, th-TH, tr-TR, vi-VN, zh-CN
Added localized "and"/"or" mappings across many locales (new JSON files).
Removed noise word lists
ovos_workshop/locale/.../noise_words.list
cs-CZ, de-DE, en-US, fr-FR, ru-RU
Deleted or emptied multiple locale noise-word list files.

Sequence Diagram

sequenceDiagram
    participant Caller
    participant Join as "join_word_list"
    participant CoreRes as "CoreResources"
    participant Norm as "_normalize_word"
    participant Apply as "_apply_euphony"

    Caller->>Join: join_word_list(items, connector, sep, lang)
    Join->>CoreRes: load_json_file("word_connectors")
    CoreRes-->>Join: connector_word (or fallback)
    Join->>CoreRes: load_json_file("euphony")
    CoreRes-->>Join: euphony_config (or none)

    alt euphony config present
        Join->>Norm: _normalize_word(connector_word, normalize_rules)
        Norm-->>Join: normalized_connector
        Join->>Apply: _apply_euphony(normalized_connector, next_word, rules)
        Apply-->>Join: transformed_connector
    else no euphony config
        Join-->>Join: use connector_word as-is
    end

    Join->>Join: format list (0,1,2,>=3 items)
    Join-->>Caller: formatted_string
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I nibbled through helpers, hopping light,
Pulled them out and set them right.
Connectors whisper in tongues anew,
Rules that bend the words we use.
A tiny thump — tests cheer, whoo!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: refactoring word list joining to use JSON-based euphony rules instead of hardcoded implementations.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/word-join-euphony-json

Warning

Review ran into problems

🔥 Problems

Timed out fetching pipeline failures after 30000ms


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Extracted word joining logic into ovos_workshop/skills/util.py with
generic, language-configurable euphony rules loaded from JSON:

- join_word_list() now supports per-language euphony.json config files
- Italian and Spanish euphony rules defined in locale/{lang}/euphony.json
- Removed hardcoded _join_word_list_it/es() special case handlers
- Rules engine supports: starts_with_vowel, starts_with_letter,
  starts_with_any_except conditions with accent normalization
- Moved simple_trace() to util.py for cleaner ovos.py module

This enables language teams to contribute euphony rules without modifying
Python code, improving i18n scalability for ask_selection() formatting.

All existing tests pass; word joining behavior is identical.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Beep! Automated checks have reached 100% completion. 🔋

I've aggregated the results of the automated checks for this PR below.

📋 Repo Health

I've checked the repo's balance (aka feature parity). ⚖️

✅ All required files present.

Latest Version: 8.0.4a4

ovos_workshop/version.py — Version file
README.md — README
LICENSE — License file
pyproject.toml — pyproject.toml
CHANGELOG.md — Changelog
⚠️ requirements.txt — Requirements
ovos_workshop/version.py has valid version block markers

🔍 Lint

A quick update on the status of your PR. 🔔

ruff: issues found — see job log

⚖️ License Check

Keeping the lawyers happy, one file at a time. 👔

✅ No license violations found (47 packages).

License distribution: 12× MIT License, 8× MIT, 6× Apache Software License, 6× Apache-2.0, 2× BSD-3-Clause, 2× ISC License (ISCL), 2× PSF-2.0, 2× Python Software Foundation License, +7 more

Full breakdown — 47 packages
Package Version License URL
audioop-lts 0.2.2 PSF-2.0 link
build 1.4.2 MIT link
certifi 2026.2.25 Mozilla Public License 2.0 (MPL 2.0) link
charset-normalizer 3.4.7 MIT link
click 8.3.2 BSD-3-Clause link
combo_lock 0.3.1 Apache-2.0 link
filelock 3.25.2 MIT link
idna 3.11 BSD-3-Clause link
importlib_metadata 9.0.0 Apache-2.0 link
json-database 0.10.1 MIT link
kthread 0.2.3 MIT License link
langcodes 3.5.1 MIT License link
markdown-it-py 4.0.0 MIT License link
mdurl 0.1.2 MIT License link
memory-tempfile 2.2.3 MIT License link
ovos-config 2.1.1 Apache-2.0 link
ovos-number-parser 0.5.1 Apache Software License link
ovos-plugin-manager 2.2.0 Apache-2.0 link
ovos-solver-yes-no-plugin 0.2.8 MIT link
ovos-utils 0.8.5 Apache-2.0 link
ovos-workshop 8.0.4a4 Apache-2.0 link
ovos_bus_client 1.5.0 Apache Software License link
packaging 26.0 Apache-2.0 OR BSD-2-Clause link
padacioso 1.0.0 apache-2.0 link
pexpect 4.9.0 ISC License (ISCL) link
ptyprocess 0.7.0 ISC License (ISCL) link
pyee 12.1.1 MIT License link
Pygments 2.20.0 BSD-2-Clause link
pyproject_hooks 1.2.0 MIT License link
python-dateutil 2.9.0.post0 Apache Software License; BSD License link
PyYAML 6.0.3 MIT License link
quebra-frases 0.3.7 Apache Software License link
RapidFuzz 3.14.5 MIT link
regex 2026.4.4 Apache-2.0 AND CNRI-Python link
requests 2.33.1 Apache Software License link
rich 13.9.4 MIT License link
rich-click 1.9.7 MIT License

Copyright (c) 2022 Phil Ewels

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
| link |
| simplematch | 1.4 | MIT License | link |
| six | 1.17.0 | MIT License | link |
| standard-aifc | 3.13.0 | Python Software Foundation License | link |
| standard-chunk | 3.13.0 | Python Software Foundation License | link |
| typing_extensions | 4.15.0 | PSF-2.0 | link |
| unicode-rbnf | 2.4.0 | MIT License | |
| urllib3 | 2.6.3 | MIT | link |
| watchdog | 6.0.0 | Apache Software License | link |
| websocket-client | 1.9.0 | Apache Software License | link |
| zipp | 3.23.0 | MIT | link |

Policy: Apache 2.0 (universal donor). StrongCopyleft / NetworkCopyleft / WeakCopyleft / Other / Error categories fail. MPL allowed.

🔒 Security (pip-audit)

Checking for any potential security regressions. 🔄

✅ No known vulnerabilities found (66 packages scanned).

🔨 Build Tests

Ensuring all components are in alignment. 📏

✅ All versions pass

Python Build Install Tests
3.10
3.11
3.12
3.13
3.14

Stay curious and keep coding! 🚀

@JarbasAl JarbasAl force-pushed the feat/word-join-euphony-json branch from 216bcf5 to 5115462 Compare April 8, 2026 17:06

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@ovos_workshop/skills/util.py`:
- Line 148: The function signature for join_word_list currently requires sep and
lang causing breakage; restore the default values to match the docstring (make
sep and lang optional with the documented defaults) by changing the
join_word_list signature to provide default values for sep and lang so existing
callers without those args continue to work; update the function declaration
(join_word_list) and any doc references if necessary so the default behavior
documented at lines ~166-168 is reflected in the signature.
- Around line 197-199: The concatenation at the end of the list-joining logic
uses items[-1] without ensuring it's a string, which can raise a TypeError when
the last element isn't str; update the return expression in the function that
builds the joined string to cast the final item to str (e.g., replace items[-1]
with str(items[-1])) so both the earlier generator and the final concatenation
consistently produce strings (referencing the variables items and connector_word
in the existing return expression).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d71991c2-4b4e-4d92-a425-0bedf8ed75f3

📥 Commits

Reviewing files that changed from the base of the PR and between 931f247 and f7d6a1f.

📒 Files selected for processing (4)
  • ovos_workshop/locale/es-ES/euphony.json
  • ovos_workshop/locale/it-IT/euphony.json
  • ovos_workshop/skills/ovos.py
  • ovos_workshop/skills/util.py

Comment thread ovos_workshop/skills/util.py
Comment thread ovos_workshop/skills/util.py
JarbasAl and others added 3 commits April 8, 2026 18:19
… tests

Added word connectors (and/or translations) for: ar-SA, bg-BG, el-GR,
et-EE, eu-ES, fi-FI, he-IL, hi-IN, hr-HR, hu-HU, id-ID, ja-JP, ko-KR,
lt-LT, lv-LV, ms-MY, nb-NO, pt-BR, ro-RO, ru-RU, sk-SK, sv-SE, sw-KE,
th-TH, tr-TR, vi-VN, zh-CN.

Tests added:
- simple_trace() formatting
- _normalize_word() accent/h-stripping
- _apply_euphony() rule engine (all condition types)
- euphony.json schema validation for all locales
- word_connectors.json presence and schema for all locales
- join_word_list() for 9 new languages (ru, tr, ja, zh, ar, sv, hu, pt-BR)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- oc-FR: "e" → "et" before any vowel
- ast-ES: "y" → "e" before /i/ (Spanish-like), "o" → "u" before /o/
- an-ES: "y" → "e" before /i/ (Spanish-like), "o" → "u" before /o/

All three are the remaining languages with productive conjunction euphony.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@JarbasAl JarbasAl changed the title refactor: use JSON-based euphony rules for word list joining feat: use JSON-based euphony rules for word list joining Apr 8, 2026
@github-actions github-actions Bot added feature and removed feature labels Apr 8, 2026
The old test imported removed internal functions (_join_word_list_it,
_join_word_list_es). Updated to use join_word_list from util.py with
the lang parameter, preserving all original test cases.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot added feature and removed feature labels Apr 8, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
test/unittests/test_locale_lookup.py (1)

273-283: Validate the condition-specific fields in the schema test.

Right now a rule passes with just connector, condition, and replace_with, but _apply_euphony() also depends on vowels, letters, and sometimes excluded_patterns. That lets malformed locale configs pass CI and then silently no-op at runtime.

♻️ Tighten the assertions
             self.assertIn("rules", data,
                           f"{folder}/euphony.json missing 'rules'")
             self.assertIsInstance(data["rules"], list,
                                  f"{folder}/euphony.json 'rules' must be a list")
+            required_by_condition = {
+                "starts_with_vowel": ("vowels",),
+                "starts_with_letter": ("letters",),
+                "starts_with_any_except": ("letters", "excluded_patterns"),
+            }
             for rule in data["rules"]:
                 self.assertIn("connector", rule,
                               f"{folder}/euphony.json rule missing 'connector'")
                 self.assertIn("condition", rule,
                               f"{folder}/euphony.json rule missing 'condition'")
                 self.assertIn("replace_with", rule,
                               f"{folder}/euphony.json rule missing 'replace_with'")
+                self.assertIn(rule["condition"], required_by_condition,
+                              f"{folder}/euphony.json has unsupported condition")
+                for key in required_by_condition[rule["condition"]]:
+                    self.assertIn(key, rule,
+                                  f"{folder}/euphony.json rule missing '{key}'")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@test/unittests/test_locale_lookup.py` around lines 273 - 283, The test
currently only asserts presence of "connector", "condition", and "replace_with"
but _apply_euphony() also expects rule fields like "vowels", "letters" and
sometimes "excluded_patterns", so update the loop in test_locale_lookup.py to
assert that each rule includes "vowels" and "letters" and that they are the
correct types (e.g., lists or strings as your implementation expects), and if a
rule uses excluded_patterns semantics assert "excluded_patterns" exists and is a
list (or validate its type/contents). Reference the rule iteration block and the
_apply_euphony() behavior when adding these extra assertions so malformed
euphony.json rules fail the unit test.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@ovos_workshop/locale/an-ES/euphony.json`:
- Around line 4-6: The euphony normalization misses accented o, so names like
"Óscar" don't normalize to "o" before _apply_euphony() checks the first
character; add mappings for "ó" -> "o" and "Ó" -> "O" inside the
"replace_accents" object in an-ES/euphony.json (alongside the existing "í":"i")
so the first character is normalized correctly and the o → u rule can match.

In `@test/unittests/test_locale_lookup.py`:
- Around line 271-272: The tests open locale JSON fixtures with open(path) which
relies on system default encoding; change both occurrences (the one that wraps
data = json.load(f) at the two spots) to open the file with explicit UTF-8 by
passing encoding='utf-8' so the Arabic/Cyrillic/CJK characters are read
consistently across platforms; update the two open(path) calls to include
encoding='utf-8' adjacent to the existing arguments.

---

Nitpick comments:
In `@test/unittests/test_locale_lookup.py`:
- Around line 273-283: The test currently only asserts presence of "connector",
"condition", and "replace_with" but _apply_euphony() also expects rule fields
like "vowels", "letters" and sometimes "excluded_patterns", so update the loop
in test_locale_lookup.py to assert that each rule includes "vowels" and
"letters" and that they are the correct types (e.g., lists or strings as your
implementation expects), and if a rule uses excluded_patterns semantics assert
"excluded_patterns" exists and is a list (or validate its type/contents).
Reference the rule iteration block and the _apply_euphony() behavior when adding
these extra assertions so malformed euphony.json rules fail the unit test.
🪄 Autofix (Beta)

✅ Autofix completed


ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e806a0ad-04b8-4a91-b7a3-c6588db161f4

📥 Commits

Reviewing files that changed from the base of the PR and between f7d6a1f and bad778a.

📒 Files selected for processing (40)
  • ovos_workshop/locale/an-ES/euphony.json
  • ovos_workshop/locale/an-ES/word_connectors.json
  • ovos_workshop/locale/ar-SA/word_connectors.json
  • ovos_workshop/locale/ast-ES/euphony.json
  • ovos_workshop/locale/ast-ES/word_connectors.json
  • ovos_workshop/locale/bg-BG/word_connectors.json
  • ovos_workshop/locale/cs-CZ/noise_words.list
  • ovos_workshop/locale/de-DE/noise_words.list
  • ovos_workshop/locale/el-GR/word_connectors.json
  • ovos_workshop/locale/en-US/noise_words.list
  • ovos_workshop/locale/et-EE/word_connectors.json
  • ovos_workshop/locale/eu-ES/word_connectors.json
  • ovos_workshop/locale/fi-FI/word_connectors.json
  • ovos_workshop/locale/fr-FR/noise_words.list
  • ovos_workshop/locale/he-IL/word_connectors.json
  • ovos_workshop/locale/hi-IN/word_connectors.json
  • ovos_workshop/locale/hr-HR/word_connectors.json
  • ovos_workshop/locale/hu-HU/word_connectors.json
  • ovos_workshop/locale/id-ID/word_connectors.json
  • ovos_workshop/locale/ja-JP/word_connectors.json
  • ovos_workshop/locale/ko-KR/word_connectors.json
  • ovos_workshop/locale/lt-LT/word_connectors.json
  • ovos_workshop/locale/lv-LV/word_connectors.json
  • ovos_workshop/locale/ms-MY/word_connectors.json
  • ovos_workshop/locale/nb-NO/word_connectors.json
  • ovos_workshop/locale/oc-FR/euphony.json
  • ovos_workshop/locale/oc-FR/word_connectors.json
  • ovos_workshop/locale/pt-BR/word_connectors.json
  • ovos_workshop/locale/ro-RO/word_connectors.json
  • ovos_workshop/locale/ru-RU/noise_words.list
  • ovos_workshop/locale/ru-RU/word_connectors.json
  • ovos_workshop/locale/sk-SK/word_connectors.json
  • ovos_workshop/locale/sv-SE/word_connectors.json
  • ovos_workshop/locale/sw-KE/word_connectors.json
  • ovos_workshop/locale/th-TH/word_connectors.json
  • ovos_workshop/locale/tr-TR/word_connectors.json
  • ovos_workshop/locale/vi-VN/word_connectors.json
  • ovos_workshop/locale/zh-CN/word_connectors.json
  • test/unittests/test_euphony.py
  • test/unittests/test_locale_lookup.py
💤 Files with no reviewable changes (5)
  • ovos_workshop/locale/de-DE/noise_words.list
  • ovos_workshop/locale/en-US/noise_words.list
  • ovos_workshop/locale/fr-FR/noise_words.list
  • ovos_workshop/locale/ru-RU/noise_words.list
  • ovos_workshop/locale/cs-CZ/noise_words.list
✅ Files skipped from review due to trivial changes (32)
  • ovos_workshop/locale/el-GR/word_connectors.json
  • ovos_workshop/locale/lt-LT/word_connectors.json
  • ovos_workshop/locale/fi-FI/word_connectors.json
  • ovos_workshop/locale/ar-SA/word_connectors.json
  • ovos_workshop/locale/id-ID/word_connectors.json
  • ovos_workshop/locale/et-EE/word_connectors.json
  • ovos_workshop/locale/bg-BG/word_connectors.json
  • ovos_workshop/locale/hr-HR/word_connectors.json
  • ovos_workshop/locale/ms-MY/word_connectors.json
  • ovos_workshop/locale/an-ES/word_connectors.json
  • ovos_workshop/locale/vi-VN/word_connectors.json
  • ovos_workshop/locale/hu-HU/word_connectors.json
  • ovos_workshop/locale/hi-IN/word_connectors.json
  • ovos_workshop/locale/ast-ES/word_connectors.json
  • ovos_workshop/locale/nb-NO/word_connectors.json
  • ovos_workshop/locale/he-IL/word_connectors.json
  • ovos_workshop/locale/ko-KR/word_connectors.json
  • ovos_workshop/locale/pt-BR/word_connectors.json
  • ovos_workshop/locale/oc-FR/word_connectors.json
  • ovos_workshop/locale/ro-RO/word_connectors.json
  • ovos_workshop/locale/lv-LV/word_connectors.json
  • ovos_workshop/locale/tr-TR/word_connectors.json
  • ovos_workshop/locale/ja-JP/word_connectors.json
  • ovos_workshop/locale/sw-KE/word_connectors.json
  • ovos_workshop/locale/th-TH/word_connectors.json
  • ovos_workshop/locale/sv-SE/word_connectors.json
  • ovos_workshop/locale/oc-FR/euphony.json
  • ovos_workshop/locale/eu-ES/word_connectors.json
  • ovos_workshop/locale/ru-RU/word_connectors.json
  • ovos_workshop/locale/sk-SK/word_connectors.json
  • ovos_workshop/locale/zh-CN/word_connectors.json
  • ovos_workshop/locale/ast-ES/euphony.json

Comment thread ovos_workshop/locale/an-ES/euphony.json
Comment thread test/unittests/test_locale_lookup.py Outdated
@coderabbitai

coderabbitai Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Note

Docstrings generation - SUCCESS
Generated docstrings and committed to branch feat/word-join-euphony-json (commit: 2aa94af91549405966f11818894a50c27f115218)

Docstrings generation was requested by @JarbasAl.

The following files were modified:

* `ovos_workshop/skills/ovos.py`
* `ovos_workshop/skills/util.py`

These files were kept as they were:
* `test/unittests/test_euphony.py`
* `test/unittests/test_locale_lookup.py`

These file types are not supported:
* `ovos_workshop/locale/an-ES/euphony.json`
* `ovos_workshop/locale/an-ES/word_connectors.json`
* `ovos_workshop/locale/ar-SA/word_connectors.json`
* `ovos_workshop/locale/ast-ES/euphony.json`
* `ovos_workshop/locale/ast-ES/word_connectors.json`
* `ovos_workshop/locale/bg-BG/word_connectors.json`
* `ovos_workshop/locale/el-GR/word_connectors.json`
* `ovos_workshop/locale/es-ES/euphony.json`
* `ovos_workshop/locale/et-EE/word_connectors.json`
* `ovos_workshop/locale/eu-ES/word_connectors.json`
* `ovos_workshop/locale/fi-FI/word_connectors.json`
* `ovos_workshop/locale/he-IL/word_connectors.json`
* `ovos_workshop/locale/hi-IN/word_connectors.json`
* `ovos_workshop/locale/hr-HR/word_connectors.json`
* `ovos_workshop/locale/hu-HU/word_connectors.json`
* `ovos_workshop/locale/id-ID/word_connectors.json`
* `ovos_workshop/locale/it-IT/euphony.json`
* `ovos_workshop/locale/ja-JP/word_connectors.json`
* `ovos_workshop/locale/ko-KR/word_connectors.json`
* `ovos_workshop/locale/lt-LT/word_connectors.json`
* `ovos_workshop/locale/lv-LV/word_connectors.json`
* `ovos_workshop/locale/ms-MY/word_connectors.json`
* `ovos_workshop/locale/nb-NO/word_connectors.json`
* `ovos_workshop/locale/oc-FR/euphony.json`
* `ovos_workshop/locale/oc-FR/word_connectors.json`
* `ovos_workshop/locale/pt-BR/word_connectors.json`
* `ovos_workshop/locale/ro-RO/word_connectors.json`
* `ovos_workshop/locale/ru-RU/word_connectors.json`
* `ovos_workshop/locale/sk-SK/word_connectors.json`
* `ovos_workshop/locale/sv-SE/word_connectors.json`
* `ovos_workshop/locale/sw-KE/word_connectors.json`
* `ovos_workshop/locale/th-TH/word_connectors.json`
* `ovos_workshop/locale/tr-TR/word_connectors.json`
* `ovos_workshop/locale/vi-VN/word_connectors.json`
* `ovos_workshop/locale/zh-CN/word_connectors.json`
@coderabbitai

coderabbitai Bot commented Apr 8, 2026

Copy link
Copy Markdown
Contributor

Note

Autofix is a beta feature. Expect some limitations and changes as we gather feedback and continue to improve it.

Fixes Applied Successfully

Fixed 2 file(s) based on 2 unresolved review comments.

Files modified:

  • ovos_workshop/locale/an-ES/euphony.json
  • test/unittests/test_locale_lookup.py

Commit: 0ec595044f06339cd00cf18859befc21a1509e58

The changes have been pushed to the feat/word-join-euphony-json branch.

Time taken: 4m 19s

Fixed 2 file(s) based on 2 unresolved review comments.

Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
@github-actions github-actions Bot added feature and removed feature labels Apr 8, 2026
@JarbasAl JarbasAl merged commit 0f78ea7 into dev Apr 8, 2026
15 checks passed
@github-actions github-actions Bot added feature and removed feature labels Apr 8, 2026
@JarbasAl JarbasAl deleted the feat/word-join-euphony-json branch April 9, 2026 15:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant