You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* add mapper helper and crazy CI
* add streaming and timing and other stuff so i can see what's going on
* no streaming here
* use qwen; lib.js is global apparently, add some helper functions; add a bunch of DON'T Do's; clean up code block fences; do some surface lint tests
* CI: use qwen, log warnings and add to PR
* clear up AI generated block markers note
* one PR per module
* make platforms dynamic
* add MapItemException to shared helpers
* Update rules on regex and notify reviewers
* 🤨 fix merge... again?
* add extensions syslink to .gitignore
* streamline translation helpers for prompt and linting
* map_item_converter: fix _strip_js_comments
* zeeschuimer_map_item_sync.yml: move python functions to new map_item_ci.py
* lock create-pull-request github action (it has a ZS token!)
* add tests for map_item_sync CI
* add lint rules for better warnings
* allow tests and linting without LLM packages
* fix (🤞) regex escaping newlines and stuff
* check for preexisting map_item
* get rid of streaming (used for dev): easier extraction of response
* don't hardcode packages: use them from setup.py
* update CI tests
* CI: write requirements w/ newlines
* alllow LLM provider, base_url, and api_key to be inputs
* llm.py add litellm provider
* llm litellm adapter fix
* add API endpoint for mapped JSON dataset items
* map_item_converter: pass api key
* delete unused item mapper API endpoint
* llm litellm provider if at first you do not succeed
or the one about the definition of madness
* llm.py: set_structure pass additional langchain options.
* map_item_converter: update token max and examine JSON parsing errors
* update map_item_converter to allow prompt mode which does not use json_schema (gpt-oss-120b fails w/ schema)
* pass structured arg in zeeschuimer CI
* update zeeschuimer_map_item_sync.yml to use Github variables
* Move map_item helper scripts into their own folder
* Don't require a config reader in LLMAdapter
* Update converter.py for LLMAdapter changes
* Fix botched merge
* Further cleanup
* More repathing
* Fix tests
---------
Co-authored-by: Claude Code <claude-code@noreply.github.com>
Co-authored-by: Stijn Peeters <stijn.peeters@uva.nl>
# NOTE: defaults are '' which falls through to Github settings (see Optional overrides above)
48
+
inputs:
49
+
bootstrap:
50
+
description: 'Translate every Zeeschuimer datasource (initial sync, single PR). Ignored if "files" is set.'
51
+
type: boolean
52
+
default: false
53
+
files:
54
+
description: 'Space-separated list of datasource files to translate (e.g. "datasources/tiktok/search_tiktok.py"). Overrides bootstrap. One PR per module.'
55
+
type: string
56
+
default: ''
57
+
llm_provider:
58
+
description: 'LLM provider type for LLMAdapter. Leave blank to use LLM_PROVIDER variable or default (ollama).'
59
+
type: string
60
+
default: ''
61
+
llm_base_url:
62
+
description: 'LLM provider base URL. Leave blank to use LLM_BASE_URL variable or default (https://ollama.digitalmethods.net).'
63
+
type: string
64
+
default: ''
65
+
llm_api_key:
66
+
description: 'LLM API key. Leave blank to use LLM_PROVIDER_API_KEY secret or DMI_OLLAMA_KEY secret.'
67
+
type: string
68
+
default: ''
69
+
model:
70
+
description: 'LLM model name. Leave blank to use LLM_MODEL variable or default (qwen2.5-coder:14b). Examples: qwen2.5-coder:7b, deepseek-coder-v2:16b, gemma3:27b'
71
+
type: string
72
+
default: ''
73
+
output_mode:
74
+
description: 'LLM output mode (structured or prompt). Leave blank to use LLM_OUTPUT_MODE variable or default (structured). Use prompt for models that do not support structured output (e.g. gpt-oss-120b).'
75
+
type: string
76
+
default: ''
77
+
78
+
# Least privilege: this workflow's own GITHUB_TOKEN only needs to read the 4CAT
79
+
permissions:
80
+
contents: read
8
81
9
82
jobs:
10
-
sync-map-item:
83
+
detect:
84
+
name: Detect modules to translate
11
85
runs-on: ubuntu-latest
86
+
outputs:
87
+
mode: ${{ steps.plan.outputs.mode }}
88
+
matrix: ${{ steps.plan.outputs.matrix }}
12
89
steps:
13
-
- name: Placeholder
14
-
run: echo "Workflow scaffold is valid."
90
+
- name: Checkout 4CAT
91
+
uses: actions/checkout@v4
92
+
with:
93
+
# Full history: the push-event plan diffs `github.event.before`
94
+
# against `github.sha`. A shallow clone may not contain `before` for
95
+
# a multi-commit push, in which case the diff resolves to nothing and
96
+
# the change is silently skipped.
97
+
fetch-depth: 0
98
+
99
+
- name: Set up Python
100
+
# `detect` runs map_item/ci.py (stdlib only — no LLM deps installed
101
+
# here), but still needs a `python` on PATH; don't rely on the runner
102
+
# image happening to provide one.
103
+
uses: actions/setup-python@v5
104
+
with:
105
+
python-version: "3.11"
106
+
107
+
- name: Plan translation matrix
108
+
id: plan
109
+
env:
110
+
EVENT_NAME: ${{ github.event_name }}
111
+
INPUTS_FILES: ${{ inputs.files }}
112
+
INPUTS_BOOTSTRAP: ${{ inputs.bootstrap }}
113
+
BEFORE_SHA: ${{ github.event.before }}
114
+
AFTER_SHA: ${{ github.sha }}
115
+
# Validates paths against a strict datasource shape (dropping anything
116
+
# else) and writes `mode` + `matrix` to $GITHUB_OUTPUT. See
0 commit comments