Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
575 changes: 176 additions & 399 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion crates/stream_pulse/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ futures = "0.3.30"
itertools = { workspace = true }
rayon = "1.5"
regex = "1.10.6"
reqwest = { version = "0.13", features = ["json", "multipart"] }
reqwest = { version = "0.11", features = ["json", "multipart"] }
reqwest-middleware = "0.2"
reqwest-retry = "0.2"
reqwest-retry-after = "0.1"
sentry = "0.46"
sentry-tracing = "0.46"
serde = { workspace = true }
Expand Down
15 changes: 12 additions & 3 deletions crates/stream_pulse/src/lib/llm/openai.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::path::PathBuf;

use another_tiktoken_rs::cl100k_base;
use reqwest::Client;
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware};
use reqwest_retry_after::RetryAfterMiddleware;
use serde::Deserialize;
use ytdlp_bindings::AudioProcessor;

Expand All @@ -12,7 +14,7 @@ use crate::{

#[derive(Debug, Clone)]
pub struct OpenAIClient<F: AudioProcessor> {
client: Client,
client: ClientWithMiddleware,
api_key: String,
ffmpeg: F,
base_url: String,
Expand All @@ -22,6 +24,8 @@ pub struct OpenAIClient<F: AudioProcessor> {
pub enum OpenAIError {
#[error("HTTP error: {0}")]
Request(#[from] reqwest::Error),
#[error("HTTP middleare error: {0}")]
RequestMiddleware(#[from] reqwest_middleware::Error),
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("API error: {status} - {message}")]
Expand All @@ -36,8 +40,13 @@ impl<F: AudioProcessor> OpenAIClient<F> {
const SYSTEM_PROMPT: &str = include_str!("./prompts/system_0.txt");

pub fn new(api_key: impl Into<String>, ffmpeg: F) -> Self {
let retry_policy = ExponentialBackoff::builder().build_with_max_retries(3);
let client = ClientBuilder::new(reqwest::Client::new())
.with(RetryAfterMiddleware::new())
.with(RetryTransientMiddleware::new_with_policy(retry_policy))
.build();
Self {
client: Client::new(),
client,
api_key: api_key.into(),
base_url: "https://api.openai.com/v1".into(),
ffmpeg,
Expand Down
3 changes: 3 additions & 0 deletions crates/stream_pulse/src/lib/llm/prompts/system_0.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ Use this exact structure:

## Memorable Moments
- ...

## Notable quotes
- ...
```

## Rules
Expand Down
2 changes: 1 addition & 1 deletion crates/stream_pulse/src/lib/llm/summarizer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub trait Summarizer {
fn summarize(
&self,
content: &str,
) -> impl Future<Output = Result<SummaryResponse, Self::Error>> + Send + Sync;
) -> impl Future<Output = Result<SummaryResponse, Self::Error>> + Send;

fn count_tokens(&self, _content: &str) -> Result<usize, Self::Error> {
Ok(0)
Expand Down
2 changes: 1 addition & 1 deletion crates/stream_pulse/src/lib/llm/transcriber.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub trait Transcriber {
fn transcribe(
&self,
audio_input: AudioInput,
) -> impl Future<Output = Result<TranscribeResponse, Self::Error>> + Send + Sync;
) -> impl Future<Output = Result<TranscribeResponse, Self::Error>> + Send;
}

#[derive(Debug, Clone)]
Expand Down
24 changes: 0 additions & 24 deletions crates/stream_pulse/src/prompts/system_0.txt

This file was deleted.

107 changes: 0 additions & 107 deletions crates/stream_pulse/src/prompts/user_0.txt

This file was deleted.

55 changes: 0 additions & 55 deletions crates/stream_pulse/src/prompts/user_1.txt

This file was deleted.

80 changes: 0 additions & 80 deletions crates/stream_pulse/src/prompts/user_2.txt

This file was deleted.

Loading