Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Friday Chat

Terminal chat application for the Friday Framework.

Friday Chat provides the user-facing command-line chat experience built on the Friday runtime, memory, agent, LLM, transcript, and tools packages.

MCP client tools

The distributed config.example.yaml and packaged src/friday_chat/config_templates/config.example.yaml include the same default-disabled MCP stanza. Copy the runtime example to an editable config outside the package, then configure local stdio or an explicitly admitted HTTPS Streamable HTTP peer under tools.providers.mcp. Run friday-chat --config /path/to/config.yaml --runtime real to use real providers; the CLI's default fake runtime does not connect to MCP peers. The MCP client guide has a checkout-local peer example and the exact selected-mode tool-name filter.

Friday Chat selects registered tools per turn. MCP schema tokens and result reservation reduce the remaining memory retrieval budget while preserving its configured floor. Checked, bounded tool results can appear in transcript records; direct MCP long-term memory ingestion remains disabled until an explicit sanitized server/tool opt-in. Diagnostics are available through the MCP provider owner; no Chat MCP health command is present. Keep secrets in process environment variables, not the editable YAML or runtime state directory. External config_file includes and integrated remote transports are deferred.

Install

pip install friday-chat==0.1.0a3

Run

friday-chat --help

Import Package

import friday_chat

Model Library Configuration

Friday Chat 0.1.0a3 uses one provider-independent model library for primary chat, extraction, passage routing, compaction, maintenance, embeddings, and smart-file processing. Copy both packaged examples into the same directory, rename the model library if desired, and keep its path relative to the runtime configuration file.

model_library:
  path: ./models-config.yaml
llm_pool:
  default_service: chat
  services:
    chat:
      profile: qwen38_chat_local
    extraction:
      profile: qwen36_chat_local
      generation_overrides:
        reasoning: {mode: disabled}
        sampling: {temperature: 0.0}
        max_tokens: 8000
embedding_pool:
  default_service: memory
  services:
    memory:
      profile: nomic_embedding_local
extraction:
  llm_service: extraction
embedding:
  embedding_service: memory

The referenced models-config.yaml stores reusable endpoint and model identity, but never a secret value:

schema: friday.model-library/v1
credentials:
  local_lmstudio:
    env: FRIDAY_LLM_API_KEY
endpoints:
  local_lmstudio:
    api_base: http://127.0.0.1:1234/v1
    provider: openai_compatible
    serving_engine: lm_studio
    default_credential: local_lmstudio
profiles:
  qwen38_chat_local:
    kind: chat
    endpoint: local_lmstudio
    dialect: openai_chat_completions
    model: openai/qwen3.8-27b-mlx
    model_target:
      model_id: qwen3.8-27b-mlx
      family: qwen3_8
      revision: replace-with-exact-served-revision

Export every credential selected by an enabled service before startup. The packaged example uses FRIDAY_LLM_API_KEY, FRIDAY_OPENROUTER_API_KEY, and FRIDAY_MOONSHOT_API_KEY. If you maintain a local .env, source it first; Friday Chat does not load .env files implicitly. For hosted providers, define a credential entry whose env names the provider key and select that credential from each least-privilege service binding. Never put the key itself in either YAML file.

Friday LLM provides the built-in normalized reasoning profile for LM Studio, OpenAI-compatible Chat Completions, and Qwen3.8. Other transports continue to work through compatibility behavior but are not automatically assigned that capability profile.

Provider-specific controls, when needed, use a bounded provider_options object with an explicit namespace. Arbitrary provider keyword dictionaries are not accepted. Prefer normalized generation fields when they express the same intent.

Legacy Compatibility

The former flat fields remain accepted through the 0.1.x compatibility window:

Legacy field Canonical field
llm.temperature llm.generation.sampling.temperature
llm.top_p llm.generation.sampling.top_p
llm.top_k llm.generation.sampling.top_k
llm.max_tokens llm.generation.max_tokens
llm.thinking llm.generation.reasoning.mode

Legacy configurations without explicit targets retain their previous behavior and produce startup migration diagnostics. With explicit targets, flat fields are converted to typed generation controls. Equal flat and nested values are accepted with a diagnostic; contradictory values fail before provider I/O.

top_p and top_k were present in earlier Friday Chat YAML but were not forwarded by its legacy adapter. They become effective on the typed path. Wire emission proves forwarding, not that every endpoint behaviorally honors the setting.

License

MIT

Local telemetry

Chat telemetry defaults to disabled. Enable the local diagnostic provider with:

telemetry:
  enabled: true
  provider: debug

The CLI reports telemetry state at startup. Embedded applications can inspect runtime.telemetry.snapshot() for immutable runtime/application lifecycle and validated MCP and LLM event records. The observer retains the newest 256 records and cumulative drop, rejection, and delivery-failure counts; these records remain in process memory. A failed injected sink remains visible as failed, while Chat continues operating and local inspection remains available.

