add languages directory structure, Makefile.languages, and code quality guidelines from webwords
This commit is contained in:
parent
b340c80868
commit
1efa96a837
3 changed files with 341 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -3,3 +3,4 @@ js/node_modules/*
|
|||
|
||||
# Node.js dependencies
|
||||
node_modules/
|
||||
webwords/
|
||||
|
|
|
|||
79
CLAUDE.md
79
CLAUDE.md
|
|
@ -65,3 +65,82 @@
|
|||
- Use `tmux list-buffers` to see tmux clipboard buffers
|
||||
- ai.foxhop.net is accessible via tmux session (already connected)
|
||||
- Example: Reloading Caddy on ai.foxhop.net via tmux
|
||||
|
||||
---
|
||||
|
||||
# Language Examples Project (from WebWords)
|
||||
|
||||
## Code Quality Standards - CRITICAL RULES
|
||||
|
||||
### **RULE #1: Implementation Must Work Before Documentation**
|
||||
**ALWAYS test the implementation works BEFORE creating any documentation files**
|
||||
|
||||
### Standard Build/Test Workflow
|
||||
1. Write code for the language example
|
||||
2. Build: `docker build -t ai-unturf-{language} languages/{language}/`
|
||||
3. Run: `docker run -d -p {port}:{port} --name test-{language} ai-unturf-{language}`
|
||||
4. Test functionality (curl tests for Hermes, Qwen, TTS endpoints)
|
||||
5. **ONLY IF TESTS PASS**: Create/update index.html documentation
|
||||
6. Clean: `docker stop test-{language} && docker rm test-{language}`
|
||||
|
||||
### Implementation Testing Requirements
|
||||
**Before working on any index.html:**
|
||||
- ✅ Docker build must succeed without errors
|
||||
- ✅ Container must start and serve examples correctly
|
||||
- ✅ All API endpoints must work (Hermes chat, Qwen code, TTS speech)
|
||||
- ✅ Container logs show no runtime errors
|
||||
|
||||
**If implementation fails any test:**
|
||||
- 🔥 Fix the implementation FIRST
|
||||
- 🔥 Do NOT create index.html until working
|
||||
- 🔥 Update CLAUDE.md with failure details and fixes
|
||||
|
||||
### Common Development Patterns
|
||||
**Build-Time Issues**: Package availability, dependency versions, Dockerfile syntax
|
||||
**Runtime Issues**: Missing files, wrong permissions, network access
|
||||
**Logic Issues**: API calls, authentication, response parsing
|
||||
|
||||
### Development Workflow
|
||||
1. **Analyze** - Read existing examples and language patterns
|
||||
2. **Build** - Attempt Docker build, note any errors
|
||||
3. **Fix** - Address build issues (packages, syntax, versions)
|
||||
4. **Run** - Start container, check startup logs
|
||||
5. **Debug** - Fix runtime issues (permissions, syntax, API calls)
|
||||
6. **Test** - Verify all three API endpoints work correctly
|
||||
7. **Document** - Create index.html with working examples
|
||||
8. **Clean** - Stop and remove container before next language
|
||||
|
||||
## Language Examples Structure
|
||||
- Each language gets its own directory under `languages/{language}/`
|
||||
- Each contains working code examples for:
|
||||
- Hermes AI chat (general purpose conversational AI)
|
||||
- Qwen 3 Coder (specialized coding model)
|
||||
- TTS speech generation
|
||||
- Dockerfile for building/testing in isolation
|
||||
- index.html explaining the code and usage
|
||||
|
||||
## Documentation Standards
|
||||
### index.html Structure
|
||||
Each language's index.html should:
|
||||
1. **Header & Overview** - What this language example demonstrates
|
||||
2. **Prerequisites** - Required packages and setup
|
||||
3. **Code Examples** - Working examples for Hermes, Qwen, TTS
|
||||
4. **Code Walkthrough** - Line-by-line explanation of the code
|
||||
5. **Running the Examples** - How to build and test
|
||||
6. **Common Issues** - Troubleshooting for this language
|
||||
|
||||
**KEY PRINCIPLES:**
|
||||
- ✅ FOCUS on actual working code examples
|
||||
- ✅ EXPLAIN the specific API integration
|
||||
- ✅ DOCUMENT our specific implementation choices
|
||||
- ✅ PROVIDE troubleshooting for this language
|
||||
- ❌ NO general programming tutorials
|
||||
- ❌ NO "What is programming?" sections
|
||||
|
||||
## Makefile Commands for Language Examples
|
||||
- `make languages-list` - List all language directories
|
||||
- `make languages-build-{lang}` - Build Docker image for specific language
|
||||
- `make languages-test-{lang}` - Test specific language implementation
|
||||
- `make languages-build-all` - Build all language Docker images
|
||||
- `make languages-test-all` - Test all language implementations
|
||||
- `make languages-clean` - Remove all language containers and images
|
||||
|
|
|
|||
261
Makefile.languages
Normal file
261
Makefile.languages
Normal file
|
|
@ -0,0 +1,261 @@
|
|||
# Makefile for ai.unturf.com Language Examples
|
||||
# This Makefile contains commands for building and testing language example implementations
|
||||
# Each language demonstrates usage of Hermes AI, Qwen Coder, and TTS endpoints
|
||||
|
||||
# Language list from webwords project
|
||||
LANGUAGES := assembly awk bash brainfuck c clojure cobol cpp crystal csharp dart deno elixir erlang fortran fsharp go haskell java js julia kotlin lua matlab nim ocaml odin perl php powershell prolog python r ruby rust scala sql swift tcl v vbnet zig
|
||||
|
||||
# Docker image prefix
|
||||
IMAGE_PREFIX := ai-unturf
|
||||
|
||||
# Test endpoints
|
||||
HERMES_ENDPOINT := https://hermes.ai.unturf.com/v1
|
||||
QWEN_ENDPOINT := https://qwen.ai.unturf.com/v1
|
||||
TTS_ENDPOINT := https://speech.ai.unturf.com/v1
|
||||
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "Language Examples Makefile Commands:"
|
||||
@echo ""
|
||||
@echo " make languages-list - List all language directories"
|
||||
@echo " make languages-build-python - Build Docker image for Python"
|
||||
@echo " make languages-test-python - Test Python implementation"
|
||||
@echo " make languages-run-python - Run Python container interactively"
|
||||
@echo " make languages-stop-python - Stop Python container"
|
||||
@echo " make languages-clean-python - Remove Python container and image"
|
||||
@echo ""
|
||||
@echo " make languages-build-all - Build all language Docker images"
|
||||
@echo " make languages-test-all - Test all language implementations"
|
||||
@echo " make languages-stop-all - Stop all language containers"
|
||||
@echo " make languages-clean-all - Remove all language containers and images"
|
||||
@echo ""
|
||||
@echo " Replace 'python' with any language: $(LANGUAGES)"
|
||||
@echo ""
|
||||
@echo "Test Endpoints:"
|
||||
@echo " Hermes: $(HERMES_ENDPOINT)"
|
||||
@echo " Qwen: $(QWEN_ENDPOINT)"
|
||||
@echo " TTS: $(TTS_ENDPOINT)"
|
||||
|
||||
.PHONY: languages-list
|
||||
languages-list:
|
||||
@echo "Available language directories:"
|
||||
@ls -1 languages/
|
||||
|
||||
# Python language targets
|
||||
.PHONY: languages-build-python
|
||||
languages-build-python:
|
||||
docker build -t $(IMAGE_PREFIX)-python languages/python/
|
||||
|
||||
.PHONY: languages-test-python
|
||||
languages-test-python:
|
||||
@echo "Testing Python implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-python
|
||||
|
||||
.PHONY: languages-run-python
|
||||
languages-run-python:
|
||||
docker run -it --rm --name test-python $(IMAGE_PREFIX)-python
|
||||
|
||||
.PHONY: languages-stop-python
|
||||
languages-stop-python:
|
||||
docker stop test-python || true
|
||||
docker rm test-python || true
|
||||
|
||||
.PHONY: languages-clean-python
|
||||
languages-clean-python: languages-stop-python
|
||||
docker rmi $(IMAGE_PREFIX)-python || true
|
||||
|
||||
# Go language targets
|
||||
.PHONY: languages-build-go
|
||||
languages-build-go:
|
||||
docker build -t $(IMAGE_PREFIX)-go languages/go/
|
||||
|
||||
.PHONY: languages-test-go
|
||||
languages-test-go:
|
||||
@echo "Testing Go implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-go
|
||||
|
||||
.PHONY: languages-run-go
|
||||
languages-run-go:
|
||||
docker run -it --rm --name test-go $(IMAGE_PREFIX)-go
|
||||
|
||||
.PHONY: languages-stop-go
|
||||
languages-stop-go:
|
||||
docker stop test-go || true
|
||||
docker rm test-go || true
|
||||
|
||||
.PHONY: languages-clean-go
|
||||
languages-clean-go: languages-stop-go
|
||||
docker rmi $(IMAGE_PREFIX)-go || true
|
||||
|
||||
# JavaScript/Node.js language targets
|
||||
.PHONY: languages-build-js
|
||||
languages-build-js:
|
||||
docker build -t $(IMAGE_PREFIX)-js languages/js/
|
||||
|
||||
.PHONY: languages-test-js
|
||||
languages-test-js:
|
||||
@echo "Testing JavaScript implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-js
|
||||
|
||||
.PHONY: languages-run-js
|
||||
languages-run-js:
|
||||
docker run -it --rm --name test-js $(IMAGE_PREFIX)-js
|
||||
|
||||
.PHONY: languages-stop-js
|
||||
languages-stop-js:
|
||||
docker stop test-js || true
|
||||
docker rm test-js || true
|
||||
|
||||
.PHONY: languages-clean-js
|
||||
languages-clean-js: languages-stop-js
|
||||
docker rmi $(IMAGE_PREFIX)-js || true
|
||||
|
||||
# Rust language targets
|
||||
.PHONY: languages-build-rust
|
||||
languages-build-rust:
|
||||
docker build -t $(IMAGE_PREFIX)-rust languages/rust/
|
||||
|
||||
.PHONY: languages-test-rust
|
||||
languages-test-rust:
|
||||
@echo "Testing Rust implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-rust
|
||||
|
||||
.PHONY: languages-run-rust
|
||||
languages-run-rust:
|
||||
docker run -it --rm --name test-rust $(IMAGE_PREFIX)-rust
|
||||
|
||||
.PHONY: languages-stop-rust
|
||||
languages-stop-rust:
|
||||
docker stop test-rust || true
|
||||
docker rm test-rust || true
|
||||
|
||||
.PHONY: languages-clean-rust
|
||||
languages-clean-rust: languages-stop-rust
|
||||
docker rmi $(IMAGE_PREFIX)-rust || true
|
||||
|
||||
# Ruby language targets
|
||||
.PHONY: languages-build-ruby
|
||||
languages-build-ruby:
|
||||
docker build -t $(IMAGE_PREFIX)-ruby languages/ruby/
|
||||
|
||||
.PHONY: languages-test-ruby
|
||||
languages-test-ruby:
|
||||
@echo "Testing Ruby implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-ruby
|
||||
|
||||
.PHONY: languages-run-ruby
|
||||
languages-run-ruby:
|
||||
docker run -it --rm --name test-ruby $(IMAGE_PREFIX)-ruby
|
||||
|
||||
.PHONY: languages-stop-ruby
|
||||
languages-stop-ruby:
|
||||
docker stop test-ruby || true
|
||||
docker rm test-ruby || true
|
||||
|
||||
.PHONY: languages-clean-ruby
|
||||
languages-clean-ruby: languages-stop-ruby
|
||||
docker rmi $(IMAGE_PREFIX)-ruby || true
|
||||
|
||||
# C language targets
|
||||
.PHONY: languages-build-c
|
||||
languages-build-c:
|
||||
docker build -t $(IMAGE_PREFIX)-c languages/c/
|
||||
|
||||
.PHONY: languages-test-c
|
||||
languages-test-c:
|
||||
@echo "Testing C implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-c
|
||||
|
||||
.PHONY: languages-run-c
|
||||
languages-run-c:
|
||||
docker run -it --rm --name test-c $(IMAGE_PREFIX)-c
|
||||
|
||||
.PHONY: languages-stop-c
|
||||
languages-stop-c:
|
||||
docker stop test-c || true
|
||||
docker rm test-c || true
|
||||
|
||||
.PHONY: languages-clean-c
|
||||
languages-clean-c: languages-stop-c
|
||||
docker rmi $(IMAGE_PREFIX)-c || true
|
||||
|
||||
# C++ language targets
|
||||
.PHONY: languages-build-cpp
|
||||
languages-build-cpp:
|
||||
docker build -t $(IMAGE_PREFIX)-cpp languages/cpp/
|
||||
|
||||
.PHONY: languages-test-cpp
|
||||
languages-test-cpp:
|
||||
@echo "Testing C++ implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-cpp
|
||||
|
||||
.PHONY: languages-run-cpp
|
||||
languages-run-cpp:
|
||||
docker run -it --rm --name test-cpp $(IMAGE_PREFIX)-cpp
|
||||
|
||||
.PHONY: languages-stop-cpp
|
||||
languages-stop-cpp:
|
||||
docker stop test-cpp || true
|
||||
docker rm test-cpp || true
|
||||
|
||||
.PHONY: languages-clean-cpp
|
||||
languages-clean-cpp: languages-stop-cpp
|
||||
docker rmi $(IMAGE_PREFIX)-cpp || true
|
||||
|
||||
# Bash language targets
|
||||
.PHONY: languages-build-bash
|
||||
languages-build-bash:
|
||||
docker build -t $(IMAGE_PREFIX)-bash languages/bash/
|
||||
|
||||
.PHONY: languages-test-bash
|
||||
languages-test-bash:
|
||||
@echo "Testing Bash implementation..."
|
||||
docker run --rm $(IMAGE_PREFIX)-bash
|
||||
|
||||
.PHONY: languages-run-bash
|
||||
languages-run-bash:
|
||||
docker run -it --rm --name test-bash $(IMAGE_PREFIX)-bash
|
||||
|
||||
.PHONY: languages-stop-bash
|
||||
languages-stop-bash:
|
||||
docker stop test-bash || true
|
||||
docker rm test-bash || true
|
||||
|
||||
.PHONY: languages-clean-bash
|
||||
languages-clean-bash: languages-stop-bash
|
||||
docker rmi $(IMAGE_PREFIX)-bash || true
|
||||
|
||||
# Build all language implementations
|
||||
.PHONY: languages-build-all
|
||||
languages-build-all:
|
||||
@echo "Building all language implementations..."
|
||||
@for lang in $(LANGUAGES); do \
|
||||
echo "Building $$lang..."; \
|
||||
docker build -t $(IMAGE_PREFIX)-$$lang languages/$$lang/ || echo "Failed to build $$lang"; \
|
||||
done
|
||||
|
||||
# Test all language implementations
|
||||
.PHONY: languages-test-all
|
||||
languages-test-all:
|
||||
@echo "Testing all language implementations..."
|
||||
@for lang in $(LANGUAGES); do \
|
||||
echo "Testing $$lang..."; \
|
||||
docker run --rm $(IMAGE_PREFIX)-$$lang || echo "Failed to test $$lang"; \
|
||||
done
|
||||
|
||||
# Stop all language containers
|
||||
.PHONY: languages-stop-all
|
||||
languages-stop-all:
|
||||
@echo "Stopping all language containers..."
|
||||
@for lang in $(LANGUAGES); do \
|
||||
docker stop test-$$lang 2>/dev/null || true; \
|
||||
docker rm test-$$lang 2>/dev/null || true; \
|
||||
done
|
||||
|
||||
# Clean all language containers and images
|
||||
.PHONY: languages-clean-all
|
||||
languages-clean-all: languages-stop-all
|
||||
@echo "Removing all language images..."
|
||||
@for lang in $(LANGUAGES); do \
|
||||
docker rmi $(IMAGE_PREFIX)-$$lang 2>/dev/null || true; \
|
||||
done
|
||||
Loading…
Add table
Add a link
Reference in a new issue