Docling
zhuzhaoyun/Molio
PRIMARY skill for converting .pdf, .docx, .pptx, .xlsx, .doc, .ppt, .xls, images, and audio/video files (.mp3, .wav, .m4a, .mp4, .mov, etc.) to Markdown.
GAIK toolkit overview and reference. An agent skill from GAIK-project/gaik-toolkit.
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/gaik-toolkit .claude/skills/gaik-toolkit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .claude/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/gaik-toolkit .agents/skills/gaik-toolkit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .agents/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/gaik-toolkit .cursor/skills/gaik-toolkit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .cursor/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/GAIK-project/gaik-toolkit.git --path .claude/skills/gaik-toolkit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/gaik-toolkit .gemini/skills/gaik-toolkit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .gemini/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/gaik-toolkit .github/skills/gaik-toolkit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .github/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install GAIK-project/gaik-toolkit gaik-toolkit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/GAIK-project/gaik-toolkit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/gaik-toolkit .opencode/skills/gaik-toolkit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "gaik-toolkit" agent skill from https://github.com/GAIK-project/gaik-toolkit/tree/main/.claude/skills/gaik-toolkit into .opencode/skills/gaik-toolkit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "gaik-toolkit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
gaik-toolkitGAIK toolkit overview and reference. An agent skill from GAIK-project/gaik-toolkit.
Gaik Toolkit is an agent skill from GAIK-project/gaik-toolkit. GAIK toolkit overview and reference. Use when needing context on GAIK components (extractors, parsers, transcribers, RAG, TTS, classifiers, pipelines), the repository structure, configuration pattern, environment variables, building-block API tables, the documentation update map, or the demo app and docs website setup. For CREATING a new component package use build-software-component; for ADDING EXAMPLES and running the canonical publish flow (docs → demo app → PyPI tag) use gaik-add-examples. Covers: structured…
Its SKILL.md is about 5.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 12 other files, including scripts and reference files (for example `references/building-blocks.md`, `references/demo-app.md` and `references/docs-website.md`).
It sits in Documents & Office, covering Text to speech and voice, Transcription and Speech recognition and synthesis. It works with PostgreSQL, DuckDB, Microsoft Excel and pgvector. The repository describes itself as: Python toolkit providing reusable AI/ML utilities: schema extraction, structured outputs, and production-ready components. The licence is MIT.
Read from SKILL.md and the folder at commit e66fcca. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
bunpnpmpippythonFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
gaik-project.github.iogaik-demo.2.rahtiapp.fipypi.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
AITTA_API_KEYANTHROPIC_API_KEYGOOGLE_API_KEYAZURE_API_KEYOPENAI_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Gaik Toolkit loads about 5.7k tokens when it runs, and up to ~32k if it reads all its reference files. Until then it costs about 194 tokens; SKILL.md has 1,733 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from GAIK-project/gaik-toolkit at commit e66fcca, republished under its MIT licence (© GAIK-project). 1,733 words, ~5,655 tokens.
.claude/skills/gaik-toolkit/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Current PyPI version: !python ${CLAUDE_SKILL_DIR}/scripts/fetch_pypi_readme.py --version
Python toolkit for knowledge extraction, capture, and generation. Use when working with:
This skill is the overview / reference. Two sibling skills handle workflows:
| Task | Skill |
|---|---|
Create a new installable component package (source + pyproject.toml + extras) | build-software-component |
| Add an example, then optionally publish (docs → demo app → PyPI tag) | gaik-add-examples |
| Understand the toolkit: components, config, repo layout, docs update map | this skill |
implementation_layer/src/gaik/| Path | Description |
|---|---|
implementation_layer/src/gaik/ | Python package source (building blocks + software modules) |
implementation_layer/toolkit_demo_app/ | Next.js + FastAPI interactive demo app (bun + uv) |
guidance_layer/website/ | Documentation website (Fumadocs/Next.js, deployed to GitHub Pages) |
guidance_layer/website/content/docs/ | Documentation source (.mdx files) |
implementation_layer/no-code-assets/ | Prompt templates and agent skills for no-code usage |
strategy_layer/ | Value evaluation framework, AI maturity assessment |
business_layer/ | GenAI product canvas templates |
Interactive web app at implementation_layer/toolkit_demo_app/. Next.js 16 + FastAPI (bun + uv).
bun run dev:all (runs both frontend and API)Fumadocs/Next.js site at guidance_layer/website/. Content in .mdx files under content/docs/.
pnpm dev (from guidance_layer/website/ -- uses pnpm, not bun)Install via pip with optional extras: pip install "gaik[extract]", pip install "gaik[all-cpu]", etc.
See Installation Reference for all available extras and setup.
Azure OpenAI (recommended):
AZURE_API_KEY=your-key
AZURE_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_DEPLOYMENT=gpt-6-luna # default when unset
AZURE_API_VERSION=2025-03-01-previewOpenAI:
OPENAI_API_KEY=your-key
OPENAI_MODEL=gpt-6-luna # default when unsetOther providers read their own variables (AITTA_API_KEY, ANTHROPIC_API_KEY,
GOOGLE_API_KEY, LITELLM_MODEL …); LLM_PROVIDER is the default for
get_llm_config() called without a provider. See
Building Blocks Reference.
Two parallel surfaces. Pick the simpler one for OpenAI/Azure-only use cases; pick the multi-provider one for any other provider or when the same code must switch providers. Components take either dict in their config argument (config, api_config, openai_config …).
Legacy surface (OpenAI/Azure only — keeps working unchanged):
from gaik.software_components.config import get_openai_config, create_openai_client
config = get_openai_config(use_azure=True) # Azure OpenAI
config = get_openai_config(use_azure=False) # Standard OpenAI
client = create_openai_client(config) # OpenAI/AzureOpenAI clientMulti-provider surface:
from gaik.software_components.llm import get_llm_config, create_llm_client
config = get_llm_config("aitta") # openai, azure, aitta, openai_compatible, google, vertex,
# anthropic, anthropic_foundry, litellm
client = create_llm_client(config) # ProviderClient with chat/chat_parsed/chat_stream/embedopenai, azure, aitta (CSC's OpenAI-compatible API; default model google/gemma-4-31b-it, 600 s timeout for cold starts) and openai_compatible (explicit base_url and model, e.g. vLLM or Ollama).gaik[llm-anthropic], gaik[llm-google]; gaik[llm-litellm] for the optional litellm backend, which needs a provider-prefixed model such as azure/<deployment>. Native adapters stay the default; gaik[llm-all] installs all three.NotImplementedError for every other provider, Aitta and openai_compatible included.use_azure keeps its backend whatever LLM_PROVIDER says, and a bare dict without provider or use_azure keeps its pre-0.8 routing (resolution rules).gpt-6-* are reasoning models: sampling options (temperature, top_p) work only with reasoning_effort="none", which gpt-6-astra does not offer, and the token limit is max_completion_tokens. Components translate this themselves; when calling a raw SDK client, pass the options through normalize_chat_kwargs from gaik.software_components.llm.parameters.Core classes in gaik.software_components.*. For detailed API and constructor parameters, see Building Blocks Reference.
| Component | Import | Key Method |
|---|---|---|
| SchemaGenerator | from gaik.software_components.extractor import SchemaGenerator | generate_schema(user_requirements) |
| DataExtractor | from gaik.software_components.extractor import DataExtractor | extract(extraction_model, requirements, ...) |
| VisionExtractor | from gaik.software_components.vision_extractor import VisionExtractor | extract(file_paths, user_requirements, extraction_model=None, requirements=None, schema_dir=None) → VisionExtractionResult (single-pass PDF/image → structured data; OpenAI / Claude / Google) |
| VisionParser | from gaik.software_components.parsers import VisionParser | convert_pdf(path) → list[str] per page |
| PyMuPDFParser | from gaik.software_components.parsers import PyMuPDFParser | parse_pdf(path) → str · parse_document(path) → dict |
| DocxParser | from gaik.software_components.parsers import DocxParser | parse_docx(path) → str · parse_document(path) → dict |
| DoclingParser | from gaik.software_components.parsers import DoclingParser | parse_document(path) → dict |
| VisionPlusParser | from gaik.software_components.parsers import VisionPlusParser | parse_document(path) → dict (markdown + per-element metadata) |
| DoclingApiClientParser | from gaik.software_components.parsers import DoclingApiClientParser | parse_document(path) → dict (remote Docling result) |
| MultimodalParser | from gaik.software_components.parsers import MultimodalParser | parse(pdf_path) → ParseResult (OpenAI / Claude / Gemini) |
| Transcriber | from gaik.software_components.transcriber import Transcriber | transcribe(path) → TranscriptionResult |
| TranscriptEnhancer | from gaik.software_components.enhance_transcript import TranscriptEnhancer | enhance_text(text) / enhance_file(path) |
| ParallelTranscriber | from gaik.software_components.parallel_transcriber import ParallelTranscriber | transcribe(path) → TranscriptionResult |
| TextToSpeech | from gaik.software_components.text_to_speech import TextToSpeech | synthesize(text) → SpeechSynthesisResult |
| DocumentClassifier | from gaik.software_components.doc_classifier import DocumentClassifier | classify(file_or_dir, classes) |
| JevClassifier | from gaik.software_components.jev_classifier import JevClassifier | classify(text, classes, min_confidence=...) |
| FormUnderstander | from gaik.software_components.form_understander import FormUnderstander | clean_labels(fields, language_hint="fi") → dict[str, str] (cryptic ASP.NET / generated form ids → readable labels) |
| PostgresAgent | from gaik.software_components.postgres_agent import PostgresAgent | ask(question) → AnswerResult (text-to-SQL agent: introspects schema, generates validated read-only SQL, runs it, answers; also get_schema() / generate_sql() / query() / run_sql(); install gaik[postgres-agent]) |
| TabularAgent | from gaik.software_components.tabular_agent import TabularAgent | ask(question) → AnswerResult (text-to-SQL agent for files: loads CSV/Excel/Parquet/JSON into DuckDB, profiles columns, generates validated read-only SQL, answers; cleans up messy report sheets — title rows, subtotals, Nordic comma-decimals; one table per Excel sheet so cross-sheet joins work; same get_schema() / run_sql() tool surface as PostgresAgent; install gaik[tabular-agent]) |
| LLMJudge | from gaik.software_components.validators import LLMJudge | validate(source_pages, extracted, rubric) → ValidationResult (rubric scoring; Likert 1-5 via rubric.scoring_mode="likert_1_5") / detect_hallucinations(source, extracted) → schema-agnostic post-validator / judge_text_pair(a, b) → text-vs-text equivalence (multi-provider) |
| LLMJudgePanel | from gaik.software_components.validators import LLMJudgePanel | validate(source_pages, extracted, rubric) → JudgePanelResult (3+ judges, majority vote, agreement metric) |
| compare_pairwise | from gaik.software_components.validators import compare_pairwise | compare_pairwise(judge, pages, a, b, swap_and_average=True) → PairwiseResult (A/B with position-bias mitigation) |
| calibrate_against_human_labels | from gaik.software_components.validators import calibrate_against_human_labels | calibrate_against_human_labels(judge, dataset) → CalibrationReport (Pearson r vs. human raters) |
| FinnishTextProcessor | from gaik.software_components.RAG.finnish_text_processor import FinnishTextProcessor | lemmatize(text) / to_tsvector_text(text) / expand_query(text) (Finnish lemmatization + compound splitting; backends: voikko / spacy / uralic / simple) |
| ExtractionEvaluator | from gaik.software_components.evaluators import ExtractionEvaluator | evaluate_dataset(dataset, extracted_outputs) → ExtractionEvaluationResult (field-level P/R/F1 + hallucination rate; optional semantic mode via LLMJudge) |
| RAGEvaluator | from gaik.software_components.evaluators import RAGEvaluator | evaluate_dataset(items) → RAGEvaluationResult (RAGAS-style faithfulness / answer_relevance / context_precision / context_recall via LLMJudge) |
| BatchEvaluationRunner | from gaik.software_components.evaluators import BatchEvaluationRunner | run(dataset) → RunnerResult (applies a pipeline callable over a dataset; on_error="skip" tolerates failures) |
Every parser ships a class and a module-level convenience function, and the two do not agree on return type — the class method gives you the text, the function gives you a metadata dict. Reaching for the shorter name is the easy mistake:
parser = PyMuPDFParser()
text = parser.parse_pdf("doc.pdf") # -> str
result = parse_pdf("doc.pdf") # -> dict, text lives under result["text_content"]The same split applies to DocxParser.parse_docx / parse_docx, and every
parse_document variant returns a dict on both the class and the function.
"whisper", "whisper-1", "gpt-4o-transcribe", "whisper_local"enhanced_transcript=True runs output through TranscriptEnhancer (two-pass LLM correction)whisper_local requires local_api_base + local_api_key; language="fi" selects Finnish fine-tuned modelffmpeg + ffprobe on $PATHfrom gaik.software_components.transcriber import segments_to_srt, segments_to_vtt, parse_srt, chunk_segmentsfrom gaik.software_components.RAG.pg_vector_store import PgVectorStore, ingest_video_segments, format_search_resultsCore RAG classes in gaik.software_components.RAG.*. For full API, see RAG Reference.
| Component | Import | Key Method |
|---|---|---|
| Embedder | from gaik.software_components.RAG.embedder import Embedder | embed(docs), embed_query(text) |
| VectorStore | from gaik.software_components.RAG.vector_store import VectorStore | add(docs, embeddings), search(vec, top_k) |
| PgVectorStore | from gaik.software_components.RAG.pg_vector_store import PgVectorStore | search_hybrid(vec, text, top_k) |
| Retriever | from gaik.software_components.RAG.retriever import Retriever | search(query, top_k, hybrid_search, re_rank) |
| Ranker | from gaik.software_components.RAG.ranker import Ranker | fuse(*lists, weights) → weighted RRF; also rerank(query, results), order_by(results, field, direction) for asc/desc, to_documents(results); reorders lists you already have, no IO; install gaik[ranker] (cross-encoder needs gaik[ranker-rerank]) |
| AnswerGenerator | from gaik.software_components.RAG.answer_generator import AnswerGenerator | generate(query, documents, stream) |
| VisionRagParser | from gaik.software_components.RAG.rag_parser_vision import VisionRagParser | convert_doc_to_chunks_with_vision(path) |
| DoclingRagParser | from gaik.software_components.RAG.rag_parser_docling import DoclingRagParser | convert_pdf_to_chunks_with_metadata(path) |
Composed pipelines in gaik.software_modules.*. For full API, see Software Components Reference.
| Pipeline | Flow | Import |
|---|---|---|
| AudioToStructuredData | Audio → Transcript → Schema → JSON | from gaik.software_modules.audio_to_structured_data import AudioToStructuredData |
| DocumentsToStructuredData | PDF/DOCX → Parse → Schema → JSON | from gaik.software_modules.documents_to_structured_data import DocumentsToStructuredData |
| RAGWorkflow | PDF → Parse → Embed → Store → Retrieve → Answer | from gaik.software_modules.RAG_workflow import RAGWorkflow |
| MultiSourceReportGenerator | Mixed files (PDF/DOCX/Excel/audio/images) → Normalize → Sectioned Markdown report | from gaik.software_modules.multi_source_report_generator import MultiSourceReportGenerator |
AudioToStructuredData / DocumentsToStructuredData: pipeline = Pipeline(use_azure=True) → result = pipeline.run(file_path=..., user_requirements=...) (keyword-only arguments).RAGWorkflow has no run(): workflow.index_documents([path, ...]) → IndexResult, then workflow.ask(query) → RAGWorkflowResult.MultiSourceReportGenerator.run(input_paths=..., sections=...) takes source files plus a report structure (section titles + per-section instructions) and returns the assembled Markdown report with a per-section breakdown.Each stage can use its own provider; an omitted stage config falls back to the shared api_config (or the legacy use_azure default). Constructor arguments: DocumentsToStructuredData(parser_config=, extraction_config=), AudioToStructuredData(transcription_config=, extraction_config=) (transcription stays OpenAI/Azure), RAGWorkflow(parser_config=, embedding_config=, answer_config=). MultiSourceReportGenerator takes them per run as api_config inside parser_options, image_options, writer_options, review_options, and transcriber_options={"ctor": {"api_config": ...}}.
| Level | Concept | Examples |
|---|---|---|
| Service | Logical capability | speech_to_text, document_parsing, information_extraction, rag |
| Building block | Atomic toolkit class/function | Transcriber, ParallelTranscriber, TranscriptEnhancer, TextToSpeech, SchemaGenerator, DataExtractor, VisionParser, Embedder, VectorStore, PgVectorStore, Retriever, AnswerGenerator |
| Software component | Composed, workflow-ready unit | AudioToStructuredData, DocumentsToStructuredData, RAGWorkflow, MultiSourceReportGenerator |
Token usage, execution time, and provider-specific pricing for all LLM calls. A shared UsageRecord type ensures all components report data in the same format regardless of provider (OpenAI / Azure / Anthropic / Google).
from gaik.observability import (
UsageRecord, build_usage_record, # uniform usage shape
compute_cost_usd, lookup_price, # cost from prompt/completion tokens
measure_duration, # context-manager timing helper
openai_usage_to_dict, # OpenAI-shape → dict normalizer
OPENAI_PRICING_PER_M, ANTHROPIC_PRICING_PER_M, GEMINI_PRICING_PER_M,
)Use when building a dashboard, logging pipeline, or compliance reporter that needs a unified cost/duration report across providers.
Documented in guidance_layer/website/content/docs/use-cases/: incident reporting, dental transcription & captioning, semantic dental video search, construction diary, dental learning assistant, purchase order processing, report writing, sales proposal generation, customer onboarding.
When adding or modifying a component, update both documentation locations:
| What changed | Update |
|---|---|
| New/modified building block or pipeline | guidance_layer/docs/software_components/ or guidance_layer/docs/software_modules/ |
| New/modified building block or pipeline | guidance_layer/website/content/docs/toolkit/software-components.mdx or software-modules.mdx |
| New use case or example | guidance_layer/website/content/docs/use-cases/ (new .mdx file) |
| New examples added | implementation_layer/examples/ + README updated |
guidance_layer/docs/: Technical Markdown docs (API-level details, constructor params)guidance_layer/website/content/docs/: User-facing MDX for the Fumadocs websitepnpm dev from guidance_layer/website/ to preview website changesgaik-add-examples skill Step 6 — the canonical follow-up workflowNon-obvious things that cause real mistakes in this repo. Check here before assuming.
pnpm, not bun. Everything else in toolkit_demo_app/ uses bun. Running bun dev inside guidance_layer/website/ silently installs a second lockfile and breaks Fumadocs build.meta.json updates. When adding a new .mdx page under content/docs/, also add it to the parent directory's meta.json, or it will not appear in the navigation.ParallelTranscriber requires ffmpeg + ffprobe on $PATH. On Windows that means installing ffmpeg and adding its bin/ to PATH — there is no Python wheel fallback.whisper_local model needs local_api_base + local_api_key. language="fi" switches to the Finnish fine-tuned model. Leaving local_api_base unset fails with an unhelpful OpenAI-style error.__version__ strings by hand. The package version is derived from the git tag by setuptools-scm. Manual edits desync the wheel and break the PyPI publish workflow's version validation."*". In the OpenShift API deployment, CORS_ORIGINS='["*"]' works; plain * crashloops (pydantic-settings parses the env var as a list[str]).additionalProperties. Prefer an explicit list-of-entries model (see FormUnderstander.LabelEntry) over a free-form dict.© GAIK-project, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 10 other files (scripts, references) in .claude/skills/gaik-toolkit of GAIK-project/gaik-toolkit.
Open the folder on GitHubat commit e66fcca
Gaik Toolkit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Gaik Toolkit this skillGAIK-project/gaik-toolkit | 100 | — | ~5.7k | Automated safety check: Pass | MIT | |
| Doclingzhuzhaoyun/Molio | 433 | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| Markitdownjimmc414/Kosmos | 595 | 2 repos | ~1.7k | Automated safety check: Pass | None | |
| Excel and CSV Data Analysisbytedance/deer-flow | 84k | 4 repos | ~2.2k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| MineruNebutra/MinerU-Skill | 123 | — | ~1.4k | Automated safety check: Pass | MIT |
zhuzhaoyun/Molio
PRIMARY skill for converting .pdf, .docx, .pptx, .xlsx, .doc, .ppt, .xls, images, and audio/video files (.mp3, .wav, .m4a, .mp4, .mov, etc.) to Markdown.
jimmc414/Kosmos
Convert various file formats (PDF, Office documents, images, audio, web content, structured data) to Markdown optimized for LLM processing.
bytedance/deer-flow
Analyzes uploaded Excel and CSV files with SQL through DuckDB, producing schema inspections, statistical summaries and exports to CSV, JSON or Markdown.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Nebutra/MinerU-Skill
An AI-Native skill for parsing PDF / Office / image files into clean Markdown with MinerU — a fast, zero-config document parser for AI agents.
Team-Commonly/commonly
Convert binary documents (PDF, DOCX, XLSX, PPTX, HTML, EPUB, images) to clean LLM-friendly Markdown using Microsoft's markitdown Python tool.
GAIK-project/gaik-toolkit
Builds a visual, editable PowerPoint (.pptx) deck with speaker-ready notes, exact timing, citations and a layout-checked design from a topic, an audience and a length, using only the user's own…
GAIK-project/gaik-toolkit
Extracts structured data — fields, tables, line items — out of documents into a validated schema using the gaik toolkit, and designs schemas that stay inside provider limits and produce checkable…
GAIK-project/gaik-toolkit
Converts PDFs, scans, and Word documents into text or markdown with the gaik toolkit's parsers, choosing the parser that will not silently destroy the structure the downstream task depends on.
GAIK-project/gaik-toolkit
Builds and debugs retrieval with the gaik toolkit — PgVectorStore, Ranker, FinnishTextProcessor, RelevanceGate — as hybrid search: pgvector similarity plus Postgres full-text, fused by rank, and the…
GAIK-project/gaik-toolkit
Extracts structured data from Finnish construction site daily diary audio recordings (Työmaapäiväkirja) and creates a formatted Word document with extracted fields.
GAIK-project/gaik-toolkit
Adds or updates working code examples for GAIK toolkit components and pipelines in implementationlayer/examples/.
GAIK toolkit overview and reference. An agent skill from GAIK-project/gaik-toolkit. Gaik Toolkit is an agent skill from GAIK-project/gaik-toolkit. GAIK toolkit overview and reference.
Gaik Toolkit fits situations like: needing context on GAIK components (extractors; the repository structure; configuration pattern; environment variables.
Run `npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a claude-code`. Or copy the skill folder (.claude/skills/gaik-toolkit in GAIK-project/gaik-toolkit) into .claude/skills/gaik-toolkit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a codex`. Or copy the skill folder (.claude/skills/gaik-toolkit in GAIK-project/gaik-toolkit) into .agents/skills/gaik-toolkit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GAIK-project/gaik-toolkit --skill gaik-toolkit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gaik-toolkit, .gemini/skills/gaik-toolkit, .github/skills/gaik-toolkit and .opencode/skills/gaik-toolkit in your project.
Going by SKILL.md and its folder, Gaik Toolkit needs Python for the scripts in its folder, the command-line tools its instructions call (bun, pnpm, pip and python) and credentials named AITTA_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY and AZURE_API_KEY. Our summary lists: Python 3; A credential in AZURE_API_KEY; A credential in OPENAI_API_KEY.
SKILL.md names 3 domains. As links in the text: gaik-project.github.io, gaik-demo.2.rahtiapp.fi and pypi.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Gaik Toolkit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.7k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 26k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Gaik Toolkit: Docling (zhuzhaoyun/Molio, 433 stars), Markitdown (jimmc414/Kosmos, 595 stars), Excel and CSV Data Analysis (bytedance/deer-flow, 84k stars) and Markitdown (ImCa0/just-laws, 781 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
GAIK-project (a GitHub organization) maintains it in GAIK-project/gaik-toolkit, which has 100 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.
Source: GAIK-project/gaik-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.