diff --git a/adapter/adapter.go b/adapter/adapter.go index 7aba8ce..5b4abc0 100644 --- a/adapter/adapter.go +++ b/adapter/adapter.go @@ -20,6 +20,7 @@ import ( ) var defaultMaxRetries = 3 +var midjourneyMaxRetries = 10 type RequestProps struct { MaxRetries *int diff --git a/adapter/midjourney/api.go b/adapter/midjourney/api.go index c9cd6d6..ab7245c 100644 --- a/adapter/midjourney/api.go +++ b/adapter/midjourney/api.go @@ -31,7 +31,8 @@ func (c *ChatInstance) CreateImagineRequest(prompt string) (*ImagineResponse, er return utils.MapToStruct[ImagineResponse](res), nil } -func getStatusCode(code int) error { +func getStatusCode(response *ImagineResponse) error { + code := response.Code switch code { case SuccessCode, QueueCode: return nil @@ -42,7 +43,7 @@ func getStatusCode(code int) error { case NudeCode: return fmt.Errorf("prompt violates the content policy of midjourney, the request is rejected") default: - return fmt.Errorf("unknown error from midjourney") + return fmt.Errorf(fmt.Sprintf("unknown error from midjourney (code: %d, description: %s)", code, response.Description)) } } @@ -57,7 +58,7 @@ func (c *ChatInstance) CreateStreamImagineTask(prompt string, hook func(progress return "", err } - if err := getStatusCode(res.Code); err != nil { + if err := getStatusCode(res); err != nil { return "", err } diff --git a/adapter/request.go b/adapter/request.go index 850b6c1..e43531c 100644 --- a/adapter/request.go +++ b/adapter/request.go @@ -20,8 +20,11 @@ func isQPSOverLimit(model string, err error) bool { } } -func getRetries(retries *int) int { +func getRetries(model string, retries *int) int { if retries == nil { + if globals.IsMidjourneyModel(model) { + return midjourneyMaxRetries + } return defaultMaxRetries } @@ -31,7 +34,7 @@ func getRetries(retries *int) int { func NewChatRequest(props *ChatProps, hook globals.Hook) error { err := createChatRequest(props, hook) - retries := getRetries(props.MaxRetries) + retries := getRetries(props.Model, props.MaxRetries) props.Current++ if IsAvailableError(err) { diff --git a/app/index.html b/app/index.html index 5cae1ab..69d20fc 100644 --- a/app/index.html +++ b/app/index.html @@ -5,8 +5,8 @@ Chat Nio - - + + @@ -14,10 +14,11 @@ +
- + diff --git a/app/public/service.js b/app/public/service.js new file mode 100644 index 0000000..6c22a52 --- /dev/null +++ b/app/public/service.js @@ -0,0 +1,24 @@ + +const SERVICE_NAME = "chatnio"; + +self.addEventListener('activate', function (event) { + console.debug("[service] service worker activated"); +}); + +self.addEventListener('install', function (event) { + event.waitUntil( + caches.open(SERVICE_NAME) + .then(function (cache) { + return cache.addAll([]); + }) + ); +}); + +self.addEventListener('fetch', function (event) { + event.respondWith( + caches.match(event.request) + .then(function (response) { + return response || fetch(event.request); + }) + ); +}); diff --git a/app/public/workbox.js b/app/public/workbox.js new file mode 100644 index 0000000..9d94d1b --- /dev/null +++ b/app/public/workbox.js @@ -0,0 +1,10 @@ + +if ('serviceWorker' in navigator) { + window.addEventListener('load', function () { + navigator.serviceWorker.register('/service.js').then(function (registration) { + console.debug(`[service] service worker registered with scope: ${registration.scope}`); + }, function (err) { + console.debug(`[service] service worker registration failed: ${err}`); + }); + }); +} diff --git a/utils/tokenizer.go b/utils/tokenizer.go index 795467a..910fb0c 100644 --- a/utils/tokenizer.go +++ b/utils/tokenizer.go @@ -170,11 +170,11 @@ func CountOutputToken(model string, t int) float32 { case globals.StableDiffusion: return 0.25 case globals.Midjourney: - return 0.5 + return 0.1 case globals.MidjourneyFast: - return 2 + return 0.5 case globals.MidjourneyTurbo: - return 5 + return 1 case globals.Dalle3: return 5.6 default: