Skip to content

Commit f8d5e27

Browse files
authored
chore: remove forge_domain direct dependency on crates (#1084)
1 parent c2a5279 commit f8d5e27

39 files changed

Lines changed: 859 additions & 668 deletions

Cargo.lock

Lines changed: 731 additions & 557 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/forge_app/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,6 @@ pub use error::*;
2424
pub use services::*;
2525
pub use user::*;
2626
pub use walker::*;
27+
pub mod domain {
28+
pub use forge_domain::*;
29+
}

crates/forge_app/src/truncation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub async fn create_temp_file<S: FsCreateService>(
1212
content: &str,
1313
) -> anyhow::Result<PathBuf> {
1414
let path = tempfile::Builder::new()
15-
.keep(true)
15+
.disable_cleanup(true)
1616
.prefix(prefix)
1717
.suffix(ext)
1818
.tempfile()?

crates/forge_infra/src/fs_write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl<S: SnapshotInfra> FileWriterInfra for ForgeFileWriteService<S> {
4343

4444
async fn write_temp(&self, prefix: &str, ext: &str, content: &str) -> anyhow::Result<PathBuf> {
4545
let path = tempfile::Builder::new()
46-
.keep(true)
46+
.disable_cleanup(true)
4747
.prefix(prefix)
4848
.suffix(ext)
4949
.tempfile()?

crates/forge_provider/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ derive_setters.workspace = true
1717
reqwest-eventsource.workspace = true
1818
strum.workspace = true
1919
strum_macros.workspace = true
20-
forge_domain.workspace = true
20+
forge_app.workspace = true
2121
anyhow.workspace = true
2222
thiserror.workspace = true
2323
derive_builder.workspace = true

crates/forge_provider/src/anthropic/provider.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
use anyhow::Context as _;
22
use derive_builder::Builder;
3-
use forge_domain::{ChatCompletionMessage, Context, Model, ModelId, ResultStream, Transformer};
3+
use forge_app::domain::{
4+
ChatCompletionMessage, Context, Model, ModelId, ResultStream, Transformer,
5+
};
46
use reqwest::header::{HeaderMap, HeaderValue};
57
use reqwest::{Client, Url};
68
use reqwest_eventsource::{Event, RequestBuilderExt};
@@ -190,7 +192,7 @@ impl Anthropic {
190192

191193
#[cfg(test)]
192194
mod tests {
193-
use forge_domain::{
195+
use forge_app::domain::{
194196
Context, ContextMessage, ToolCallFull, ToolCallId, ToolChoice, ToolName, ToolOutput,
195197
ToolResult,
196198
};

crates/forge_provider/src/anthropic/request.rs

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use derive_setters::Setters;
2-
use forge_domain::{ContextMessage, Image};
2+
use forge_app::domain::{ContextMessage, Image};
33
use serde::{Deserialize, Serialize};
44

55
use crate::error::Error;
@@ -38,15 +38,15 @@ pub struct Thinking {
3838
budget_tokens: u64,
3939
}
4040

41-
impl TryFrom<forge_domain::Context> for Request {
41+
impl TryFrom<forge_app::domain::Context> for Request {
4242
type Error = anyhow::Error;
43-
fn try_from(request: forge_domain::Context) -> std::result::Result<Self, Self::Error> {
43+
fn try_from(request: forge_app::domain::Context) -> std::result::Result<Self, Self::Error> {
4444
// note: Anthropic only supports 1 system message in context, so from the
4545
// context we pick the first system message available.
4646
// ref: https://docs.anthropic.com/en/api/messages#body-system
4747
let system = request.messages.iter().find_map(|message| {
4848
if let ContextMessage::Text(chat_message) = message {
49-
if chat_message.role == forge_domain::Role::System {
49+
if chat_message.role == forge_app::domain::Role::System {
5050
Some(chat_message.content.clone())
5151
} else {
5252
None
@@ -63,7 +63,7 @@ impl TryFrom<forge_domain::Context> for Request {
6363
.filter(|message| {
6464
// note: Anthropic does not support system messages in message field.
6565
if let ContextMessage::Text(chat_message) = message {
66-
chat_message.role != forge_domain::Role::System
66+
chat_message.role != forge_app::domain::Role::System
6767
} else {
6868
true
6969
}
@@ -143,9 +143,11 @@ impl TryFrom<ContextMessage> for Message {
143143
}
144144

145145
match chat_message.role {
146-
forge_domain::Role::User => Message { role: Role::User, content },
147-
forge_domain::Role::Assistant => Message { role: Role::Assistant, content },
148-
forge_domain::Role::System => {
146+
forge_app::domain::Role::User => Message { role: Role::User, content },
147+
forge_app::domain::Role::Assistant => {
148+
Message { role: Role::Assistant, content }
149+
}
150+
forge_app::domain::Role::System => {
149151
// note: Anthropic doesn't support system role messages and they're already
150152
// filtered out. so this state is unreachable.
151153
return Err(Error::UnsupportedRole("System".to_string()).into());
@@ -222,9 +224,9 @@ enum Content {
222224
},
223225
}
224226

225-
impl TryFrom<forge_domain::ToolCallFull> for Content {
227+
impl TryFrom<forge_app::domain::ToolCallFull> for Content {
226228
type Error = anyhow::Error;
227-
fn try_from(value: forge_domain::ToolCallFull) -> std::result::Result<Self, Self::Error> {
229+
fn try_from(value: forge_app::domain::ToolCallFull) -> std::result::Result<Self, Self::Error> {
228230
let call_id = value.call_id.as_ref().ok_or(Error::ToolCallMissingId)?;
229231

230232
Ok(Content::ToolUse {
@@ -236,9 +238,9 @@ impl TryFrom<forge_domain::ToolCallFull> for Content {
236238
}
237239
}
238240

239-
impl TryFrom<forge_domain::ToolResult> for Content {
241+
impl TryFrom<forge_app::domain::ToolResult> for Content {
240242
type Error = anyhow::Error;
241-
fn try_from(value: forge_domain::ToolResult) -> std::result::Result<Self, Self::Error> {
243+
fn try_from(value: forge_app::domain::ToolResult) -> std::result::Result<Self, Self::Error> {
242244
let call_id = value.call_id.as_ref().ok_or(Error::ToolCallMissingId)?;
243245
Ok(Content::ToolResult {
244246
tool_use_id: call_id.as_str().to_string(),
@@ -287,17 +289,21 @@ pub enum ToolChoice {
287289
}
288290

289291
// To understand the mappings refer: https://docs.anthropic.com/en/docs/build-with-claude/tool-use#controlling-claudes-output
290-
impl From<forge_domain::ToolChoice> for ToolChoice {
291-
fn from(value: forge_domain::ToolChoice) -> Self {
292+
impl From<forge_app::domain::ToolChoice> for ToolChoice {
293+
fn from(value: forge_app::domain::ToolChoice) -> Self {
292294
match value {
293-
forge_domain::ToolChoice::Auto => ToolChoice::Auto { disable_parallel_tool_use: None },
294-
forge_domain::ToolChoice::Call(tool_name) => {
295+
forge_app::domain::ToolChoice::Auto => {
296+
ToolChoice::Auto { disable_parallel_tool_use: None }
297+
}
298+
forge_app::domain::ToolChoice::Call(tool_name) => {
295299
ToolChoice::Tool { name: tool_name.to_string(), disable_parallel_tool_use: None }
296300
}
297-
forge_domain::ToolChoice::Required => {
301+
forge_app::domain::ToolChoice::Required => {
298302
ToolChoice::Any { disable_parallel_tool_use: None }
299303
}
300-
forge_domain::ToolChoice::None => ToolChoice::Auto { disable_parallel_tool_use: None },
304+
forge_app::domain::ToolChoice::None => {
305+
ToolChoice::Auto { disable_parallel_tool_use: None }
306+
}
301307
}
302308
}
303309
}
@@ -312,9 +318,11 @@ pub struct ToolDefinition {
312318
input_schema: serde_json::Value,
313319
}
314320

315-
impl TryFrom<forge_domain::ToolDefinition> for ToolDefinition {
321+
impl TryFrom<forge_app::domain::ToolDefinition> for ToolDefinition {
316322
type Error = anyhow::Error;
317-
fn try_from(value: forge_domain::ToolDefinition) -> std::result::Result<Self, Self::Error> {
323+
fn try_from(
324+
value: forge_app::domain::ToolDefinition,
325+
) -> std::result::Result<Self, Self::Error> {
318326
Ok(ToolDefinition {
319327
name: value.name.to_string(),
320328
description: Some(value.description),

crates/forge_provider/src/anthropic/response.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use forge_domain::{
1+
use forge_app::domain::{
22
ChatCompletionMessage, Content, ModelId, Reasoning, ReasoningPart, ToolCallId, ToolCallPart,
33
ToolName,
44
};
@@ -18,7 +18,7 @@ pub struct Model {
1818
display_name: String,
1919
}
2020

21-
impl From<Model> for forge_domain::Model {
21+
impl From<Model> for forge_app::domain::Model {
2222
fn from(value: Model) -> Self {
2323
Self {
2424
id: ModelId::new(value.id),
@@ -53,9 +53,9 @@ pub struct Usage {
5353
pub cache_creation_input_tokens: Option<usize>,
5454
}
5555

56-
impl From<Usage> for forge_domain::Usage {
56+
impl From<Usage> for forge_app::domain::Usage {
5757
fn from(usage: Usage) -> Self {
58-
forge_domain::Usage {
58+
forge_app::domain::Usage {
5959
prompt_tokens: usage.input_tokens.unwrap_or(0),
6060
completion_tokens: usage.output_tokens.unwrap_or(0),
6161
total_tokens: usage.input_tokens.unwrap_or(0) + usage.output_tokens.unwrap_or(0),
@@ -74,13 +74,13 @@ pub enum StopReason {
7474
ToolUse,
7575
}
7676

77-
impl From<StopReason> for forge_domain::FinishReason {
77+
impl From<StopReason> for forge_app::domain::FinishReason {
7878
fn from(value: StopReason) -> Self {
7979
match value {
80-
StopReason::EndTurn => forge_domain::FinishReason::Stop,
81-
StopReason::MaxTokens => forge_domain::FinishReason::Length,
82-
StopReason::StopSequence => forge_domain::FinishReason::Stop,
83-
StopReason::ToolUse => forge_domain::FinishReason::ToolCalls,
80+
StopReason::EndTurn => forge_app::domain::FinishReason::Stop,
81+
StopReason::MaxTokens => forge_app::domain::FinishReason::Length,
82+
StopReason::StopSequence => forge_app::domain::FinishReason::Stop,
83+
StopReason::ToolUse => forge_app::domain::FinishReason::ToolCalls,
8484
}
8585
}
8686
}

crates/forge_provider/src/anthropic/transforms/reasoning_transform.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use forge_domain::{Context, Transformer};
1+
use forge_app::domain::{Context, Transformer};
22

33
pub struct ReasoningTransform;
44

@@ -19,7 +19,7 @@ impl Transformer for ReasoningTransform {
1919

2020
#[cfg(test)]
2121
mod tests {
22-
use forge_domain::{Context, ReasoningConfig, TopK, TopP, Transformer};
22+
use forge_app::domain::{Context, ReasoningConfig, TopK, TopP, Transformer};
2323
use pretty_assertions::assert_eq;
2424

2525
use super::*;

crates/forge_provider/src/client.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::collections::HashMap;
44
use std::sync::Arc;
55

66
use anyhow::{Context as _, Result};
7-
use forge_domain::{
7+
use forge_app::domain::{
88
ChatCompletionMessage, Context, HttpConfig, Model, ModelId, Provider, ResultStream, RetryConfig,
99
};
1010
use reqwest::redirect::Policy;
@@ -139,7 +139,7 @@ impl Client {
139139

140140
#[cfg(test)]
141141
mod tests {
142-
use forge_domain::Provider;
142+
use forge_app::domain::Provider;
143143
use reqwest::Url;
144144

145145
use super::*;

0 commit comments

Comments
 (0)