Skip to content

Commit

Permalink
More AI Server docs.
Browse files Browse the repository at this point in the history
  • Loading branch information
Layoric committed Oct 3, 2024
1 parent ea3b985 commit 03fb690
Show file tree
Hide file tree
Showing 11 changed files with 206 additions and 3 deletions.
18 changes: 18 additions & 0 deletions MyApp/_includes/ai-server/cs/ai-server-compatible-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
```csharp
var apiClient = GetLocalApiClient("https://localhost:5005");
apiClient.BearerToken = Environment.GetEnvironmentVariable("AI_SERVER_API_KEY");

var request = new CreateOpenAiChatCompletion {
Model = "llama3:8b",
Messages = new List<OpenAiMessage>
{
new OpenAiMessage { Role = "system", Content = "You are a helpful AI assistant." },
new OpenAiMessage { Role = "user", Content = "How do LLMs work?" }
},
MaxTokens = 50
};

var response = await apiClient.PostAsync(request);
var openAiResponse = response; // The same
Console.WriteLine(openAiResponse.Choices[0].Message.Content);
```
22 changes: 22 additions & 0 deletions MyApp/_includes/ai-server/cs/ai-server-raw-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
```csharp
var apiClient = GetLocalApiClient("https://localhost:5005");
apiClient.BearerToken = Environment.GetEnvironmentVariable("AI_SERVER_API_KEY");

var request = new CreateOpenAiChat() {
Request = new ()
{
Model = "llama3:8b",
Messages = new List<OpenAiMessage>
{
new OpenAiMessage { Role = "system", Content = "You are a helpful AI assistant." },
new OpenAiMessage { Role = "user", Content = "How do LLMs work?" }
},
MaxTokens = 50
},
Sync = true
};

var response = await apiClient.PostAsync(request);
var openAiResponse = response.Result.ResponseBody.FromJson<OpenAiChatResponse>();
Console.WriteLine(openAiResponse.Choices[0].Message.Content);
```
14 changes: 14 additions & 0 deletions MyApp/_includes/ai-server/cs/image-to-image-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
```csharp
var request = new ImageToImage()
{
PositivePrompt = "A beautiful sunset over the ocean",
NegativePrompt = "A pixelated, low-quality image",
Sync = true
};

var response = client.PostFilesWithRequest<GenerationResponse>(
request,
[new UploadFile("image", File.OpenRead("ocean-sunset.jpg"), "ocean-sunset.jpg")]
);
response.Outputs[0].Url.DownloadFileTo("ocean-sunset.webp");
```
12 changes: 12 additions & 0 deletions MyApp/_includes/ai-server/cs/image-upscale-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
```csharp
var request = new ImageUpscale()
{
Sync = true
};

var response = client.PostFilesWithRequest<GenerationResponse>(
request,
[new UploadFile("image", File.OpenRead("low-res.jpg"), "low-res.jpg")]
);
response.Outputs[0].Url.DownloadFileTo("high-res.webp");
```
15 changes: 15 additions & 0 deletions MyApp/_includes/ai-server/cs/image-with-mask-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
```csharp
var request = new ImageWithMask()
{
PositivePrompt = "A beautiful sunset over the ocean",
NegativePrompt = "A pixelated, low-quality image",
Sync = true
};

var response = client.PostFilesWithRequest<GenerationResponse>(
request,
[new UploadFile("image", File.OpenRead("sunset.jpg"), "sunset.jpg"),
new UploadFile("mask", File.OpenRead("mask.jpg"), "mask.jpg")]
);
response.Outputs[0].Url.DownloadFileTo("ocean-sunset.webp");
```
10 changes: 7 additions & 3 deletions MyApp/_includes/ai-server/cs/open-ai-requests-1.cs.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
```csharp
var client = new JsonApiClient("https://api.openai.com/v1");
client.AddHeader("Authorization", "Bearer " + Environment.GetEnvironmentVariable("OPENAI_API_KEY"));

// Using AI Server DTOs with OpenAI API
var request = new OpenAiChat {
Model = "gpt-4-turbo",
Expand All @@ -9,7 +12,8 @@ var request = new OpenAiChat {
MaxTokens = 50
};

var json = JsonSerializer.SerializeToString(request);
var response = await client.PostAsync("https://api.openai.com/v1/chat/completions",
new StringContent(json, Encoding.UTF8, "application/json"));
var response = await client.PostAsync<OpenAiChatResponse>(
"/chat/completions",
request
);
```
14 changes: 14 additions & 0 deletions MyApp/_includes/ai-server/cs/speech-to-text-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
```csharp
var request = new SpeechToText{};

var response = client.PostFilesWithRequest<GenerationResponse>(
request,
[new UploadFile("audio", File.OpenRead("audio.wav"), "audio.wav")]
);

// Two texts are returned
// The first is the timestamped text json with `start` and `end` timestamps
var textWithTimestamps = response.TextOutputs[0].Text;
// The second is the plain text
var textOnly = response.TextOutputs[1].Text;
```
14 changes: 14 additions & 0 deletions MyApp/_includes/ai-server/cs/text-to-image-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
```csharp
var request = new TextToImage()
{
Height = 768,
Width = 768,
Model = "flux-schnell",
PositivePrompt = "A happy llama",
NegativePrompt = "bad quality, blurry image",
Sync = true
};

var response = await client.PostAsync(request);
response.Outputs[0].Url.DownloadFileTo("llama.jpg");
```
15 changes: 15 additions & 0 deletions MyApp/_includes/ai-server/cs/video-convert-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
```csharp
var request = new ConvertVideo()
{
OutputFormat = ConvertVideoOutputFormat.WebM,
Sync = true
};

var response = client.PostFilesWithRequest<TransformResponse>(
request,
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
);

var videoUrl = response.Outputs[0].Url;
videoUrl.DownloadFileTo("converted-video.webm");
```
18 changes: 18 additions & 0 deletions MyApp/_includes/ai-server/cs/video-crop-1.cs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
```csharp
var request = new CropVideo()
{
X = 120,
Y = 120,
Width = 720,
Height = 720,
Sync = true
};

var response = client.PostFilesWithRequest<TransformResponse>(
request,
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
);

var videoUrl = response.Outputs[0].Url;
videoUrl.DownloadFileTo("cropped-video.mp4");
```
57 changes: 57 additions & 0 deletions MyApp/_pages/ai-server/usage/video.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
title: "Video Endpoints"
description: "Processing videos with AI Server"
---

# Processing Videos with AI Server

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:

- **Crop Video**: Crop a video to a specific size.
- **Convert Video**: Convert a video to a different format.
- **Scale Video**: Scale a video to a different resolution.
- **Watermark Video**: Add a watermark to a video.

## Using Video Endpoints

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.

### Crop Video

```csharp
var request = new CropVideo()
{
X = 120,
Y = 120,
Width = 720,
Height = 720,
Sync = true
};

var response = client.PostFilesWithRequest<TransformResponse>(
request,
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
);

var videoUrl = response.Outputs[0].Url;
videoUrl.DownloadFileTo("cropped-video.mp4");
```

### Convert Video

```csharp
var request = new ConvertVideo()
{
OutputFormat = ConvertVideoOutputFormat.WebM,
Sync = true
};

var response = client.PostFilesWithRequest<TransformResponse>(
request,
[new UploadFile("video", File.OpenRead("video.mp4"), "video.mp4")]
);

var videoUrl = response.Outputs[0].Url;
videoUrl.DownloadFileTo("converted-video.webm");
```

0 comments on commit 03fb690

Please sign in to comment.