]> git.giacomolli.uk - onechat/blobdiff - README.rst
Quote long text in issues as a blockquote
[onechat] / README.rst
index df03c4f647b5575ada6afa6b73fe133490eef73d..c74a815ee0387db961d3d4d1953b8280114d23e0 100644 (file)
@@ -5,6 +5,83 @@
 OneChat is a Go program. It prints its name. It is in early development.
 Linux is supported.
 
+****************
+ Data directory
+****************
+
+OneChat keeps its data and its token file in one directory. It uses the
+first of these:
+
+#. ``ONECHAT_DIR``, when it is set.
+#. ``$XDG_DATA_HOME/onechat``, when ``XDG_DATA_HOME`` is an absolute
+   path. A relative value is ignored.
+#. ``~/.local/share/onechat``. With no home directory, OneChat exits
+   with an error.
+
+OneChat creates the directory with mode 0700.
+
+***************
+ Configuration
+***************
+
+``config.json`` in the data directory holds the settings. OneChat does
+not create it. A missing file or field takes the default, and an unknown
+field is an error.
+
+.. code:: json
+
+   {
+     "endpoint": "chatgpt",
+     "compactor": {"model": "gpt-6-luna", "effort": "high"}
+   }
+
+``endpoint``
+   ``chatgpt`` (the default) sends model calls to the ChatGPT backend
+   with the subscription login. ``api`` sends them to the OpenAI API
+   with the key in ``OPENAI_API_KEY``, which must then be set. With
+   ``chatgpt``, OneChat ignores ``OPENAI_API_KEY``.
+
+``compactor``
+   The model and the reasoning effort of the summaries. The defaults are
+   ``gpt-6-luna`` and ``high``.
+
+*******
+ Login
+*******
+
+The ``chatgpt`` endpoint needs a login with a ChatGPT account:
+
+.. code:: console
+
+   onechat login
+
+The command shows a link and a code. Open the link on any device, enter
+the code, and approve the login. Device code login must be allowed in
+the ChatGPT security settings. OneChat writes the tokens to
+``auth.json`` in the data directory, with mode 0600, and refreshes them
+before they expire. The file belongs to OneChat only. Do not share it
+with the Codex CLI, because each program rotates the refresh token and
+logs the other out.
+
+*******
+ Probe
+*******
+
+``onechat probe LOG COUNT`` measures the compactor on a log. It appends
+the first COUNT messages of LOG, one JSON object ``{"kind", "text"}`` on
+each line, to a new chat in ``probe/`` in the data directory, and builds
+its tree with real model calls. The calls use the quota of the account.
+The run stops at the first failed call, or when the used percent of a
+quota window grows by more than 15 points. At the end it reports the
+calls per message, the cached share of the input tokens, the retries,
+the line sizes, and the quota at the first and the last call.
+
+A test writes a generated log of readable made-up messages:
+
+.. code:: console
+
+   ONECHAT_PROBE_LOG=probe.jsonl go test -run TestProbeLogHasTheSyntheticMix
+
 *************
  Development
 *************