Skip to content

Commit 03fb690

Browse files
committed
More AI Server docs.
1 parent ea3b985 commit 03fb690

11 files changed

+206
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
```csharp
2+
var apiClient = GetLocalApiClient("https://localhost:5005");
3+
apiClient.BearerToken = Environment.GetEnvironmentVariable("AI_SERVER_API_KEY");
4+
5+
var request = new CreateOpenAiChatCompletion {
6+
Model = "llama3:8b",
7+
Messages = new List<OpenAiMessage>
8+
{
9+
new OpenAiMessage { Role = "system", Content = "You are a helpful AI assistant." },
10+
new OpenAiMessage { Role = "user", Content = "How do LLMs work?" }
11+
},
12+
MaxTokens = 50
13+
};
14+
15+
var response = await apiClient.PostAsync(request);
16+
var openAiResponse = response; // The same
17+
Console.WriteLine(openAiResponse.Choices[0].Message.Content);
18+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
```csharp
2+
var apiClient = GetLocalApiClient("https://localhost:5005");
3+
apiClient.BearerToken = Environment.GetEnvironmentVariable("AI_SERVER_API_KEY");
4+
5+
var request = new CreateOpenAiChat() {
6+
Request = new ()
7+
{
8+
Model = "llama3:8b",
9+
Messages = new List<OpenAiMessage>
10+
{
11+
new OpenAiMessage { Role = "system", Content = "You are a helpful AI assistant." },
12+
new OpenAiMessage { Role = "user", Content = "How do LLMs work?" }
13+
},
14+
MaxTokens = 50
15+
},
16+
Sync = true
17+
};
18+
19+
var response = await apiClient.PostAsync(request);
20+
var openAiResponse = response.Result.ResponseBody.FromJson<OpenAiChatResponse>();
21+
Console.WriteLine(openAiResponse.Choices[0].Message.Content);
22+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
```csharp
2+
var request = new ImageToImage()
3+
{
4+
PositivePrompt = "A beautiful sunset over the ocean",
5+
NegativePrompt = "A pixelated, low-quality image",
6+
Sync = true
7+
};
8+
9+
var response = client.PostFilesWithRequest<GenerationResponse>(
10+
request,
11+
[new UploadFile("image", File.OpenRead("ocean-sunset.jpg"), "ocean-sunset.jpg")]
12+
);
13+
response.Outputs[0].Url.DownloadFileTo("ocean-sunset.webp");
14+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
```csharp
2+
var request = new ImageUpscale()
3+
{
4+
Sync = true
5+
};
6+
7+
var response = client.PostFilesWithRequest<GenerationResponse>(
8+
request,
9+
[new UploadFile("image", File.OpenRead("low-res.jpg"), "low-res.jpg")]
10+
);
11+
response.Outputs[0].Url.DownloadFileTo("high-res.webp");
12+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```csharp
2+
var request = new ImageWithMask()
3+
{
4+
PositivePrompt = "A beautiful sunset over the ocean",
5+
NegativePrompt = "A pixelated, low-quality image",
6+
Sync = true
7+
};
8+
9+
var response = client.PostFilesWithRequest<GenerationResponse>(
10+
request,
11+
[new UploadFile("image", File.OpenRead("sunset.jpg"), "sunset.jpg"),
12+
new UploadFile("mask", File.OpenRead("mask.jpg"), "mask.jpg")]
13+
);
14+
response.Outputs[0].Url.DownloadFileTo("ocean-sunset.webp");
15+
```
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
```csharp
2+
var client = new JsonApiClient("https://api.openai.com/v1");
3+
client.AddHeader("Authorization", "Bearer " + Environment.GetEnvironmentVariable("OPENAI_API_KEY"));
4+
25
// Using AI Server DTOs with OpenAI API
36
var request = new OpenAiChat {
47
Model = "gpt-4-turbo",
@@ -9,7 +12,8 @@ var request = new OpenAiChat {
912
MaxTokens = 50
1013
};
1114

12-
var json = JsonSerializer.SerializeToString(request);
13-
var response = await client.PostAsync("https://api.openai.com/v1/chat/completions",
14-
new StringContent(json, Encoding.UTF8, "application/json"));
15+
var response = await client.PostAsync<OpenAiChatResponse>(
16+
"/chat/completions",
17+
request
18+
);
1519
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
```csharp
2+
var request = new SpeechToText{};
3+
4+
var response = client.PostFilesWithRequest<GenerationResponse>(
5+
request,
6+
[new UploadFile("audio", File.OpenRead("audio.wav"), "audio.wav")]
7+
);
8+
9+
// Two texts are returned
10+
// The first is the timestamped text json with `start` and `end` timestamps
11+
var textWithTimestamps = response.TextOutputs[0].Text;
12+
// The second is the plain text
13+
var textOnly = response.TextOutputs[1].Text;
14+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
```csharp
2+
var request = new TextToImage()
3+
{
4+
Height = 768,
5+
Width = 768,
6+
Model = "flux-schnell",
7+
PositivePrompt = "A happy llama",
8+
NegativePrompt = "bad quality, blurry image",
9+
Sync = true
10+
};
11+
12+
var response = await client.PostAsync(request);
13+
response.Outputs[0].Url.DownloadFileTo("llama.jpg");
14+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```csharp
2+
var request = new ConvertVideo()
3+
{
4+
OutputFormat = ConvertVideoOutputFormat.WebM,
5+
Sync = true
6+
};
7+
8+
var response = client.PostFilesWithRequest<TransformResponse>(
9+
request,
10+
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
11+
);
12+
13+
var videoUrl = response.Outputs[0].Url;
14+
videoUrl.DownloadFileTo("converted-video.webm");
15+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
```csharp
2+
var request = new CropVideo()
3+
{
4+
X = 120,
5+
Y = 120,
6+
Width = 720,
7+
Height = 720,
8+
Sync = true
9+
};
10+
11+
var response = client.PostFilesWithRequest<TransformResponse>(
12+
request,
13+
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
14+
);
15+
16+
var videoUrl = response.Outputs[0].Url;
17+
videoUrl.DownloadFileTo("cropped-video.mp4");
18+
```

