Skip to content

Commit b0ed02d

Browse files
author
jamesmoore
committed
audio media support
1 parent 65dd271 commit b0ed02d

File tree

6 files changed

+68
-23
lines changed

6 files changed

+68
-23
lines changed

ChatGPTExport/Assets/AssetLocator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ ExistingAssetLocator existingAssetLocator
1212
{
1313
private List<string>? cachedSourceList = null;
1414

15-
public string? GetMarkdownImage(AssetRequest assetRequest)
15+
public string? GetMarkdownMediaAsset(AssetRequest assetRequest)
1616
{
1717
return FindAssetInSourceDirectory(assetRequest) ??
18-
existingAssetLocator.GetMarkdownImage(assetRequest);
18+
existingAssetLocator.GetMarkdownMediaAsset(assetRequest);
1919
}
2020

2121
private IEnumerable<string> GetCachedSourceFiles(string searchPattern)

ChatGPTExport/Assets/ExistingAssetLocator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void Add(string newFile)
2323
GetCache().Add(newFile);
2424
}
2525

26-
public string? GetMarkdownImage(AssetRequest assetRequest)
26+
public string? GetMarkdownMediaAsset(AssetRequest assetRequest)
2727
{
2828
// it may already exist in the destination directory from a previous export
2929
var destinationMatches = GetCachedDestinationFiles(assetRequest.SearchPattern).ToList();

ChatGPTExport/Assets/IAssetLocator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ namespace ChatGPTExport.Assets
33
{
44
public interface IAssetLocator
55
{
6-
string? GetMarkdownImage(AssetRequest assetRequest);
6+
string? GetMarkdownMediaAsset(AssetRequest assetRequest);
77
}
88
}

ChatGPTExport/Exporters/Html/HtmlExporter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private MarkdownPipeline GetPipeline()
107107
.UseFootnotes()
108108
//.UseGridTables()
109109
.UseMathematics()
110-
//.UseMediaLinks()
110+
.UseMediaLinks()
111111
.UsePipeTables()
112112
.UseListExtras()
113113
.UseTaskLists()

ChatGPTExport/Exporters/Markdown/MarkdownContentVisitor.cs

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -147,40 +147,75 @@ public MarkdownContentResult Visit(ContentMultimodalText content, ContentVisitor
147147
{
148148
if (part.IsObject)
149149
{
150-
var obj = part.ObjectValue;
151-
if (obj.content_type == "image_asset_pointer" && string.IsNullOrWhiteSpace(obj.asset_pointer) == false)
150+
markdownContent.AddRange(GetMarkdownMediaAsset(context, part.ObjectValue));
151+
}
152+
else if (part.IsString)
153+
{
154+
markdownContent.Add(part.StringValue);
155+
}
156+
}
157+
return new MarkdownContentResult(markdownContent);
158+
}
159+
160+
private IEnumerable<string> GetMarkdownMediaAsset(ContentVisitorContext context, ContentMultimodalText.ContentMultimodalTextParts obj)
161+
{
162+
switch (obj.content_type)
163+
{
164+
case "image_asset_pointer" when string.IsNullOrWhiteSpace(obj.asset_pointer) == false:
152165
{
153166
var searchPattern = obj.asset_pointer.Replace("sediment://", string.Empty).Replace("file-service://", string.Empty);
154-
var markdownImage = assetLocator.GetMarkdownImage(new AssetRequest(
155-
searchPattern,
156-
context.Role,
157-
context.CreatedDate,
158-
context.UpdatedDate)
159-
);
167+
var markdownImage = GetMediaAsset(context, searchPattern);
160168

161169
if (string.IsNullOrWhiteSpace(markdownImage) == false)
162170
{
163-
markdownContent.Add(markdownImage);
171+
yield return markdownImage;
164172
}
165173
else
166174
{
167175
Console.Error.WriteLine("\tUnable to find asset " + obj.asset_pointer);
168-
markdownContent.Add($"> ⚠️ **Warning:** Could not find asset: {obj.asset_pointer}.");
176+
yield return $"> ⚠️ **Warning:** Could not find asset: {obj.asset_pointer}.";
169177
}
170178

171179
if (context.MessageMetadata.image_gen_title != null)
172180
{
173-
markdownContent.Add($"*{context.MessageMetadata.image_gen_title}* ");
181+
yield return $"*{context.MessageMetadata.image_gen_title}* ";
174182
}
175-
markdownContent.Add($"**Size:** {obj.size_bytes} **Dims:** {obj.width}x{obj.height} ");
183+
yield return $"**Size:** {obj.size_bytes} **Dims:** {obj.width}x{obj.height} ";
184+
break;
176185
}
177-
}
178-
else if (part.IsString)
179-
{
180-
markdownContent.Add(part.StringValue);
181-
}
186+
187+
case "real_time_user_audio_video_asset_pointer" when string.IsNullOrWhiteSpace(obj.audio_asset_pointer?.asset_pointer) == false:
188+
{
189+
var searchPattern = obj.audio_asset_pointer.asset_pointer.Replace("sediment://", string.Empty).Replace("file-service://", string.Empty);
190+
var markdownAsset = GetMediaAsset(context, searchPattern);
191+
192+
yield return $"{markdownAsset} ";
193+
break;
194+
}
195+
196+
case "audio_asset_pointer" when string.IsNullOrWhiteSpace(obj.asset_pointer) == false:
197+
{
198+
var searchPattern = obj.asset_pointer.Replace("sediment://", string.Empty).Replace("file-service://", string.Empty);
199+
var markdownAsset = GetMediaAsset(context, searchPattern);
200+
201+
yield return $"{markdownAsset} ";
202+
break;
203+
}
204+
205+
case "audio_transcription" when string.IsNullOrWhiteSpace(obj.text) == false:
206+
yield return $"*{obj.text}* ";
207+
break;
182208
}
183-
return new MarkdownContentResult(markdownContent);
209+
}
210+
211+
private string? GetMediaAsset(ContentVisitorContext context, string searchPattern)
212+
{
213+
return assetLocator.GetMarkdownMediaAsset(new AssetRequest(
214+
searchPattern,
215+
context.Role,
216+
context.CreatedDate,
217+
context.UpdatedDate)
218+
);
184219
}
185220

186221
public MarkdownContentResult Visit(ContentCode content, ContentVisitorContext context)

ChatGPTExport/Models/Conversations.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,8 @@ public class ContentMultimodalTextParts
406406
public int? height { get; set; }
407407
public object fovea { get; set; }
408408
public Metadata metadata { get; set; }
409+
public AudioAssetPointer audio_asset_pointer { get; set; }
410+
public string text { get; set; } // for audio transcription
409411

410412
public class Metadata
411413
{
@@ -447,6 +449,14 @@ public class Generation
447449

448450
[JsonExtensionData]
449451
public Dictionary<string, JsonElement> ExtraData { get; set; }
452+
453+
public class AudioAssetPointer
454+
{
455+
public string asset_pointer { get; set; }
456+
457+
[JsonExtensionData]
458+
public Dictionary<string, JsonElement> ExtraData { get; set; }
459+
}
450460
}
451461

452462
public override T Accept<T>(IContentVisitor<T> visitor, ContentVisitorContext context)

0 commit comments

Comments
 (0)