- Groovy 63.2%
- Perl 31.2%
- HTML 3%
- JavaScript 1.7%
- CSS 0.5%
- Other 0.4%
| .claude/skills | ||
| buildSrc | ||
| docker | ||
| gradle/wrapper | ||
| grails-app | ||
| src | ||
| storage | ||
| tools | ||
| .editorconfig | ||
| .gitignore | ||
| .sdkmanrc | ||
| application.yml-template | ||
| build.gradle | ||
| deploy.sh | ||
| deploy2STAGE.sh | ||
| deployDocker2PROD.sh | ||
| deployDocker2STAGE.sh | ||
| gradle.properties | ||
| gradlew | ||
| grails-cli.yml | ||
| PortForwardStage.sh | ||
| README.md | ||
| RPC.md | ||
| settings.gradle | ||
| test.html | ||
Westend61 AI-Keywording ("AIwording")
Use any LLM to keyword images automatically.
todo
-
Ext. Kwd: Submission -> Manipulate (AI system + keep all terms + skip QA ) in einem Durchgang setzten
-
QA: "Save & enrich" -> Danach ist die Bildauswahl wieder zurückgesetzt -> siehe ext.kwd
-
Submission: Marker for (keep all AI keywords plus the mapped ones!) (UI in AM&EK)
-
Submission: Marker for skip QA (UI in AM&EK)
-
stats on queue for tokens/price day/week/month/year
-
number of keywords in QA image not correct for all image (some are 0)
done
- start initCache() im background/later to speedup for QA edit
- Do Aiwording after X hours (Settings) after creation in App
- "Object" wird als nicht eindeutig erkannt, obwohl es eine "replacement regel" gibt, und damit ist es eindeutig!!
- Das gleiche in AIwording: Ext. Kwd: Submission -> Manipulate (AI system + keep all terms + skip QA ) in einem Durchgang setzten (auch intern)
- QA: Add a new keyword not working !!
- Submission "edit photographer captions" (see ext. kwd)
- QA: new keyword field : es fehlt der suggest wie in ext. kwd
- QA: linke kwds Leiste soll nicht mitscrollen -> ext. Kwd
- QA : Manipulate : Neben "APPROVE Submission" noch ein "APPROVE Submission keep all terms"
- QA: if user has an older open Sub. and opens a new, then the new is also locked
- AdminPanel: Show a list of all locked submission and button to unlock only one
- QA: list : also link "AM Id" field
- QA: list : Edit filter geht nicht (auf) !!!
- Submission ins Hauptmenü
- CSS: QA : Manipulate Tabs broken!
- unlock Submission : 1. job in the night and older than X hours, 2. Admin Panel
- copy all relevant infos to ProcessQueue from submission
- ProcessQueue -> ProcessQueueItem
- QA: edit Asset : keywords (now, enriched [985]) Anzahl ist Buchstaben, soll aber wörter sein !!
- make sure the release annotation is done after aiwording for every Asset (before QA)
- ignore terms: Support "*" : "overcoming *"
- Keywording replacement regeln anwenden
- QA -> edit asset: use better colours
- QA: New command for term(s) "blacklist this" -> remove from all and add to blacklist
- Blacklist for AI keywords: Remove them directly
- support multiple prompts (2 for every model/llm)
- stats in QA fixing
- external keywording: Submission manipulate: add the AI systems
- enrich only after QA not during AIwording !!
- first: enrich by using alle languages, map synsets and merge en terms back to english
- map in keywording for "de" and "es" and add preferred terms to "en" Ex
- If filter e.g. "new only" the "mark all" marks all also the hidden wants
- QA: show thesaurus the keywords are in?
- Store Assets with errors in List an process at end of Submission again, do not stop Submission
- show not mapped on Asset
- add additional infos from author and model release
Usage
Build and start the docker container in ./docker/encoder
cd ./docker/encoder
docker build . encoder_blip
The build process can take a long time, but only has to be done once.
Afterward run the docker container
docker run -it -p 127.0.0.1:8000:8000 --rm -v ./app.py:/app.py encoder_blip
On a macbook with m1 chip, add the following flag to the docker build and run commands
--platform linux/amd64
OpenAI API limits
limits
- day 1000 request
- 20000 tokens / minute
Task scheduling
The spring scheduler is configured in de.w61.aiwording.schedule.SchedulingConfiguration.
The number of workers is defined in ProcessingService.
Every 2 minutes the ProcessingService checks if a worker is idle. Then it checks if there is a new ProcessQueueItem waiting to be processed. It there is it is started in an idle worker.