Skip to content

Commit

Permalink
feat: Add extra to request
Browse files Browse the repository at this point in the history
  • Loading branch information
karolisg committed Feb 20, 2025
1 parent 4e61cd4 commit a1ff5fb
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
11 changes: 11 additions & 0 deletions core/src/handler/chat.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
use std::collections::HashMap;

use crate::events::JsonValue;
use crate::routing::RoutingStrategy;
use crate::types::gateway::ChatCompletionRequestWithTools;
use crate::types::gateway::CompletionModelUsage;
use crate::types::gateway::Extra;
use crate::usage::InMemoryStorage;
use actix_web::{web, HttpRequest, HttpResponse};
use bytes::Bytes;
use std::sync::Arc;
use tokio::sync::Mutex;
use valuable::Valuable;

use crate::types::gateway::{
ChatCompletionChunk, ChatCompletionChunkChoice, ChatCompletionDelta, ChatCompletionUsage,
Expand Down Expand Up @@ -44,8 +47,16 @@ pub async fn create_chat_completion(
error = tracing::field::Empty,
thread_id = tracing::field::Empty,
message_id = tracing::field::Empty,
user = tracing::field::Empty,
));

if let Some(Extra { user: Some(user) }) = &request.extra {
span.record(
"user",
JsonValue(&serde_json::to_value(user.clone())?).as_value(),
);
}

let memory_storage = req.app_data::<Arc<Mutex<InMemoryStorage>>>().cloned();

let executor = RoutedExecutor::new(request.clone());
Expand Down
17 changes: 16 additions & 1 deletion core/src/types/gateway.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ impl ChatCompletionRequest {
}
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Extra {
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<RequestUser>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChatCompletionRequestWithTools<T> {
#[serde(flatten)]
Expand All @@ -65,9 +71,18 @@ pub struct ChatCompletionRequestWithTools<T> {
pub mcp_servers: Option<Vec<McpDefinition>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub router: Option<DynamicRouter<T>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extra: Option<Extra>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RequestUser {
pub id: String,
pub name: String,
pub tags: Vec<String>,
}

#[derive(serde::Deserialize, serde::Serialize, Debug, Clone, Default)]
#[derive(Deserialize, Serialize, Debug, Clone, Default)]
pub struct DynamicRouter<T> {
#[serde(flatten)]
pub strategy: T,
Expand Down

0 comments on commit a1ff5fb

Please sign in to comment.