*/}
-
+
>
);
diff --git a/frontend/assets/blog/2024-12-01-launch-week-1.mdx b/frontend/assets/blog/2024-12-01-launch-week-1.mdx
index 19205715..40c77521 100644
--- a/frontend/assets/blog/2024-12-01-launch-week-1.mdx
+++ b/frontend/assets/blog/2024-12-01-launch-week-1.mdx
@@ -14,17 +14,29 @@ launching one feature per day.
Stay tuned for Laminar launches and follow us on [X](https://x.com/skull8888888888) for updates!
-## Launch day 1, December 2
+### Launch day 1, December 2
Flow – a dynamic task engine for building AI agents. See my [X post](https://x.com/skull8888888888/status/1863661536180572412)
for more details.
-## Launch day 2, December 3
+### Launch day 2, December 3
Evaluations that just work. Read our [blog post](/blog/2024-12-03-evals)
for more details.
-## Launch day 3, December 4
+### Launch day 3, December 4
Semantic search – a way to find the most similar examples in your dataset. Read our
[blog post](/blog/2024-12-04-semantic-search) for more details.
+
+### Launch day 4, December 5
+
+Labeling queues – convenient UI to label LLM data. Read our
+[blog post](/blog/2024-12-05-labeling-queues) for more details.
+
+### Launch day 5, December 6
+
+Online evaluations – a way to run evaluators on your LLM calls in production. Read our
+[blog post](/blog/2024-12-06-online-evals) for more details.
+
+
diff --git a/frontend/assets/blog/2024-12-06-online-evals.mdx b/frontend/assets/blog/2024-12-06-online-evals.mdx
new file mode 100644
index 00000000..4451f26f
--- /dev/null
+++ b/frontend/assets/blog/2024-12-06-online-evals.mdx
@@ -0,0 +1,80 @@
+---
+title: "Launch Week #1, Day 5. Online evaluations"
+date: "2024-12-06"
+description: "Online evaluations are a way to monitor and assess LLM behavior in real-time"
+author:
+ name: Robert Kim
+ url: https://x.com/skull8888888888
+image: /blog/2024-12-06-online-evals.jpg
+tags: ["online evaluations"]
+---
+
+At Laminar, we're excited to announce our newest feature: Online Evaluations. This feature allows engineering teams to run custom evaluators, either LLM-based or Python-based, on their LLM calls as they happen in production.
+
+## What are Online Evaluations?
+Online evaluations run automated checks and produce labels on your LLM calls as they happen in production. Instead of collecting data for post-hoc analysis, Laminar automatically evaluates each model call in real-time by analyzing the inputs and outputs of your LLM spans.
+
+## Why We Built It
+When you have thousands of LLM calls happening every day, it's hard to know if your LLMs are behaving as expected. Online evaluations allow you to monitor the quality of your LLMs in real-time, collect performance statistics, and detect issues before they impact users.
+
+## How It Works
+Laminar's online evaluations system is built around three core concepts:
+
+### 1. Span Paths
+
+Span paths uniquely identify where LLM calls happen in your code. They're automatically constructed from the location of the call, making it easy to track specific functions and endpoints.
+
+### 2. Span Labels
+
+Labels are values attached to spans that indicate evaluation results.
+
+### 3. Evaluators
+
+Evaluators analyze inputs and outputs to generate labels. Laminar supports two types of evaluators:
+
+- LLM-based evaluators
+- Python-based evaluators
+
+
+## Setting Up Evaluations
+![Setting up evaluations](/blog/2024-12-06-online-evals-example.png)
+
+Getting started with Laminar's online evaluations is straightforward:
+
+1. Navigate to "Traces" in your Laminar dashboard
+2. Select the span you want to evaluate
+3. Click "Add Label" and create or choose a label class
+4. Configure your evaluator:
+
+ - Choose between Python code or LLM-based evaluation
+ - Test your evaluator directly in the UI
+5. Save and enable for production
+
+Once enabled, Laminar will automatically run your evaluator on your LLM calls and attach labels to the spans. This label will be marked as `AUTO` in the dashboard.
+
+![Evaluations in action](/blog/2024-12-06-online-evals-test-label.png)
+
+## Best Practices
+
+Start Simple
+
+- Begin with basic format and content checks
+- Add more sophisticated evaluations gradually
+- Monitor evaluator performance impact
+
+
+Layer Your Checks
+
+- Technical validation (format, structure)
+- Content validation (completeness, relevance)
+- Quality metrics (coherence, accuracy)
+
+Monitor Results
+
+- Track evaluation trends over time
+- Regularly review and refine criteria
+
+
+## Conclusion
+Online evaluations represent a significant step forward in LLM operations, bringing immediate quality feedback to production systems. With Laminar's implementation, teams can maintain high standards while gathering valuable insights about their models' behavior.
+Try out online evaluations today and let us know what you think! Check out our [documentation](https://docs.lmnr.ai/evaluations/online-evaluations) for detailed setup instructions and best practices.
\ No newline at end of file
diff --git a/frontend/components/blog/blog-meta.tsx b/frontend/components/blog/blog-meta.tsx
index a9d0906c..c78491d6 100644
--- a/frontend/components/blog/blog-meta.tsx
+++ b/frontend/components/blog/blog-meta.tsx
@@ -14,17 +14,18 @@ interface BlogMetaProps {
export default function BlogMeta({ data }: BlogMetaProps) {
return (
-
+
+
,
h3: (props) => ,
h4: (props) => ,
- p: (props) => ,
- a: (props) => ,
+ p: (props) => ,
+ a: (props) => ,
blockquote: (props) => ,
// codeblock
pre: (props) => ,
// inline code
- code: (props) => ,
- ul: (props) =>
- {/*
- */}
- {/*
-
-
*/}
-
{data.title}
- {/*{data.description}
*/} -{formatUTCDate(data.date)}
- {data.author.url - ? - : - } +
+
+
{data.image &&
- {data.title}
+{formatUTCDate(data.date)}
+ {data.author.url + ? + : + } +
-
+
diff --git a/frontend/package.json b/frontend/package.json
index 613207bb..6a09d312 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -77,7 +77,7 @@
"next-mdx-remote": "^5.0.0",
"next-themes": "^0.2.1",
"postgres": "^3.4.4",
- "posthog-js": "^1.174.0",
+ "posthog-js": "^1.194.4",
"posthog-node": "^4.2.1",
"re-resizable": "^6.10.0",
"react": "^18.3.1",
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index 3a08063d..8681e3eb 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -198,8 +198,8 @@ importers:
specifier: ^3.4.4
version: 3.4.4
posthog-js:
- specifier: ^1.174.0
- version: 1.174.0
+ specifier: ^1.194.4
+ version: 1.194.4
posthog-node:
specifier: ^4.2.1
version: 4.2.1
@@ -674,6 +674,9 @@ packages:
'@codemirror/language@6.10.3':
resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==}
+ '@codemirror/language@6.10.6':
+ resolution: {integrity: sha512-KrsbdCnxEztLVbB5PycWXFxas4EOyk/fPAfruSOnDDppevQgid2XZ+KbJ9u+fDikP/e7MW7HPBTvTb8JlZK9vA==}
+
'@codemirror/lint@6.8.2':
resolution: {integrity: sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==}
@@ -689,6 +692,9 @@ packages:
'@codemirror/view@6.34.1':
resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==}
+ '@codemirror/view@6.35.0':
+ resolution: {integrity: sha512-I0tYy63q5XkaWsJ8QRv5h6ves7kvtrBWjBcnf/bzohFJQc5c14a1AQRdE8QpPF9eMp5Mq2FMm59TCj1gDfE7kw==}
+
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
@@ -5166,8 +5172,8 @@ packages:
resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==}
engines: {node: '>=12'}
- posthog-js@1.174.0:
- resolution: {integrity: sha512-60qCn8bloCxVc3oBQ/JP77J40J7UD+cRGUfYXJdsqjUH82s2wmCx4MicuNrcn9Hd2dHM25nXmOAMLO5iwSq9gg==}
+ posthog-js@1.194.4:
+ resolution: {integrity: sha512-w42HfzQktNj51jb4lPf45qykPG0RSpl2WZmr1kAaPTVF9LKUwRJHA854GN0R0bx1hap2fnao/yQBktFLlg4vxQ==}
posthog-node@4.2.1:
resolution: {integrity: sha512-l+fsjYEkTik3m/G0pE7gMr4qBJP84LhK779oQm6MBzhBGpd4By4qieTW+4FUAlNCyzQTynn3Nhsa50c0IELSxQ==}
@@ -6739,6 +6745,13 @@ snapshots:
'@codemirror/view': 6.34.1
'@lezer/common': 1.2.3
+ '@codemirror/autocomplete@6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)':
+ dependencies:
+ '@codemirror/language': 6.10.6
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.35.0
+ '@lezer/common': 1.2.3
+
'@codemirror/commands@6.7.0':
dependencies:
'@codemirror/language': 6.10.3
@@ -6748,9 +6761,9 @@ snapshots:
'@codemirror/commands@6.7.1':
dependencies:
- '@codemirror/language': 6.10.3
+ '@codemirror/language': 6.10.6
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.34.1
+ '@codemirror/view': 6.35.0
'@lezer/common': 1.2.3
'@codemirror/lang-json@6.0.1':
@@ -6788,25 +6801,34 @@ snapshots:
'@lezer/lr': 1.4.2
style-mod: 4.1.2
+ '@codemirror/language@6.10.6':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ '@codemirror/view': 6.35.0
+ '@lezer/common': 1.2.3
+ '@lezer/highlight': 1.2.1
+ '@lezer/lr': 1.4.2
+ style-mod: 4.1.2
+
'@codemirror/lint@6.8.2':
dependencies:
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.34.1
+ '@codemirror/view': 6.35.0
crelt: 1.0.6
'@codemirror/search@6.5.7':
dependencies:
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.34.1
+ '@codemirror/view': 6.35.0
crelt: 1.0.6
'@codemirror/state@6.4.1': {}
'@codemirror/theme-one-dark@6.1.2':
dependencies:
- '@codemirror/language': 6.10.3
+ '@codemirror/language': 6.10.6
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.34.1
+ '@codemirror/view': 6.35.0
'@lezer/highlight': 1.2.1
'@codemirror/view@6.34.1':
@@ -6815,6 +6837,12 @@ snapshots:
style-mod: 4.1.2
w3c-keyname: 2.2.8
+ '@codemirror/view@6.35.0':
+ dependencies:
+ '@codemirror/state': 6.4.1
+ style-mod: 4.1.2
+ w3c-keyname: 2.2.8
+
'@drizzle-team/brocli@0.10.2': {}
'@emnapi/runtime@1.3.1':
@@ -9504,13 +9532,13 @@ snapshots:
codemirror@6.0.1(@lezer/common@1.2.3):
dependencies:
- '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.2.3)
+ '@codemirror/autocomplete': 6.18.3(@codemirror/language@6.10.6)(@codemirror/state@6.4.1)(@codemirror/view@6.35.0)(@lezer/common@1.2.3)
'@codemirror/commands': 6.7.1
- '@codemirror/language': 6.10.3
+ '@codemirror/language': 6.10.6
'@codemirror/lint': 6.8.2
'@codemirror/search': 6.5.7
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.34.1
+ '@codemirror/view': 6.35.0
transitivePeerDependencies:
- '@lezer/common'
@@ -11909,7 +11937,7 @@ snapshots:
postgres@3.4.4: {}
- posthog-js@1.174.0:
+ posthog-js@1.194.4:
dependencies:
core-js: 3.38.1
fflate: 0.4.8
diff --git a/frontend/public/blog/2024-12-06-online-evals-example.png b/frontend/public/blog/2024-12-06-online-evals-example.png
new file mode 100644
index 00000000..7d4d7930
Binary files /dev/null and b/frontend/public/blog/2024-12-06-online-evals-example.png differ
diff --git a/frontend/public/blog/2024-12-06-online-evals-test-label.png b/frontend/public/blog/2024-12-06-online-evals-test-label.png
new file mode 100644
index 00000000..8c3efd85
Binary files /dev/null and b/frontend/public/blog/2024-12-06-online-evals-test-label.png differ
diff --git a/frontend/public/blog/2024-12-06-online-evals.jpg b/frontend/public/blog/2024-12-06-online-evals.jpg
new file mode 100644
index 00000000..1eec6ce6
Binary files /dev/null and b/frontend/public/blog/2024-12-06-online-evals.jpg differ
+
}