-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Igor Sachivka <juicy.igor@gmail.com>
- Loading branch information
Showing
21 changed files
with
561 additions
and
480 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
name: CD | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
|
||
jobs: | ||
Build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: 'actions/checkout@v3' | ||
|
||
- name: Docker meta | ||
id: meta | ||
uses: docker/metadata-action@v4 | ||
with: | ||
images: isachivka/gpt | ||
|
||
- name: Login to DockerHub | ||
if: github.event_name != 'pull_request' | ||
uses: docker/login-action@v2 | ||
with: | ||
username: ${{ secrets.DOCKERHUB_USERNAME }} | ||
password: ${{ secrets.DOCKERHUB_TOKEN }} | ||
|
||
- name: Build and push | ||
uses: docker/build-push-action@v4 | ||
with: | ||
context: . | ||
push: ${{ github.event_name != 'pull_request' }} | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
|
||
- name: Authenticate to Google Cloud | ||
uses: google-github-actions/auth@v1 | ||
with: | ||
credentials_json: "${{ secrets.GOOGLE_CREDENTIALS }}" | ||
|
||
- name: Set up Cloud SDK | ||
uses: google-github-actions/setup-gcloud@v1 | ||
|
||
- name: Print image tags into PR | ||
run: | | ||
gcloud compute instances update-container gpt-tg \ | ||
--zone europe-central2-a \ | ||
--container-image=isachivka/gpt:master |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import { Telegraf } from "telegraf"; | ||
import { Ctx } from "./types"; | ||
|
||
console.log(process.env.BOT_KEY); | ||
|
||
export const bot = new Telegraf(process.env.BOT_KEY); | ||
|
||
export const send = (ctx: Ctx, text: string) => { | ||
return bot.telegram.sendMessage(ctx.chat.id, text, {}); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import { gpt4Mode, imageMode, reDrawMode, textMode } from "./modes"; | ||
|
||
export const imageModeSettings = { | ||
n: 1, | ||
size: "512x512" as const, | ||
}; | ||
|
||
export const reDrawModeSettings = [1, "512x512"] as const; | ||
|
||
/* | ||
image_mode - Image creation mode | ||
text_mode - Chat mode | ||
gpt4_mode - GPT-4 mode (waiting for GPT-4) | ||
redraw_mode - Image re-draw mode | ||
new_dialog - New dialog | ||
set_temperature_mode - Set temperature | ||
*/ | ||
|
||
export const commands = { | ||
imageMode, | ||
textMode, | ||
gpt4Mode, | ||
reDrawMode, | ||
start: "start", | ||
newDialog: "new_dialog", | ||
}; |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import { send } from "../bot"; | ||
import { textMode } from "../modes"; | ||
import { openai } from "../openai"; | ||
import { Reply, UpdateCtx } from "../types"; | ||
import { locales } from "../locales/locales"; | ||
import { usersStorage } from "../user/usersStorage"; | ||
import { imageModeSettings } from "../const"; | ||
|
||
export const imageHandler = (ctx: UpdateCtx & Reply) => { | ||
const user = usersStorage.get(ctx.from.id); | ||
user.changeMode(textMode); | ||
return openai | ||
.createImage({ | ||
prompt: ctx.update.message.text, | ||
...imageModeSettings, | ||
}) | ||
.then((response) => { | ||
ctx.replyWithPhoto(response.data.data[0].url); | ||
return send(ctx, locales.en.backToText); | ||
}) | ||
.catch((err) => { | ||
return Promise.all([ | ||
send(ctx, "❗️" + err.message), | ||
send(ctx, "❗️" + err.response.data.error.message), | ||
]); | ||
}); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
import * as process from "process"; | ||
import { send } from "../bot"; | ||
import { reDrawMode, textMode } from "../modes"; | ||
import { Telegram } from "telegraf"; | ||
import { downloadImage, getPaths, removeFiles } from "../utils/download"; | ||
import { openai } from "../openai"; | ||
import type { Reply, UpdateCtx, UpdateDocCtx } from "../types"; | ||
import { locales } from "../locales/locales"; | ||
import { usersStorage } from "../user/usersStorage"; | ||
import { reDrawModeSettings } from "../const"; | ||
|
||
export const reDrawHandler = (ctx: UpdateCtx & Reply) => { | ||
const user = usersStorage.get(ctx.from.id); | ||
const { text } = ctx.update.message; | ||
if ( | ||
user.getUserImage() === undefined || | ||
user.getUserImageMask() === undefined | ||
) { | ||
return send(ctx, locales.en.noImage); | ||
} | ||
|
||
const { filePath, filePathMask } = getPaths(ctx.from.id); | ||
|
||
Promise.all([ | ||
downloadImage(user.getUserImage().toString(), filePath), | ||
downloadImage(user.getUserImageMask().toString(), filePathMask), | ||
] as const).then((imgs) => { | ||
return openai | ||
.createImageEdit(imgs[0], text, imgs[1], ...reDrawModeSettings) | ||
.then((response) => { | ||
ctx.replyWithPhoto(response.data.data[0].url); | ||
user.addUserImage(); | ||
user.addUserImageMask(); | ||
removeFiles({ filePath, filePathMask }); | ||
user.changeMode(textMode); | ||
return send(ctx, locales.en.backToText); | ||
}) | ||
.catch((err) => { | ||
return Promise.all([ | ||
send(ctx, "❗️" + err.message), | ||
send(ctx, "❗️" + err.response?.data?.error?.message), | ||
]); | ||
}); | ||
}); | ||
}; | ||
|
||
export const onPhotoFile = (ctx: UpdateDocCtx): boolean => { | ||
const user = usersStorage.get(ctx.from.id); | ||
|
||
if (ctx.update?.message?.document === undefined) { | ||
return false; | ||
} | ||
|
||
if (user.getMode() !== reDrawMode) { | ||
send(ctx, locales.en.noReDraw); | ||
return true; | ||
} | ||
|
||
const telegram = new Telegram(process.env.BOT_KEY); | ||
|
||
if (user.getUserImage() === undefined) { | ||
telegram | ||
.getFileLink(ctx.update?.message?.document?.file_id) | ||
.then((link) => { | ||
user.addUserImage(link); | ||
return send(ctx, locales.en.giveMask); | ||
}); | ||
} else { | ||
telegram | ||
.getFileLink(ctx.update?.message?.document?.file_id) | ||
.then((link) => { | ||
user.addUserImageMask(link); | ||
return send(ctx, locales.en.givePrompt); | ||
}); | ||
} | ||
|
||
return true; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import { UpdateCtx } from "../types"; | ||
import { locales } from "../locales/locales"; | ||
import { textMode } from "../modes"; | ||
import { send } from "../bot"; | ||
import { usersStorage } from "../user/usersStorage"; | ||
|
||
export const temperatureHandler = (ctx: UpdateCtx) => { | ||
const user = usersStorage.get(ctx.from.id); | ||
const text = ctx.update.message.text; | ||
const temperature = Number(text); | ||
if (isNaN(temperature)) { | ||
return send(ctx, locales.en.wrongTemperature); | ||
} | ||
if (temperature < 0 || temperature > 2) { | ||
return send(ctx, locales.en.wrongTemperature); | ||
} | ||
user.setTemperature(temperature); | ||
user.changeMode(textMode); | ||
return send(ctx, locales.en.ok); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
import { send } from "../bot"; | ||
import { gpt4Mode, textMode } from "../modes"; | ||
import { openai } from "../openai"; | ||
import type { UpdateCtx } from "../types"; | ||
import { usersStorage } from "../user/usersStorage"; | ||
|
||
export const textHandler = (ctx: UpdateCtx) => { | ||
const user = usersStorage.get(ctx.from.id); | ||
user.appendHistory("user", ctx.update.message.text); | ||
|
||
try { | ||
return openai | ||
.createChatCompletion({ | ||
model: user.getMode() === gpt4Mode ? "gpt-4" : "gpt-3.5-turbo", | ||
messages: user.getHistory(), | ||
temperature: user.getTemperature(), | ||
}) | ||
.then((response) => { | ||
const choice = response.data.choices[0]; | ||
user.appendHistory(choice.message.role, choice.message.content); | ||
user.changeMode(textMode); | ||
return send(ctx, choice.message.content); | ||
}) | ||
.catch((error) => { | ||
user.changeMode(textMode); | ||
return send(ctx, "Error: " + JSON.stringify(error)); | ||
}); | ||
} catch (error) { | ||
user.changeMode(textMode); | ||
return send(ctx, "Error: " + JSON.stringify(error)); | ||
} | ||
}; |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.