日記 リリースノート
- 技術選定した
- Deno Deploy でフロントエンド/APIのCDを作り、空ページをデプロイした #3
- supabaseをセットアップ #5
- Prismaセットアップ
- フロントエンドセットアップ
- 最小のワーカーを書いた #11
- Cloudflare R2 をセットアップして音声をアップロードできるようにした
- compose-cd でワーカーのCDを作った
- Task APIを実装した
create or replace function public.handle_new_user()
returns trigger
language plpgsql
security definer set search_path = public
as $$
begin
insert into public.users (auth_id, email)
values (new.id, new.email);
return new;
end;
$$;
create trigger on_auth_user_created
after insert on auth.users
for each row execute procedure public.handle_new_user();
- UTF-8以外のHTMLに対応 #6
- HTML→MD変換する実装を変えた #9
- 音声のタイムスタンプ計算を実装した #30
- PRをレビューしてくれるBotを作って導入した #32
- ARCHITECTURE.md を作った #37
- SRTファイルを生成するようにした #30
shadcn/ui
を使ってUIを作り直した #41
- head, styleタグを除外するように修正
- 今後のためにスクレイピングタスクと音声合成タスクを分離中 #15
- LLMで原稿を変換したい: とりあえず要約
- feat: スクリプト機能 #44
- スクリプト実行ランタイム #17
- 原稿生成と音声生成を分離した #45
- スクリプト作成機能 #49
- ポッドキャストにスクリプトを設定し、エピソードはそれを引き継ぐように #50
- feat: コメント機能 #47
- feat: ローカルでスクリプト作成・実行するためのCLIを作成 #24
- clean: worker側の猛烈なリファクタリング
- feat: エピソード作成定期実行機能 #21
- 実行予定時刻とcronを持つ
- 実行予定時刻を過ぎたらタスクを実行する, cronがあれば次回の実行予定時刻でタスクを作成
- chore: ドキュメントページを作成 #52
- feat: エピソード定期作成フォーム #53
- fix: mp3とsrtファイルはPreSign URLを使うように #54
- fix: ローカルのスクリプトを呼べるようにする #32
- fix: スクリプトではなくタスクが評価結果を持つ #57
- WIP: 環境変数を設定出来るようにする #60
- WIP: UIブラッシュアップ #59
- AivisSpeech 導入中
- Nvidia + CUDA driver N回入れ直しています。コンテナ上でのみ?発生する?
voicevox_engine:nvidia-latest
イメージが悪いのか、ホストが悪いのかわからない
voicevox_engine-1 | raise CoreError(
voicevox_engine-1 | voicevox_engine.core.core_wrapper.CoreError: modelデータ読み込みに失敗しました
(/opt/voicevox_core/model/d0.bin): Failed to create session: Error calling ONNX Runtime C function: /onnxruntime_src/onnxruntime/core/providers/cuda/cuda_call.cc:124 std::conditional_t<THRW, void, onnxruntime::common::Status> onnxruntime::CudaCall(ERRTYPE, const char*, const char*, ERRTYPE, const char*)
[with ERRTYPE = cudaError; bool THRW = true; std::conditional_t<THRW, void, onnxruntime::common::Status> = void] /onnxruntime_src/onnxruntime/core/providers/cuda/cuda_call.cc:117 std::conditional_t<THRW, void, onnxruntime::common::Status> onnxruntime::CudaCall(ERRTYPE, const char*, const char*, ERRTYPE, const char*)
[with ERRTYPE = cudaError; bool THRW = true; std::conditional_t<THRW, void, onnxruntime::common::Status> = void]
CUDA failure 35: CUDA driver version is insufficient for CUDA runtime version ; GPU=0 ; hostname=c348de8374be ; expr=cudaSetDevice(info_.device_id);
- OpenAI Assistants APIをサポート #40
llm(api_key, prompt)
関数を追加
llm_assistant(api_key, thread_id, assistant_id, prompt)
関数を追加
thread_id
はスクリプト実行毎に作成される
- スクリプトを直接JSONで書くよりTypeScriptで書いてJSONを出力すると楽なことに気づいた。
const listener_assistant_id = "asst_xxx";
const personality_assistant_id = "asst_yyy";
const mail: Mail = {
name: "ポメ太郎",
body: "カレーを作るときのコツはなんですか?",
};
const context = {
"api_key": "$OPENAI_API_KEY",
};
const template = let_in(
{ "thread_id": eval_("create_thread(api_key)") },
let_in(
{ "mail": llm_assistant(listener_assistant_id, mail.body) },
{
"sections": [
serif(`${mail.name} さんからのお便りです。`),
serif(llm_assistant(listener_assistant_id, mail.body)),
serif(llm_assistant(personality_assistant_id, mail.body)),
],
},
),
);
- workerにOpenTelemetryを導入 #37
- workerのトレースをOpenTelemetry CollectorにTraceを送信してJaegerで確認できるようになった。
- 【スクリプト】環境変数を設定出来るようにする #60
- 【スクリプト】コメント機能 #42
- fix: UIを整えた
- プレイヤーの状態管理に jotai を導入しました。

- fix: 定期実行機能をタスクに持たせるように
- feat: 音声ファイルのサポート
- 合成音声に加えてジングル等のSEが流せるようになりました。BGMは流せません。
- 区間指定だけ出来ます。裏はffmpeg使っています。
- fix: ポッドキャスト・エピソード・スクリプトにdescriptionを追加
- feat: スクリプトの機能追加
function_calling(open_ai_api_key, prompt, function)
- スクリプトにJSON schemaを保存しておき, この関数に渡す想定です。関数は1個に制限しています。
- どのようにして番組デモ・お便りデモを作るか考えています
- コーナーのテンプレートを作って話題をプロンプトとして与える?
- RSSフィードからランダムに選ぶ?
- RSSをパースする関数と乱数を追加したので
text(fetch(choice(rss(fetch('https://zenn.dev/feed')).items).link))
と書ける
- アニメ/音楽紹介番組
- アニメのあらすじ等をAPIで提供しているものがあまり見つからない...
- Spotifyで30秒のプレビューが取れなくなっている...
- Dify でエピソード投稿をするワークフローを作ろうとしています