build_runtime(config, telemetry=provider) accepts any existing TelemetryInterface implementation as a caller-owned override, including when YAML telemetry is disabled. Chat wraps it with the same typed content boundary and never closes it. Only allowlisted lifecycle, MCP and closed version-one LLM attributes are forwarded. Prompts, responses, reasoning, memory, schemas, arguments, results, paths, exception messages, and raw session identifiers are excluded.

The real framework runtime passes the same enabled observer to primary chat, embedding, extraction, passage routing, compaction, SmartFileRead and explicit maintenance services, through canonical pools and legacy configuration. Disabled assembly passes None. Construction creates no LLM request or exporter. Roles identify constructed services: legacy extraction can alias maintenance_default, and compaction can alias maintenance_researcher or the default. Shared instances keep their role rather than being relabelled by concurrent consumers.

LLM events contain generated request/attempt/batch identities, truthful reported usage and bounded timing/cost estimates; no LLM span remains open across stream yields. Built-in pricing is historical early-2025 data, not current billing, and failed attempts may have unknown charges. Turn correlation and local execution metrics are described below. Remote exporter assembly and optional Langfuse compatibility remain later work. The langfuse section is not activated by local telemetry. Unsupported telemetry providers and fields fail config validation; the shared framework telemetry defaults and raw transcript capture settings are unchanged.

Execution diagnostics

Enabled Chat telemetry links one opaque turn reference across model requests, native/MCP dispatch, memory retrieval, and the existing persistence path. Tool failure records retain their failed/blocked meaning. Intermediate persistence completion is distinct from full-turn success; these observations do not promise atomic rollback or durable commit acknowledgements absent from the underlying API. The accepted MCP receipt/publication events preserve pending versus published truth.

TurnResult.correlation_context and PendingExtractionTurn.correlation_context are optional, immutable, process-local origin metadata. Background extraction rebinds each item's origin independently and preserves retry/requeue behavior, including committed extraction followed by cancellation. Old/custom results and work items default to uncorrelated behavior. Borrowed sinks remain caller-owned.

Existing /debug and /timing now include safe last-turn outcome/persistence and bounded execution counters, even for failed turns without a result. Snapshots retain at most256 event records,32 terminal summaries,128 active spans and fixed operation/outcome histogram labels. They contain no prompt, reasoning, tool arguments/results/names, memory/document contents, paths, raw IDs or exception text. Diagnostics remain available with remote exporters off or failing. Disabled telemetry preserves prior invocation behavior and produces no execution events.

Execution spans deliver synchronous sink calls in private per-frame contexts. Active owned children retain explicit parents; independent background items, including explicit absent origins, cannot inherit a foreground sink stack. None origins emit session-only facts and do not contribute to foreground accounting. Known rejected MCP calls use trusted membership for their closed rejection counts. Execution schema versions require actual integer1, including forged-instance entry. Acquired close-capable model iterators are explicitly awaited before terminal return through direct, legacy and typed stream paths. Cleanup preserves an active callback, model or cancellation exception; chunk ordering, heartbeat and buffering stay intact.

MCP YAML can explicitly select stdio protocol_profile:modern/auto, or HTTP protocol_version:'2026-07-28'/'2025-11-25'. HTTP uses the same strict Runtime parser, remote opt-ins and actual-connect network policy. Bearer authentication stores only a literal credential_env reference in config; ${...} syntax is rejected before generic Chat interpolation. No inline token, HTTP header override, TLS relaxation or insecure endpoint is accepted. The existing turn selection, result sanitizer, quarantined transcript/provenance and explicit memory opt-in apply to remote tools. Telemetry remains injected and provider-neutral; Langfuse is a separate optional queued implementation.

Metadata

Release files for friday-chat 0.1.0a3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for friday-chat 0.1.0a3
File Size Uploaded Provenance
friday_chat-0.1.0a3.tar.gz 334.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for friday-chat 0.1.0a3
File Interpreter ABI Platform
friday_chat-0.1.0a3-py3-none-any.whl Python 3 none any Details

Total release size: 543.7 kB

Release files / friday_chat-0.1.0a3.tar.gz

Download URL friday_chat-0.1.0a3.tar.gz
Size 334.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ade13b00a5a6ea80772f4e68b6e44b51e033b7f91bcd56b68af03597e355e00b
BLAKE2b-256 checksum
How to use checksums
19f397f562daf7cd3fde0b9f61bbe5aec9e6924a31862ce9c30959736579d6ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / friday_chat-0.1.0a3-py3-none-any.whl

Download URL friday_chat-0.1.0a3-py3-none-any.whl
Size 209.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e6418b158d3268bcf5390742ecf5301aaf2209342ab7320347d313081e515efe
BLAKE2b-256 checksum
How to use checksums
c494994ff836ae1b049d35c3e0a9de57ab0ac8b36cbc54b8c17d89d285e998f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.3 {"installer":{"name":"uv","version":"0.11.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for friday-chat 0.1.0a3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page