Metadata-Version: 2.4
Name: ovos-skill-wiki-offline
Version: 0.0.7
Summary: Fully offline general-knowledge fallback for OVOS, covering Wikipedia's own ~9,000 Level 4 Vital Articles - an offline alternative to Wikipedia/DDG/Wolfram Common Query skills
Home-page: https://github.com/andlo/ovos-skill-wiki-offline
Author: Andreas Lorensen
Author-email: andlo@outlook.dk
License: GPL-3.0-or-later
Project-URL: Source, https://github.com/andlo/ovos-skill-wiki-offline
Project-URL: Bug Tracker, https://github.com/andlo/ovos-skill-wiki-offline/issues
Keywords: ovos skill voice assistant offline wikipedia encyclopedia common query fallback
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: End Users/Desktop
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: requires-python
Dynamic: summary

# <img src='icon.png' card_color='#8E44AD' width='50' height='50' style='vertical-align:bottom'/> Wiki Offline

A fully offline general-knowledge fallback for OVOS - "who was
Charlie Chaplin", "what is the Eiffel Tower", "tell me about tomato".
An offline alternative to `ovos-skill-wikipedia`/`ovos-skill-ddg`/
`ovos-skill-wolfie` for the topics covered by each language's own
Wikipedia "Level 4 Vital Articles" equivalent - the subjects that
language's Wikipedia community itself has curated as the most
essential encyclopedia entries. No internet connection needed at
runtime for the natively-supported languages. **English, Spanish, and
French are natively supported; any other language works too via
on-demand translation - see [Language support](#language-support)
below.**

[![Tests](https://github.com/andlo/ovos-skill-wiki-offline/actions/workflows/test.yml/badge.svg)](https://github.com/andlo/ovos-skill-wiki-offline/actions/workflows/test.yml)
[![PyPI version](https://img.shields.io/pypi/v/ovos-skill-wiki-offline.svg)](https://pypi.org/project/ovos-skill-wiki-offline/)

- [Usage](#usage)
- [What this is (and isn't)](#what-this-is-and-isnt)
- [Language support](#language-support)
- [A Common Query + Fallback skill, not a fixed intent](#a-common-query--fallback-skill-not-a-fixed-intent)
- [Data sourcing and licensing](#data-sourcing-and-licensing)
- [Known limitations](#known-limitations)
- [Install](#install)
- [Development](#development)

## Usage
```
"who was Charlie Chaplin"
"what is the Eiffel Tower"
"tell me about tomato"
"what do you know about photosynthesis"
"where is Mount Everest"
"quién fue Charlie Chaplin"       (Spanish)
"cuéntame sobre el Tomate"        (Spanish)
"qui était Charlie Chaplin"       (French)
"parle-moi de la Tomate"          (French)
"hvem var Charlie Chaplin"        (Danish, via translation - see below)
"wer war Charlie Chaplin"         (German, via translation - see below)
```

## What this is (and isn't)

An **encyclopedia lookup**, not a reasoning engine. It resolves a
single named entity from the question and speaks that entity's own
short summary. It can answer "what is a tomato" but not "are tomatoes
and potatoes related" - the second is a comparison across two
entities, and there's no structured data being compared here, only
free-text extracts (some relational questions get answered by luck,
when one entity's own summary happens to mention the other - not by
design). See DEVELOPMENT.md for the reasoning.

## Language support

| Language | How | Notes |
|---|---|---|
| English (`en-us`) | Native, bundled data | ~10,000 topics |
| Spanish (`es-es`) | Native, bundled data | ~6,200 topics - 3 of 11 topic categories are missing from the source list itself, see [Known limitations](#known-limitations) |
| French (`fr-fr`) | Native, bundled data | ~10,000 topics |
| Any other language | On-demand translation | Works automatically, no bundled data - **requires a translation plugin to be installed and configured, see below** |

The natively-supported languages need nothing beyond `pip install
ovos-skill-wiki-offline` - the data ships with the skill. For every
other language (German and Danish included), this skill translates
the question and answer on the fly, using whatever OVOS translation
plugin is configured on the device - it doesn't ship or require one
itself. Recommended:
**[ovos-translate-plugin-nllb](https://github.com/OpenVoiceOS/ovos-translate-plugin-nllb)**,
which runs a local NLLB-200 model (no internet connection needed once
the model is downloaded, unlike `ovos-translate-plugin-server`, which
calls a remote server by default). See [Install](#install) below for
the setup steps. Translated answers take a few extra seconds
(typically 2-5s) compared to a native-language answer - see
DEVELOPMENT.md "Ad-hoc translation for unsupported languages" for
measured performance and the full design reasoning.

## A Common Query + Fallback skill, not a fixed intent

Every sibling skill in this project family (geography, geometry,
convert, calculator) uses fixed Padatious intents as the primary
path. This one doesn't - ~10,000 arbitrary proper nouns don't fit a
bounded intent-slot vocabulary the way 194 countries or 24 geometry
terms do. Instead this skill competes via Common Query (alongside
Wikipedia/DDG/Wolfram, when the platform routes a question there) and
catches whatever's left via a Fallback handler - the same dual
pattern `ovos-skill-wolfie` already uses. See DEVELOPMENT.md for the
full reasoning, including why this needed extending `FallbackSkill`
specifically (not just adding the `@fallback_handler` decorator to a
plain skill).

## Data sourcing and licensing

Article titles and summaries both come directly from Wikipedia's own
official APIs - the Level 4 Vital Articles category structure for the
title list, and the REST summary API for the short spoken extracts.
Wikipedia content is CC BY-SA 4.0; this skill bundles it offline the
same way `ovos-skill-wikipedia` reads it aloud live. **Full
attribution and licensing details, plus why Level 4 was chosen over
Kiwix/ZIM, DBpedia, or Wikipedia's own larger vital-article levels:
[CREDITS.md](CREDITS.md)** and **[DEVELOPMENT.md](DEVELOPMENT.md)**.

## Known limitations

- **Non-native languages need a translation plugin configured** - see
  [Language support](#language-support) and [Install](#install).
- **The Spanish dataset is smaller** (~6,200 topics vs ~10,000 for
  English/French) - 3 of Spanish Wikipedia's own 11 topic categories
  (biology/health, physics, social sciences) don't actually exist as
  pages despite the source list claiming full completion. See
  DEVELOPMENT.md "The Spanish gap" for the full story - this means
  Spanish can't currently answer biology, physics, or social-science
  questions.
- **Single-entity lookup, not relational reasoning** - see above and
  DEVELOPMENT.md.
- **A snapshot, not a live mirror** - each `data/summaries_<lang>.json`
  reflects Wikipedia as of whenever `data/build_data.py` was last run
  for that language, not the current live article.
- **Scope is Level 4** (~10,000 topics for en-us/fr-fr) - Level 5
  (50,000 articles) exists as a natural future extension (Level 4 is
  a strict subset), not built in v1.

## Install

```bash
pip install ovos-skill-wiki-offline
```

That's enough for English, Spanish, and French. **For any other
language** (German, Danish, or anything else), also install and
configure a translation plugin - see [Language support](#language-support)
above for why this skill doesn't bundle one itself. Recommended,
fully-local option:

```bash
pip install ovos-translate-plugin-nllb
```

Then add this to `~/.config/mycroft/mycroft.conf` (or wherever your
OVOS config lives):

```json
{
  "language": {
    "translation_module": "ovos-translate-plugin-nllb",
    "ovos-translate-plugin-nllb": {
      "model": "nllb-200_600M_int8"
    }
  }
}
```

Restart `ovos-core` after installing/configuring. The model
(~600MB) downloads automatically on first use and takes roughly 40
seconds to load the first time a translated answer is requested after
each restart - after that it stays loaded for the rest of the
session. Full plugin details, other model size options, and GPU
configuration:
**[ovos-translate-plugin-nllb on GitHub](https://github.com/OpenVoiceOS/ovos-translate-plugin-nllb)**.

Any OTHER OVOS translation plugin works too, as long as
`language.translation_module` points to it - this skill uses
whatever's configured, generically, not specifically NLLB.

## Development

See [DEVELOPMENT.md](DEVELOPMENT.md).

## Category
**Information**

## Tags
#wikipedia #offline #encyclopedia #reference #commonquery #fallback
