@@ -9,13 +9,10 @@ import (
99 "crypto/tls"
1010 "encoding/json"
1111 "errors"
12- uuid "github.com/nu7hatch/gouuid"
1312 "io"
1413 "log"
14+ "log/slog"
1515 "net/http"
16- "os"
17- "strconv"
18- "time"
1916)
2017
2118type Gigachat struct {
@@ -40,63 +37,6 @@ func NewGigachat() *Gigachat {
4037 }
4138}
4239
43- func (g * Gigachat ) getExpiresAtFromFile () int64 {
44- data , err := os .ReadFile (g .getExpiresFile ())
45- if err != nil {
46- return 0
47- }
48- i , err := strconv .ParseInt (string (data ), 10 , 64 )
49- if err != nil {
50- return 0
51- }
52- return i
53- }
54- func (g * Gigachat ) getTokenFromFile () string {
55- data , err := os .ReadFile (g .getTokenFile ())
56- if err != nil {
57- return ""
58- }
59- return string (data )
60- }
61- func (g Gigachat ) getExpiresFile () string {
62- filename , exists := os .LookupEnv (GigaChatExpiresFileEnv )
63- if ! exists {
64- return ".gigachat_expires"
65- }
66- return filename
67- }
68-
69- func (g Gigachat ) getTokenFile () string {
70- filename , exists := os .LookupEnv (GigaChatTokenFileEnv )
71- if ! exists {
72- return ".gigachat_token"
73- }
74- return filename
75- }
76-
77- func (g * Gigachat ) setExpiresAtToFile (value int64 ) {
78- fh , _ := os .OpenFile (g .getExpiresFile (), os .O_TRUNC | os .O_WRONLY | os .O_CREATE , 0666 )
79- fh .WriteString (strconv .FormatInt (value , 10 ))
80- defer fh .Close ()
81- }
82- func (g * Gigachat ) setTokenToFile (value string ) {
83- fh , _ := os .OpenFile (g .getTokenFile (), os .O_TRUNC | os .O_WRONLY | os .O_CREATE , 0666 )
84- fh .WriteString (value )
85- defer fh .Close ()
86- }
87- func (g * Gigachat ) getCurrentToken () string {
88- expAt := g .getExpiresAtFromFile ()
89- token := g .getTokenFromFile ()
90- apochNow := time .Now ().Unix ()
91- timeDelta := apochNow - (expAt / 1000 )
92- if timeDelta > 0 {
93- newExpAt , token2 := g .Auth ()
94- g .setExpiresAtToFile (newExpAt )
95- g .setTokenToFile (token2 )
96- token = token2
97- }
98- return token
99- }
10040func (g * Gigachat ) getRequestUrl (path string ) string {
10141 return "https://" + g .ApiHost + path
10242}
@@ -124,50 +64,6 @@ func (g *Gigachat) postRequest(url string, body io.Reader) (*http.Request, error
12464 return request , nil
12565}
12666
127- func (g * Gigachat ) getAuthData () string {
128- value , exists := os .LookupEnv (GigaChatAuthData )
129- if exists {
130- return value
131- }
132- if g .AuthData != "" {
133- return g .AuthData
134- }
135- return ""
136- }
137-
138- // Auth Авторизация для получения токена для запросов.
139- func (g * Gigachat ) Auth () (int64 , string ) {
140- http .DefaultTransport .(* http.Transport ).TLSClientConfig = & tls.Config {InsecureSkipVerify : true }
141- u , err := uuid .NewV4 ()
142- request , _ := http .NewRequest ("POST" , GigaChatOauthUrl , bytes .NewBufferString ("scope=GIGACHAT_API_PERS" ))
143- request .Header .Set ("Content-Type" , "application/x-www-form-urlencoded" )
144- request .Header .Set ("RqUID" , u .String ())
145- request .Header .Set ("Authorization" , "Basic " + g .getAuthData ())
146- client := & http.Client {}
147- response , e := client .Do (request )
148-
149- if e != nil {
150- log .Fatal (e )
151- }
152- if response .StatusCode != http .StatusOK {
153- return 0 , ""
154- }
155- body , err := io .ReadAll (response .Body )
156- if err != nil {
157- log .Println (err )
158- }
159- log .Println (string (body ))
160- defer response .Body .Close ()
161-
162- var result TokenResponse
163- err2 := json .Unmarshal (body , & result )
164- if err2 != nil {
165- log .Fatal (err2 )
166- }
167- os .Setenv (GigaChatToken , result .AccessToken )
168- return result .ExpiresAt , result .AccessToken
169- }
170-
17167// GetModels Получить список моделей.
17268func (g * Gigachat ) GetModels () ([]ModelItem , error ) {
17369 url := g .getRequestUrl (GigaChatModelsPath )
@@ -260,7 +156,7 @@ func (g *Gigachat) ChatCompletions(messages []MessageRequest) (string, error) {
260156 var result ChatCompletionResponse
261157 err = json .Unmarshal (body , & result )
262158 if err != nil {
263- log . Fatal ( err )
159+ slog . Error ( "Json Unmarshal error:" , err )
264160 }
265161 return result .Choices [0 ].Message .Content , nil
266162}
@@ -269,7 +165,7 @@ func (g *Gigachat) ChatCompletions(messages []MessageRequest) (string, error) {
269165func (g * Gigachat ) Ask (input string ) (string , error ) {
270166 return g .ChatCompletions ([]MessageRequest {
271167 {
272- Role : "user" ,
168+ Role : GigaChatRoleUser ,
273169 Content : input ,
274170 },
275171 })
0 commit comments