From 58686adc6782b5267be43188edc99123477bad26 Mon Sep 17 00:00:00 2001 From: J2-D2-3PO <188380414+J2-D2-3PO@users.noreply.github.com> Date: Thu, 12 Dec 2024 08:02:58 -0700 Subject: [PATCH 1/2] docs(weave): Update intro to reflect product map --- docs/docs/introduction.md | 108 ++++++++++++++++++++++++++++---- docs/static/img/weave-cycle.png | Bin 0 -> 79296 bytes 2 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 docs/static/img/weave-cycle.png diff --git a/docs/docs/introduction.md b/docs/docs/introduction.md index 79c56db5e238..36164d853530 100644 --- a/docs/docs/introduction.md +++ b/docs/docs/introduction.md @@ -2,24 +2,108 @@ slug: / --- -# Introduction +# Introduction to Weave -**Weave** is a lightweight toolkit for tracking and evaluating LLM applications, built by Weights & Biases. +Weave is a tool for exploring, evaluating, and deploying LLM-based applications. Designed for flexibility and scalability, Weave supports every stage of the LLM workflow, from initial experimentation to systematic iteration and deployment. -Our goal is to bring rigor, best-practices, and composability to the inherently experimental process of developing AI applications, without introducing cognitive overhead. +The Weave workflow supports three major stages, organized as a loop: -**[Get started](/quickstart)** by decorating Python functions with `@weave.op()`. +1. [Exploration](#exploration): Experiment with prompts, pipelines, and initial test cases. +2. [Systematic Iteration](#systematic-iteration): Build evaluation datasets, compare models, and improve system performance. +3. [Launch and Learn](#launch-and-learn): Deploy applications, collect feedback, and iteratively refine. -![Weave Hero](../static/img/weave-hero.png) +Each stage includes specific substages that connect to core Weave features, as visualized in the diagram. -Seriously, try the 🍪 **[quickstart](/quickstart)** 🍪 or {window.analytics?.track("Weave Docs: Quickstart colab clicked")}}>Open In Colab +--- + +![Weave usage lifecycle](../static/img/weave-cycle.png) + +## Exploration + +**Objective**: Early-stage experimentation to explore potential solutions and define tasks. -You can use Weave to: +### Experiment +- **User Activities**: Experimenting with prompts and pipelines (e.g., Retrieval-Augmented Generation, or RAG). +- **Related Weave Features**: + - **App Tracing & Debugging**: 🟢 Lightweight tracing for quick insights. + - **LLM Playground**: 🔵/🚧 Integrated environment for replayable experimentation. + - **Cost Tracking**: 🟢 Understand and optimize resource usage. +- **Outcome**: Insights into initial LLM behaviors and problem framing. + +### Fine-Tune +- **User Activities**: Fine-tuning frontier models with domain-specific data. +- **Related Weave Features**: + - **Prompt Management & Versioning**: 🔵/🚧 Track and refine prompt iterations. + - **Fine-Tune Tracking**: 💡 Monitor training improvements. +- **Outcome**: Models tailored to specific domains or applications. + +--- + +## Systematic Iteration + +**Objective**: Rigorous testing and evaluation to prepare for production. + +### Evaluate +- **User Activities**: Building evaluation datasets and scoring methods. +- **Related Weave Features**: + - **Evaluation Framework**: 🟢/📝 Code- and UI-based framework with intelligent caching. + - **Built-in Scorers**: 🔵 Automated scoring for datasets. +- **Outcome**: Confidence in model accuracy and reliability. + +### Compare +- **User Activities**: Comparing models and techniques. +- **Related Weave Features**: + - **Model Management**: 🟢 Seamlessly organize and compare models. + - **Model Comparison Reports**: 🟢 Visualize differences in performance. + - **Leaderboards**: 🟢 Highlight top-performing approaches. +- **Outcome**: Clear selection of the best-performing configurations. + +--- + +## Launch and Learn + +**Objective**: Deploy LLM applications, collect feedback, and iterate. + +### Deploy +- **User Activities**: Deploying the model/application. +- **Related Weave Features**: + - **Production Tracing & Plotting**: 🟢 Monitor real-world behavior. + - **Guardrails and Alerts**: 🚧 Proactively identify issues in production. +- **Outcome**: Applications ready for user interaction. + +### Enrich +- **User Activities**: Collecting live user feedback and production data. +- **Related Weave Features**: + - **Dataset Enrichment**: 🚧 Enhance evaluation datasets with production insights. + - **User Feedback Collection**: 🟢 Record and analyze interactions. +- **Outcome**: Improved datasets and understanding of real-world use cases. + +### Fine-Tune +- **User Activities**: Refining models based on production data. +- **Related Weave Features**: + - **Fine-Tuning with Production Data**: 💡 Close the loop with improved performance. +- **Outcome**: Enhanced model accuracy and responsiveness. + +--- + +## Cross-Stage Foundations + +Weave includes foundational features that enhance every stage of the workflow: + +- **Multi-Client Support**: 🟢 Python, TypeScript, HTTP APIs, and more. +- **Data Export**: 🟢 Export system data for external analysis. +- **Saved Views**: 🚧 Share analytics and evaluations. +- **Custom Mods**: 🚧 Build custom apps using Weave as a database. +- **W&B Integration**: 🚧 Connect model development with evaluations and workflows. + +--- -- Log and debug language model inputs, outputs, and traces -- Build rigorous, apples-to-apples evaluations for language model use cases -- Organize all the information generated across the LLM workflow, from experimentation to evaluations to production +## Get started -## What's next? +Do the quickstart... -Try the [Quickstart](/quickstart) to see Weave in action. +- Other pages that we want to link users to... +- Reference +- Cookbooks +- SDK +- ... \ No newline at end of file diff --git a/docs/static/img/weave-cycle.png b/docs/static/img/weave-cycle.png new file mode 100644 index 0000000000000000000000000000000000000000..6730fc91a3f4299235fed7d83fea8eea808b6db9 GIT binary patch literal 79296 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 literal 0 HcmV?d00001 From 9c94cb34256b8da64f1a101fe04cfca60e089d7a Mon Sep 17 00:00:00 2001 From: J2-D2-3PO <188380414+J2-D2-3PO@users.noreply.github.com> Date: Tue, 14 Jan 2025 15:57:36 -0700 Subject: [PATCH 2/2] refact --- docs/docs/concepts.md | 91 +++++++++++++++++++++++++++++++++++++ docs/docs/introduction.md | 94 +-------------------------------------- 2 files changed, 92 insertions(+), 93 deletions(-) create mode 100644 docs/docs/concepts.md diff --git a/docs/docs/concepts.md b/docs/docs/concepts.md new file mode 100644 index 000000000000..d3e344609555 --- /dev/null +++ b/docs/docs/concepts.md @@ -0,0 +1,91 @@ +# Weave concepts and lifecycle + +The Weave workflow can be broken into three major stages, organized as a loop: + +1. [Exploration](#exploration): Experiment with prompts, pipelines, and initial test cases. +2. [Systematic Iteration](#systematic-iteration): Build evaluation datasets, compare models, and improve system performance. +3. [Launch and Learn](#launch-and-learn): Deploy applications, collect feedback, and iteratively refine. + +Each stage includes specific substages that connect to core Weave features, as visualized in the diagram. + +![Weave usage lifecycle](../static/img/weave-cycle.png) + +## Exploration + +**Objective**: Early-stage experimentation to explore potential solutions and define tasks. + +### Experiment +- **User Activities**: Experimenting with prompts and pipelines (e.g., Retrieval-Augmented Generation, or RAG). +- **Related Weave Features**: + - **App Tracing & Debugging**: 🟢 Lightweight tracing for quick insights. + - **LLM Playground**: 🔵/🚧 Integrated environment for replayable experimentation. + - **Cost Tracking**: 🟢 Understand and optimize resource usage. +- **Outcome**: Insights into initial LLM behaviors and problem framing. + +### Fine-Tune +- **User Activities**: Fine-tuning frontier models with domain-specific data. +- **Related Weave Features**: + - **Prompt Management & Versioning**: 🔵/🚧 Track and refine prompt iterations. + - **Fine-Tune Tracking**: 💡 Monitor training improvements. +- **Outcome**: Models tailored to specific domains or applications. + +--- + +## Systematic Iteration + +**Objective**: Rigorous testing and evaluation to prepare for production. + +### Evaluate +- **User Activities**: Building evaluation datasets and scoring methods. +- **Related Weave Features**: + - **Evaluation Framework**: 🟢/📝 Code- and UI-based framework with intelligent caching. + - **Built-in Scorers**: 🔵 Automated scoring for datasets. +- **Outcome**: Confidence in model accuracy and reliability. + +### Compare +- **User Activities**: Comparing models and techniques. +- **Related Weave Features**: + - **Model Management**: 🟢 Seamlessly organize and compare models. + - **Model Comparison Reports**: 🟢 Visualize differences in performance. + - **Leaderboards**: 🟢 Highlight top-performing approaches. +- **Outcome**: Clear selection of the best-performing configurations. + +--- + +## Launch and Learn + +**Objective**: Deploy LLM applications, collect feedback, and iterate. + +### Deploy +- **User Activities**: Deploying the model/application. +- **Related Weave Features**: + - **Production Tracing & Plotting**: 🟢 Monitor real-world behavior. + - **Guardrails and Alerts**: 🚧 Proactively identify issues in production. +- **Outcome**: Applications ready for user interaction. + +### Enrich +- **User Activities**: Collecting live user feedback and production data. +- **Related Weave Features**: + - **Dataset Enrichment**: 🚧 Enhance evaluation datasets with production insights. + - **User Feedback Collection**: 🟢 Record and analyze interactions. +- **Outcome**: Improved datasets and understanding of real-world use cases. + +### Fine-Tune +- **User Activities**: Refining models based on production data. +- **Related Weave Features**: + - **Fine-Tuning with Production Data**: 💡 Close the loop with improved performance. +- **Outcome**: Enhanced model accuracy and responsiveness. + +--- + +## Cross-Stage Foundations + +Weave includes foundational features that enhance every stage of the workflow: + +- **Multi-Client Support**: 🟢 Python, TypeScript, HTTP APIs, and more. +- **Data Export**: 🟢 Export system data for external analysis. +- **Saved Views**: 🚧 Share analytics and evaluations. +- **Custom Mods**: 🚧 Build custom apps using Weave as a database. +- **W&B Integration**: 🚧 Connect model development with evaluations and workflows. + +--- \ No newline at end of file diff --git a/docs/docs/introduction.md b/docs/docs/introduction.md index 36164d853530..df602e6eab3f 100644 --- a/docs/docs/introduction.md +++ b/docs/docs/introduction.md @@ -4,99 +4,7 @@ slug: / # Introduction to Weave -Weave is a tool for exploring, evaluating, and deploying LLM-based applications. Designed for flexibility and scalability, Weave supports every stage of the LLM workflow, from initial experimentation to systematic iteration and deployment. - -The Weave workflow supports three major stages, organized as a loop: - -1. [Exploration](#exploration): Experiment with prompts, pipelines, and initial test cases. -2. [Systematic Iteration](#systematic-iteration): Build evaluation datasets, compare models, and improve system performance. -3. [Launch and Learn](#launch-and-learn): Deploy applications, collect feedback, and iteratively refine. - -Each stage includes specific substages that connect to core Weave features, as visualized in the diagram. - ---- - -![Weave usage lifecycle](../static/img/weave-cycle.png) - -## Exploration - -**Objective**: Early-stage experimentation to explore potential solutions and define tasks. - -### Experiment -- **User Activities**: Experimenting with prompts and pipelines (e.g., Retrieval-Augmented Generation, or RAG). -- **Related Weave Features**: - - **App Tracing & Debugging**: 🟢 Lightweight tracing for quick insights. - - **LLM Playground**: 🔵/🚧 Integrated environment for replayable experimentation. - - **Cost Tracking**: 🟢 Understand and optimize resource usage. -- **Outcome**: Insights into initial LLM behaviors and problem framing. - -### Fine-Tune -- **User Activities**: Fine-tuning frontier models with domain-specific data. -- **Related Weave Features**: - - **Prompt Management & Versioning**: 🔵/🚧 Track and refine prompt iterations. - - **Fine-Tune Tracking**: 💡 Monitor training improvements. -- **Outcome**: Models tailored to specific domains or applications. - ---- - -## Systematic Iteration - -**Objective**: Rigorous testing and evaluation to prepare for production. - -### Evaluate -- **User Activities**: Building evaluation datasets and scoring methods. -- **Related Weave Features**: - - **Evaluation Framework**: 🟢/📝 Code- and UI-based framework with intelligent caching. - - **Built-in Scorers**: 🔵 Automated scoring for datasets. -- **Outcome**: Confidence in model accuracy and reliability. - -### Compare -- **User Activities**: Comparing models and techniques. -- **Related Weave Features**: - - **Model Management**: 🟢 Seamlessly organize and compare models. - - **Model Comparison Reports**: 🟢 Visualize differences in performance. - - **Leaderboards**: 🟢 Highlight top-performing approaches. -- **Outcome**: Clear selection of the best-performing configurations. - ---- - -## Launch and Learn - -**Objective**: Deploy LLM applications, collect feedback, and iterate. - -### Deploy -- **User Activities**: Deploying the model/application. -- **Related Weave Features**: - - **Production Tracing & Plotting**: 🟢 Monitor real-world behavior. - - **Guardrails and Alerts**: 🚧 Proactively identify issues in production. -- **Outcome**: Applications ready for user interaction. - -### Enrich -- **User Activities**: Collecting live user feedback and production data. -- **Related Weave Features**: - - **Dataset Enrichment**: 🚧 Enhance evaluation datasets with production insights. - - **User Feedback Collection**: 🟢 Record and analyze interactions. -- **Outcome**: Improved datasets and understanding of real-world use cases. - -### Fine-Tune -- **User Activities**: Refining models based on production data. -- **Related Weave Features**: - - **Fine-Tuning with Production Data**: 💡 Close the loop with improved performance. -- **Outcome**: Enhanced model accuracy and responsiveness. - ---- - -## Cross-Stage Foundations - -Weave includes foundational features that enhance every stage of the workflow: - -- **Multi-Client Support**: 🟢 Python, TypeScript, HTTP APIs, and more. -- **Data Export**: 🟢 Export system data for external analysis. -- **Saved Views**: 🚧 Share analytics and evaluations. -- **Custom Mods**: 🚧 Build custom apps using Weave as a database. -- **W&B Integration**: 🚧 Connect model development with evaluations and workflows. - ---- +Weave is a tool for exploring, evaluating, and deploying LLM-based applications, built by Weights & Biases (W&B). Designed for flexibility and scalability, Weave supports every stage of the LLM application development workflow, from initial experimentation to systematic iteration and deployment. ## Get started