MyApp/_pages/ai-server/usage/video.md

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: "Video Endpoints"
3+
description: "Processing videos with AI Server"
4+
---
5+
6+
# Processing Videos with AI Server
7+
8+
Also incorporated into the ComfyUI Agent is FFmpeg, which can be used to process videos. AI Server wraps some common operations into easier-to-use endpoints, such as:
9+
10+
- **Crop Video**: Crop a video to a specific size.
11+
- **Convert Video**: Convert a video to a different format.
12+
- **Scale Video**: Scale a video to a different resolution.
13+
- **Watermark Video**: Add a watermark to a video.
14+
15+
## Using Video Endpoints
16+
17+
These endpoints are used in a similar way to the other AI Server endpoints, eg you can provide a RefId, Tag, ReplyTo, and Sync properties to enhance the usage of AI Server.
18+
19+
### Crop Video
20+
21+
```csharp
22+
var request = new CropVideo()
23+
{
24+
X = 120,
25+
Y = 120,
26+
Width = 720,
27+
Height = 720,
28+
Sync = true
29+
};
30+
31+
var response = client.PostFilesWithRequest<TransformResponse>(
32+
request,
33+
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
34+
);
35+
36+
var videoUrl = response.Outputs[0].Url;
37+
videoUrl.DownloadFileTo("cropped-video.mp4");
38+
```
39+
40+
### Convert Video
41+
42+
```csharp
43+
var request = new ConvertVideo()
44+
{
45+
OutputFormat = ConvertVideoOutputFormat.WebM,
46+
Sync = true
47+
};
48+
49+
var response = client.PostFilesWithRequest<TransformResponse>(
50+
request,
51+
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
52+
);
53+
54+
var videoUrl = response.Outputs[0].Url;
55+
videoUrl.DownloadFileTo("converted-video.webm");
56+
```
57+

0 commit comments

Comments
 (0)